merge origin
This commit is contained in:
commit
379bae20ae
23
README.md
23
README.md
|
|
@ -4,15 +4,9 @@
|
||||||
|
|
||||||
性别男,若依是给还没有出生女儿取的名字(寓意:你若不离不弃,我必生死相依)
|
性别男,若依是给还没有出生女儿取的名字(寓意:你若不离不弃,我必生死相依)
|
||||||
|
|
||||||
> 阿里云服务器89元/年,双12年末特惠,爆款产品限时1折 :[点我进入](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link)
|
* 感谢 [hplus](https://gitee.com/hplus_admin/hplus) 后台主题 UI 框架。
|
||||||
|
* 前后端分离版本,请移步[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
|
||||||
> 如需前后端分离版本,请移步 [RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue)
|
* 阿里云优惠券:[点我进入](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)
|
||||||
|
|
||||||
> 如需单应用,请移步 [RuoYi-fast](https://gitee.com/y_project/RuoYi-fast) `(保持同步更新)`,如需其他版本,请移步 [项目扩展](http://doc.ruoyi.vip/ruoyi/document/xmkz.html) `(不定时更新)`
|
|
||||||
|
|
||||||
> 阿里云通用云产品1888优惠券 :[点我领取](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof) 腾讯云通用云产品2860优惠券 :[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console) `(仅限新用户)`
|
|
||||||
|
|
||||||
> 阿里云Hi拼购 限量爆款 低至199元/年 [点我进入](https://www.aliyun.com/acts/hi-group-buying?userCode=brki8iof) `(仅限新用户)`
|
|
||||||
|
|
||||||
## 内置功能
|
## 内置功能
|
||||||
|
|
||||||
|
|
@ -33,12 +27,13 @@
|
||||||
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
|
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
|
||||||
16. 在线构建器:拖动表单元素生成相应的HTML代码。
|
16. 在线构建器:拖动表单元素生成相应的HTML代码。
|
||||||
17. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
|
17. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
|
||||||
|
|
||||||
## 在线体验
|
## 在线体验
|
||||||
> admin/admin123
|
|
||||||
> 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
|
- admin/admin123
|
||||||
|
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
|
||||||
|
|
||||||
演示地址:http://ruoyi.vip
|
演示地址:http://ruoyi.vip
|
||||||
|
|
||||||
文档地址:http://doc.ruoyi.vip
|
文档地址:http://doc.ruoyi.vip
|
||||||
|
|
||||||
## 演示图
|
## 演示图
|
||||||
|
|
@ -82,11 +77,11 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="https://oscimg.oschina.net/oscnet/bed2b98a44e7ae820c2885329e711965c28.jpg"/></td>
|
<td><img src="https://oscimg.oschina.net/oscnet/bed2b98a44e7ae820c2885329e711965c28.jpg"/></td>
|
||||||
<td><img src="https://oscimg.oschina.net/oscnet/5f3d39a141f21f81b90536f391b8408f1fa.jpg"/></td>
|
<td><img src="https://oscimg.oschina.net/oscnet/up-6d73c2140ce694e3de4c05035fdc1868d4c.png"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
## 若依交流群
|
## 若依交流群
|
||||||
|
|
||||||
QQ群: [](https://jq.qq.com/?_wv=1027&k=5HBAaYN) [](https://jq.qq.com/?_wv=1027&k=5cHeRVW) [](https://jq.qq.com/?_wv=1027&k=53R0L5Z) [](https://jq.qq.com/?_wv=1027&k=5g75dCU) [](https://jq.qq.com/?_wv=1027&k=58cPoHA) [](https://jq.qq.com/?_wv=1027&k=5Ofd4Pb) [](https://jq.qq.com/?_wv=1027&k=5yugASz) [](https://jq.qq.com/?_wv=1027&k=5Rf3d2P) [](https://jq.qq.com/?_wv=1027&k=5ZIjaeP)
|
QQ群: [](https://jq.qq.com/?_wv=1027&k=5HBAaYN) [](https://jq.qq.com/?_wv=1027&k=5cHeRVW) [](https://jq.qq.com/?_wv=1027&k=53R0L5Z) [](https://jq.qq.com/?_wv=1027&k=5g75dCU) [](https://jq.qq.com/?_wv=1027&k=58cPoHA) [](https://jq.qq.com/?_wv=1027&k=5Ofd4Pb) [](https://jq.qq.com/?_wv=1027&k=5yugASz) [](https://jq.qq.com/?_wv=1027&k=5Rf3d2P) [](https://jq.qq.com/?_wv=1027&k=5ZIjaeP) [](https://jq.qq.com/?_wv=1027&k=5CJw1jY) [](https://jq.qq.com/?_wv=1027&k=5omzbKc) [](https://jq.qq.com/?_wv=1027&k=qPIKBb7s)
|
||||||
|
|
@ -18,8 +18,12 @@
|
||||||
2.2 导入工程
|
2.2 导入工程
|
||||||
通过Eclipse导入工程,步骤如下:
|
通过Eclipse导入工程,步骤如下:
|
||||||
(1)点击左侧项目区域 -- >Import...
|
(1)点击左侧项目区域 -- >Import...
|
||||||
|
|
||||||
(2)选择RuoYi
|
(2)选择RuoYi
|
||||||
(3)点击Finish(4)RuoYi的代码就被导出到Eclipse中了,此时可以在工程视图中看到。
|
|
||||||
|
(3)点击Finish
|
||||||
|
|
||||||
|
(4)RuoYi的代码就被导出到Eclipse中了,此时可以在工程视图中看到。
|
||||||
|
|
||||||
3. 运行若依系统
|
3. 运行若依系统
|
||||||
3.1 必要的配置
|
3.1 必要的配置
|
||||||
|
|
@ -33,18 +37,24 @@
|
||||||
3.1.3 代码生成配置
|
3.1.3 代码生成配置
|
||||||
编辑src/main/ resources目录下的application.yml 文件,
|
编辑src/main/ resources目录下的application.yml 文件,
|
||||||
|
|
||||||
默认为module,根据实际情况修改即可。生成的表要有注释注:如对模板有特殊需求,可自行修改。编辑src/main/ resources/templates/vm目录下
|
默认为module,根据实际情况修改即可。生成的表要有注释
|
||||||
|
|
||||||
|
注:如对模板有特殊需求,可自行修改。编辑src/main/ resources/templates/vm目录下
|
||||||
|
|
||||||
|
|
||||||
3.1.4 日志配置
|
3.1.4 日志配置
|
||||||
编辑src/main/ resources目录下的logback.yml 文件
|
编辑src/main/ resources目录下的logback.yml 文件
|
||||||
<property name="log.path" value="/home/ruoyi/logs" />
|
<property name="log.path" value="/home/ruoyi/logs" />
|
||||||
改为自己需要的路径
|
改为自己需要的路径
|
||||||
<property name="log.path" value="/Users/jyking/project/logs" />
|
|
||||||
3.2 启动及验证
|
3.2 启动及验证
|
||||||
启动RuoYiApplication.java 出现如下图表示启动成功
|
启动RuoYiApplication.java 出现如下图表示启动成功
|
||||||
打开浏览器,输入:http://localhost:80/若能正确展示登录页面,并能成功登录,登录后菜单及页面展示正常,则表明环境搭建成功。默认密码为 admin/admin123
|
|
||||||
|
|
||||||
演示地址:http://www.ruoyi.club
|
打开浏览器,输入:http://localhost:80/
|
||||||
|
若能正确展示登录页面,并能成功登录,登录后菜单及页面展示正常,则表明环境搭建成功。
|
||||||
|
默认密码为 admin/admin123
|
||||||
|
|
||||||
|
演示地址:http://ruoyi.vip
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -69,6 +79,7 @@
|
||||||
|
|
||||||
4.1.4 启动及验证
|
4.1.4 启动及验证
|
||||||
运行startup.bat 出现如下图即部署成功
|
运行startup.bat 出现如下图即部署成功
|
||||||
|
|
||||||
4.2 Jar方式部署
|
4.2 Jar方式部署
|
||||||
执行命令:java - jar RuoYi.jar
|
执行命令:java - jar RuoYi.jar
|
||||||
脚本执行:ry.sh start 启动stop 停止
|
脚本执行:ry.sh start 启动stop 停止
|
||||||
|
|
|
||||||
43
pom.xml
43
pom.xml
|
|
@ -1,37 +1,35 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi</artifactId>
|
<artifactId>ruoyi</artifactId>
|
||||||
<version>4.1.0</version>
|
<version>4.4.0</version>
|
||||||
|
|
||||||
<name>ruoyi</name>
|
<name>ruoyi</name>
|
||||||
<url>http://www.ruoyi.vip</url>
|
<url>http://www.ruoyi.vip</url>
|
||||||
<description>若依管理系统</description>
|
<description>若依管理系统</description>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<ruoyi.version>4.1.0</ruoyi.version>
|
<ruoyi.version>4.4.0</ruoyi.version>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
<java.version>1.8</java.version>
|
<java.version>1.8</java.version>
|
||||||
<shiro.version>1.4.2</shiro.version>
|
<shiro.version>1.6.0</shiro.version>
|
||||||
<thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version>
|
<thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version>
|
||||||
<mybatis.boot.version>1.3.2</mybatis.boot.version>
|
<mybatis.boot.version>1.3.2</mybatis.boot.version>
|
||||||
<druid.version>1.1.14</druid.version>
|
<druid.version>1.1.22</druid.version>
|
||||||
<bitwalker.version>1.19</bitwalker.version>
|
<bitwalker.version>1.19</bitwalker.version>
|
||||||
<kaptcha.version>2.3.2</kaptcha.version>
|
<kaptcha.version>2.3.2</kaptcha.version>
|
||||||
<swagger.version>2.9.2</swagger.version>
|
<swagger.version>2.9.2</swagger.version>
|
||||||
<pagehelper.boot.version>1.2.5</pagehelper.boot.version>
|
<pagehelper.boot.version>1.2.5</pagehelper.boot.version>
|
||||||
<fastjson.version>1.2.60</fastjson.version>
|
<fastjson.version>1.2.73</fastjson.version>
|
||||||
<oshi.version>3.9.1</oshi.version>
|
<oshi.version>3.9.1</oshi.version>
|
||||||
<commons.io.version>2.5</commons.io.version>
|
<commons.io.version>2.5</commons.io.version>
|
||||||
<commons.fileupload.version>1.3.3</commons.fileupload.version>
|
<commons.fileupload.version>1.3.3</commons.fileupload.version>
|
||||||
<poi.version>3.17</poi.version>
|
<poi.version>3.17</poi.version>
|
||||||
<velocity.version>1.7</velocity.version>
|
<velocity.version>1.7</velocity.version>
|
||||||
<querydsl.version>4.2.1</querydsl.version>
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<!-- 依赖声明 -->
|
<!-- 依赖声明 -->
|
||||||
|
|
@ -220,39 +218,10 @@
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.querydsl</groupId>
|
|
||||||
<artifactId>querydsl-jpa</artifactId>
|
|
||||||
<version>${querydsl.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
|
||||||
<groupId>com.mysema.maven</groupId>
|
|
||||||
<artifactId>apt-maven-plugin</artifactId>
|
|
||||||
<version>1.1.3</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<goals>
|
|
||||||
<goal>process</goal>
|
|
||||||
</goals>
|
|
||||||
<configuration>
|
|
||||||
<outputDirectory>target/generated-sources/java</outputDirectory>
|
|
||||||
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.querydsl</groupId>
|
|
||||||
<artifactId>querydsl-apt</artifactId>
|
|
||||||
<version>${querydsl.version}</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>ruoyi</artifactId>
|
<artifactId>ruoyi</artifactId>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<version>4.1.0</version>
|
<version>4.4.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
@ -55,11 +55,16 @@
|
||||||
<artifactId>springfox-swagger-ui</artifactId>
|
<artifactId>springfox-swagger-ui</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Mysql驱动包 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- 核心模块-->
|
<!-- 核心模块-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-framework</artifactId>
|
<artifactId>ruoyi-framework</artifactId>
|
||||||
<version>${ruoyi.version}</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- 定时任务-->
|
<!-- 定时任务-->
|
||||||
|
|
@ -74,18 +79,6 @@
|
||||||
<artifactId>ruoyi-generator</artifactId>
|
<artifactId>ruoyi-generator</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- flyway自动管理数据库 -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.flywaydb</groupId>
|
|
||||||
<artifactId>flyway-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-hibernate5 -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
|
||||||
<artifactId>jackson-datatype-hibernate5</artifactId>
|
|
||||||
<version>2.10.1</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
|
@ -46,10 +47,9 @@ public class CommonController {
|
||||||
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
|
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
|
||||||
String filePath = Global.getDownloadPath() + fileName;
|
String filePath = Global.getDownloadPath() + fileName;
|
||||||
|
|
||||||
response.setCharacterEncoding("utf-8");
|
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||||
response.setContentType("multipart/form-data");
|
FileUtils.setAttachmentResponseHeader(response, realFileName);
|
||||||
response.setHeader("Content-Disposition",
|
|
||||||
"attachment;fileName=" + FileUtils.setFileDownloadHeader(request, realFileName));
|
|
||||||
FileUtils.writeBytes(filePath, response.getOutputStream());
|
FileUtils.writeBytes(filePath, response.getOutputStream());
|
||||||
if (delete) {
|
if (delete) {
|
||||||
FileUtils.deleteFile(filePath);
|
FileUtils.deleteFile(filePath);
|
||||||
|
|
@ -92,10 +92,10 @@ public class CommonController {
|
||||||
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
|
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
|
||||||
// 下载名称
|
// 下载名称
|
||||||
String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
|
String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
|
||||||
response.setCharacterEncoding("utf-8");
|
|
||||||
response.setContentType("multipart/form-data");
|
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||||
response.setHeader("Content-Disposition",
|
FileUtils.setAttachmentResponseHeader(response, downloadName);
|
||||||
"attachment;fileName=" + FileUtils.setFileDownloadHeader(request, downloadName));
|
|
||||||
FileUtils.writeBytes(downloadPath, response.getOutputStream());
|
FileUtils.writeBytes(downloadPath, response.getOutputStream());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.ModelMap;
|
import org.springframework.ui.ModelMap;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
|
@ -22,6 +21,7 @@ import com.ruoyi.common.core.text.Convert;
|
||||||
import com.ruoyi.common.exception.BusinessException;
|
import com.ruoyi.common.exception.BusinessException;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||||
|
import com.ruoyi.web.controller.demo.domain.CustomerModel;
|
||||||
import com.ruoyi.web.controller.demo.domain.UserOperateModel;
|
import com.ruoyi.web.controller.demo.domain.UserOperateModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -31,11 +31,11 @@ import com.ruoyi.web.controller.demo.domain.UserOperateModel;
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/demo/operate")
|
@RequestMapping("/demo/operate")
|
||||||
public class DemoOperateController extends BaseController {
|
public class DemoOperateController extends BaseController
|
||||||
|
{
|
||||||
private String prefix = "demo/operate";
|
private String prefix = "demo/operate";
|
||||||
|
|
||||||
private final static Map<Integer, UserOperateModel> users = new LinkedHashMap<Integer, UserOperateModel>();
|
private final static Map<Integer, UserOperateModel> users = new LinkedHashMap<Integer, UserOperateModel>();
|
||||||
|
|
||||||
{
|
{
|
||||||
users.put(1, new UserOperateModel(1, "1000001", "测试1", "0", "15888888888", "ry@qq.com", 150.0, "0"));
|
users.put(1, new UserOperateModel(1, "1000001", "测试1", "0", "15888888888", "ry@qq.com", 150.0, "0"));
|
||||||
users.put(2, new UserOperateModel(2, "1000002", "测试2", "1", "15666666666", "ry@qq.com", 180.0, "1"));
|
users.put(2, new UserOperateModel(2, "1000002", "测试2", "1", "15666666666", "ry@qq.com", 180.0, "1"));
|
||||||
|
|
@ -69,7 +69,8 @@ public class DemoOperateController extends BaseController {
|
||||||
* 表格
|
* 表格
|
||||||
*/
|
*/
|
||||||
@GetMapping("/table")
|
@GetMapping("/table")
|
||||||
public String table() {
|
public String table()
|
||||||
|
{
|
||||||
return prefix + "/table";
|
return prefix + "/table";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -77,7 +78,8 @@ public class DemoOperateController extends BaseController {
|
||||||
* 其他
|
* 其他
|
||||||
*/
|
*/
|
||||||
@GetMapping("/other")
|
@GetMapping("/other")
|
||||||
public String other() {
|
public String other()
|
||||||
|
{
|
||||||
return prefix + "/other";
|
return prefix + "/other";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -86,34 +88,44 @@ public class DemoOperateController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public TableDataInfo list(UserOperateModel userModel) {
|
public TableDataInfo list(UserOperateModel userModel)
|
||||||
|
{
|
||||||
TableDataInfo rspData = new TableDataInfo();
|
TableDataInfo rspData = new TableDataInfo();
|
||||||
List<UserOperateModel> userList = new ArrayList<UserOperateModel>(users.values());
|
List<UserOperateModel> userList = new ArrayList<UserOperateModel>(users.values());
|
||||||
// 查询条件过滤
|
// 查询条件过滤
|
||||||
if (StringUtils.isNotEmpty(userModel.getSearchValue())) {
|
if (StringUtils.isNotEmpty(userModel.getSearchValue()))
|
||||||
|
{
|
||||||
userList.clear();
|
userList.clear();
|
||||||
for (Map.Entry<Integer, UserOperateModel> entry : users.entrySet()) {
|
for (Map.Entry<Integer, UserOperateModel> entry : users.entrySet())
|
||||||
if (entry.getValue().getUserName().equals(userModel.getSearchValue())) {
|
{
|
||||||
|
if (entry.getValue().getUserName().equals(userModel.getSearchValue()))
|
||||||
|
{
|
||||||
userList.add(entry.getValue());
|
userList.add(entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (StringUtils.isNotEmpty(userModel.getUserName())) {
|
}
|
||||||
|
else if (StringUtils.isNotEmpty(userModel.getUserName()))
|
||||||
|
{
|
||||||
userList.clear();
|
userList.clear();
|
||||||
for (Map.Entry<Integer, UserOperateModel> entry : users.entrySet()) {
|
for (Map.Entry<Integer, UserOperateModel> entry : users.entrySet())
|
||||||
if (entry.getValue().getUserName().equals(userModel.getUserName())) {
|
{
|
||||||
|
if (entry.getValue().getUserName().equals(userModel.getUserName()))
|
||||||
|
{
|
||||||
userList.add(entry.getValue());
|
userList.add(entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||||
if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize()) {
|
if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize())
|
||||||
|
{
|
||||||
rspData.setRows(userList);
|
rspData.setRows(userList);
|
||||||
rspData.setTotal(userList.size());
|
rspData.setTotal(userList.size());
|
||||||
return rspData;
|
return rspData;
|
||||||
}
|
}
|
||||||
Integer pageNum = (pageDomain.getPageNum() - 1) * 10;
|
Integer pageNum = (pageDomain.getPageNum() - 1) * 10;
|
||||||
Integer pageSize = pageDomain.getPageNum() * 10;
|
Integer pageSize = pageDomain.getPageNum() * 10;
|
||||||
if (pageSize > userList.size()) {
|
if (pageSize > userList.size())
|
||||||
|
{
|
||||||
pageSize = userList.size();
|
pageSize = userList.size();
|
||||||
}
|
}
|
||||||
rspData.setRows(userList.subList(pageNum, pageSize));
|
rspData.setRows(userList.subList(pageNum, pageSize));
|
||||||
|
|
@ -125,7 +137,8 @@ public class DemoOperateController extends BaseController {
|
||||||
* 新增用户
|
* 新增用户
|
||||||
*/
|
*/
|
||||||
@GetMapping("/add")
|
@GetMapping("/add")
|
||||||
public String add(ModelMap mmap) {
|
public String add(ModelMap mmap)
|
||||||
|
{
|
||||||
return prefix + "/add";
|
return prefix + "/add";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -134,17 +147,30 @@ public class DemoOperateController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/add")
|
@PostMapping("/add")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult addSave(UserOperateModel user) {
|
public AjaxResult addSave(UserOperateModel user)
|
||||||
|
{
|
||||||
Integer userId = users.size() + 1;
|
Integer userId = users.size() + 1;
|
||||||
user.setUserId(userId);
|
user.setUserId(userId);
|
||||||
return AjaxResult.success(users.put(userId, user));
|
return AjaxResult.success(users.put(userId, user));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增保存主子表信息
|
||||||
|
*/
|
||||||
|
@PostMapping("/customer/add")
|
||||||
|
@ResponseBody
|
||||||
|
public AjaxResult addSave(CustomerModel customerModel)
|
||||||
|
{
|
||||||
|
System.out.println(customerModel.toString());
|
||||||
|
return AjaxResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改用户
|
* 修改用户
|
||||||
*/
|
*/
|
||||||
@GetMapping("/edit/{userId}")
|
@GetMapping("/edit/{userId}")
|
||||||
public String edit(@PathVariable("userId") Integer userId, ModelMap mmap) {
|
public String edit(@PathVariable("userId") Integer userId, ModelMap mmap)
|
||||||
|
{
|
||||||
mmap.put("user", users.get(userId));
|
mmap.put("user", users.get(userId));
|
||||||
return prefix + "/edit";
|
return prefix + "/edit";
|
||||||
}
|
}
|
||||||
|
|
@ -154,7 +180,8 @@ public class DemoOperateController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/edit")
|
@PostMapping("/edit")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult editSave(UserOperateModel user) {
|
public AjaxResult editSave(UserOperateModel user)
|
||||||
|
{
|
||||||
return AjaxResult.success(users.put(user.getUserId(), user));
|
return AjaxResult.success(users.put(user.getUserId(), user));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -163,7 +190,8 @@ public class DemoOperateController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/export")
|
@PostMapping("/export")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult export(UserOperateModel user) {
|
public AjaxResult export(UserOperateModel user)
|
||||||
|
{
|
||||||
List<UserOperateModel> list = new ArrayList<UserOperateModel>(users.values());
|
List<UserOperateModel> list = new ArrayList<UserOperateModel>(users.values());
|
||||||
ExcelUtil<UserOperateModel> util = new ExcelUtil<UserOperateModel>(UserOperateModel.class);
|
ExcelUtil<UserOperateModel> util = new ExcelUtil<UserOperateModel>(UserOperateModel.class);
|
||||||
return util.exportExcel(list, "用户数据");
|
return util.exportExcel(list, "用户数据");
|
||||||
|
|
@ -174,7 +202,8 @@ public class DemoOperateController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@GetMapping("/importTemplate")
|
@GetMapping("/importTemplate")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult importTemplate() {
|
public AjaxResult importTemplate()
|
||||||
|
{
|
||||||
ExcelUtil<UserOperateModel> util = new ExcelUtil<UserOperateModel>(UserOperateModel.class);
|
ExcelUtil<UserOperateModel> util = new ExcelUtil<UserOperateModel>(UserOperateModel.class);
|
||||||
return util.importTemplateExcel("用户数据");
|
return util.importTemplateExcel("用户数据");
|
||||||
}
|
}
|
||||||
|
|
@ -184,7 +213,8 @@ public class DemoOperateController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/importData")
|
@PostMapping("/importData")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
|
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
|
||||||
|
{
|
||||||
ExcelUtil<UserOperateModel> util = new ExcelUtil<UserOperateModel>(UserOperateModel.class);
|
ExcelUtil<UserOperateModel> util = new ExcelUtil<UserOperateModel>(UserOperateModel.class);
|
||||||
List<UserOperateModel> userList = util.importExcel(file.getInputStream());
|
List<UserOperateModel> userList = util.importExcel(file.getInputStream());
|
||||||
String message = importUser(userList, updateSupport);
|
String message = importUser(userList, updateSupport);
|
||||||
|
|
@ -196,9 +226,11 @@ public class DemoOperateController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/remove")
|
@PostMapping("/remove")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult remove(String ids) {
|
public AjaxResult remove(String ids)
|
||||||
|
{
|
||||||
Integer[] userIds = Convert.toIntArray(ids);
|
Integer[] userIds = Convert.toIntArray(ids);
|
||||||
for (Integer userId : userIds) {
|
for (Integer userId : userIds)
|
||||||
|
{
|
||||||
users.remove(userId);
|
users.remove(userId);
|
||||||
}
|
}
|
||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
|
|
@ -208,14 +240,16 @@ public class DemoOperateController extends BaseController {
|
||||||
* 查看详细
|
* 查看详细
|
||||||
*/
|
*/
|
||||||
@GetMapping("/detail/{userId}")
|
@GetMapping("/detail/{userId}")
|
||||||
public String detail(@PathVariable("userId") Integer userId, ModelMap mmap) {
|
public String detail(@PathVariable("userId") Integer userId, ModelMap mmap)
|
||||||
|
{
|
||||||
mmap.put("user", users.get(userId));
|
mmap.put("user", users.get(userId));
|
||||||
return prefix + "/detail";
|
return prefix + "/detail";
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/clean")
|
@PostMapping("/clean")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult clean() {
|
public AjaxResult clean()
|
||||||
|
{
|
||||||
users.clear();
|
users.clear();
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
|
@ -227,48 +261,64 @@ public class DemoOperateController extends BaseController {
|
||||||
* @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
|
* @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
public String importUser(List<UserOperateModel> userList, Boolean isUpdateSupport) {
|
public String importUser(List<UserOperateModel> userList, Boolean isUpdateSupport)
|
||||||
if (StringUtils.isNull(userList) || userList.size() == 0) {
|
{
|
||||||
|
if (StringUtils.isNull(userList) || userList.size() == 0)
|
||||||
|
{
|
||||||
throw new BusinessException("导入用户数据不能为空!");
|
throw new BusinessException("导入用户数据不能为空!");
|
||||||
}
|
}
|
||||||
int successNum = 0;
|
int successNum = 0;
|
||||||
int failureNum = 0;
|
int failureNum = 0;
|
||||||
StringBuilder successMsg = new StringBuilder();
|
StringBuilder successMsg = new StringBuilder();
|
||||||
StringBuilder failureMsg = new StringBuilder();
|
StringBuilder failureMsg = new StringBuilder();
|
||||||
for (UserOperateModel user : userList) {
|
for (UserOperateModel user : userList)
|
||||||
try {
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
// 验证是否存在这个用户
|
// 验证是否存在这个用户
|
||||||
boolean userFlag = false;
|
boolean userFlag = false;
|
||||||
for (Map.Entry<Integer, UserOperateModel> entry : users.entrySet()) {
|
for (Map.Entry<Integer, UserOperateModel> entry : users.entrySet())
|
||||||
if (entry.getValue().getUserName().equals(user.getUserName())) {
|
{
|
||||||
|
if (entry.getValue().getUserName().equals(user.getUserName()))
|
||||||
|
{
|
||||||
userFlag = true;
|
userFlag = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!userFlag) {
|
if (!userFlag)
|
||||||
|
{
|
||||||
Integer userId = users.size() + 1;
|
Integer userId = users.size() + 1;
|
||||||
user.setUserId(userId);
|
user.setUserId(userId);
|
||||||
users.put(userId, user);
|
users.put(userId, user);
|
||||||
successNum++;
|
successNum++;
|
||||||
successMsg.append("<br/>" + successNum + "、用户 " + user.getUserName() + " 导入成功");
|
successMsg.append("<br/>" + successNum + "、用户 " + user.getUserName() + " 导入成功");
|
||||||
} else if (isUpdateSupport) {
|
}
|
||||||
|
else if (isUpdateSupport)
|
||||||
|
{
|
||||||
users.put(user.getUserId(), user);
|
users.put(user.getUserId(), user);
|
||||||
successNum++;
|
successNum++;
|
||||||
successMsg.append("<br/>" + successNum + "、用户 " + user.getUserName() + " 更新成功");
|
successMsg.append("<br/>" + successNum + "、用户 " + user.getUserName() + " 更新成功");
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
failureNum++;
|
failureNum++;
|
||||||
failureMsg.append("<br/>" + failureNum + "、用户 " + user.getUserName() + " 已存在");
|
failureMsg.append("<br/>" + failureNum + "、用户 " + user.getUserName() + " 已存在");
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
failureNum++;
|
failureNum++;
|
||||||
String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
|
String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
|
||||||
failureMsg.append(msg + e.getMessage());
|
failureMsg.append(msg + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (failureNum > 0) {
|
if (failureNum > 0)
|
||||||
|
{
|
||||||
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
|
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
|
||||||
throw new BusinessException(failureMsg.toString());
|
throw new BusinessException(failureMsg.toString());
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
|
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
|
||||||
}
|
}
|
||||||
return successMsg.toString();
|
return successMsg.toString();
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@ import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.ModelMap;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
@ -26,11 +26,11 @@ import com.ruoyi.common.utils.StringUtils;
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/demo/table")
|
@RequestMapping("/demo/table")
|
||||||
public class DemoTableController extends BaseController {
|
public class DemoTableController extends BaseController
|
||||||
|
{
|
||||||
private String prefix = "demo/table";
|
private String prefix = "demo/table";
|
||||||
|
|
||||||
private final static List<UserTableModel> users = new ArrayList<UserTableModel>();
|
private final static List<UserTableModel> users = new ArrayList<UserTableModel>();
|
||||||
|
|
||||||
{
|
{
|
||||||
users.add(new UserTableModel(1, "1000001", "测试1", "0", "15888888888", "ry@qq.com", 150.0, "0"));
|
users.add(new UserTableModel(1, "1000001", "测试1", "0", "15888888888", "ry@qq.com", 150.0, "0"));
|
||||||
users.add(new UserTableModel(2, "1000002", "测试2", "1", "15666666666", "ry@qq.com", 180.0, "1"));
|
users.add(new UserTableModel(2, "1000002", "测试2", "1", "15666666666", "ry@qq.com", 180.0, "1"));
|
||||||
|
|
@ -64,7 +64,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 搜索相关
|
* 搜索相关
|
||||||
*/
|
*/
|
||||||
@GetMapping("/search")
|
@GetMapping("/search")
|
||||||
public String search() {
|
public String search()
|
||||||
|
{
|
||||||
return prefix + "/search";
|
return prefix + "/search";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -72,7 +73,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 数据汇总
|
* 数据汇总
|
||||||
*/
|
*/
|
||||||
@GetMapping("/footer")
|
@GetMapping("/footer")
|
||||||
public String footer() {
|
public String footer()
|
||||||
|
{
|
||||||
return prefix + "/footer";
|
return prefix + "/footer";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -80,7 +82,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 组合表头
|
* 组合表头
|
||||||
*/
|
*/
|
||||||
@GetMapping("/groupHeader")
|
@GetMapping("/groupHeader")
|
||||||
public String groupHeader() {
|
public String groupHeader()
|
||||||
|
{
|
||||||
return prefix + "/groupHeader";
|
return prefix + "/groupHeader";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -88,7 +91,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 表格导出
|
* 表格导出
|
||||||
*/
|
*/
|
||||||
@GetMapping("/export")
|
@GetMapping("/export")
|
||||||
public String export() {
|
public String export()
|
||||||
|
{
|
||||||
return prefix + "/export";
|
return prefix + "/export";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -96,7 +100,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 翻页记住选择
|
* 翻页记住选择
|
||||||
*/
|
*/
|
||||||
@GetMapping("/remember")
|
@GetMapping("/remember")
|
||||||
public String remember() {
|
public String remember()
|
||||||
|
{
|
||||||
return prefix + "/remember";
|
return prefix + "/remember";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -104,7 +109,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 跳转至指定页
|
* 跳转至指定页
|
||||||
*/
|
*/
|
||||||
@GetMapping("/pageGo")
|
@GetMapping("/pageGo")
|
||||||
public String pageGo() {
|
public String pageGo()
|
||||||
|
{
|
||||||
return prefix + "/pageGo";
|
return prefix + "/pageGo";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -112,7 +118,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 自定义查询参数
|
* 自定义查询参数
|
||||||
*/
|
*/
|
||||||
@GetMapping("/params")
|
@GetMapping("/params")
|
||||||
public String params() {
|
public String params()
|
||||||
|
{
|
||||||
return prefix + "/params";
|
return prefix + "/params";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -120,7 +127,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 多表格
|
* 多表格
|
||||||
*/
|
*/
|
||||||
@GetMapping("/multi")
|
@GetMapping("/multi")
|
||||||
public String multi() {
|
public String multi()
|
||||||
|
{
|
||||||
return prefix + "/multi";
|
return prefix + "/multi";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -128,15 +136,27 @@ public class DemoTableController extends BaseController {
|
||||||
* 点击按钮加载表格
|
* 点击按钮加载表格
|
||||||
*/
|
*/
|
||||||
@GetMapping("/button")
|
@GetMapping("/button")
|
||||||
public String button() {
|
public String button()
|
||||||
|
{
|
||||||
return prefix + "/button";
|
return prefix + "/button";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 直接加载表格数据
|
||||||
|
*/
|
||||||
|
@GetMapping("/data")
|
||||||
|
public String data(ModelMap mmap)
|
||||||
|
{
|
||||||
|
mmap.put("users", users);
|
||||||
|
return prefix + "/data";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 表格冻结列
|
* 表格冻结列
|
||||||
*/
|
*/
|
||||||
@GetMapping("/fixedColumns")
|
@GetMapping("/fixedColumns")
|
||||||
public String fixedColumns() {
|
public String fixedColumns()
|
||||||
|
{
|
||||||
return prefix + "/fixedColumns";
|
return prefix + "/fixedColumns";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -144,7 +164,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 自定义触发事件
|
* 自定义触发事件
|
||||||
*/
|
*/
|
||||||
@GetMapping("/event")
|
@GetMapping("/event")
|
||||||
public String event() {
|
public String event()
|
||||||
|
{
|
||||||
return prefix + "/event";
|
return prefix + "/event";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -152,7 +173,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 表格细节视图
|
* 表格细节视图
|
||||||
*/
|
*/
|
||||||
@GetMapping("/detail")
|
@GetMapping("/detail")
|
||||||
public String detail() {
|
public String detail()
|
||||||
|
{
|
||||||
return prefix + "/detail";
|
return prefix + "/detail";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -160,7 +182,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 表格父子视图
|
* 表格父子视图
|
||||||
*/
|
*/
|
||||||
@GetMapping("/child")
|
@GetMapping("/child")
|
||||||
public String child() {
|
public String child()
|
||||||
|
{
|
||||||
return prefix + "/child";
|
return prefix + "/child";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -168,7 +191,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 表格图片预览
|
* 表格图片预览
|
||||||
*/
|
*/
|
||||||
@GetMapping("/image")
|
@GetMapping("/image")
|
||||||
public String image() {
|
public String image()
|
||||||
|
{
|
||||||
return prefix + "/image";
|
return prefix + "/image";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -176,7 +200,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 动态增删改查
|
* 动态增删改查
|
||||||
*/
|
*/
|
||||||
@GetMapping("/curd")
|
@GetMapping("/curd")
|
||||||
public String curd() {
|
public String curd()
|
||||||
|
{
|
||||||
return prefix + "/curd";
|
return prefix + "/curd";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -184,7 +209,8 @@ public class DemoTableController extends BaseController {
|
||||||
* 表格拖拽操作
|
* 表格拖拽操作
|
||||||
*/
|
*/
|
||||||
@GetMapping("/reorder")
|
@GetMapping("/reorder")
|
||||||
public String reorder() {
|
public String reorder()
|
||||||
|
{
|
||||||
return prefix + "/reorder";
|
return prefix + "/reorder";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -192,15 +218,53 @@ public class DemoTableController extends BaseController {
|
||||||
* 表格行内编辑操作
|
* 表格行内编辑操作
|
||||||
*/
|
*/
|
||||||
@GetMapping("/editable")
|
@GetMapping("/editable")
|
||||||
public String editable() {
|
public String editable()
|
||||||
|
{
|
||||||
return prefix + "/editable";
|
return prefix + "/editable";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主子表提交
|
||||||
|
*/
|
||||||
|
@GetMapping("/subdata")
|
||||||
|
public String subdata()
|
||||||
|
{
|
||||||
|
return prefix + "/subdata";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表格自动刷新
|
||||||
|
*/
|
||||||
|
@GetMapping("/refresh")
|
||||||
|
public String refresh()
|
||||||
|
{
|
||||||
|
return prefix + "/refresh";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表格打印配置
|
||||||
|
*/
|
||||||
|
@GetMapping("/print")
|
||||||
|
public String print()
|
||||||
|
{
|
||||||
|
return prefix + "/print";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表格标题格式化
|
||||||
|
*/
|
||||||
|
@GetMapping("/headerStyle")
|
||||||
|
public String headerStyle()
|
||||||
|
{
|
||||||
|
return prefix + "/headerStyle";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 表格其他操作
|
* 表格其他操作
|
||||||
*/
|
*/
|
||||||
@GetMapping("/other")
|
@GetMapping("/other")
|
||||||
public String other() {
|
public String other()
|
||||||
|
{
|
||||||
return prefix + "/other";
|
return prefix + "/other";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -209,28 +273,34 @@ public class DemoTableController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public TableDataInfo list(UserTableModel userModel) {
|
public TableDataInfo list(UserTableModel userModel)
|
||||||
|
{
|
||||||
TableDataInfo rspData = new TableDataInfo();
|
TableDataInfo rspData = new TableDataInfo();
|
||||||
List<UserTableModel> userList = new ArrayList<UserTableModel>(Arrays.asList(new UserTableModel[users.size()]));
|
List<UserTableModel> userList = new ArrayList<UserTableModel>(Arrays.asList(new UserTableModel[users.size()]));
|
||||||
Collections.copy(userList, users);
|
Collections.copy(userList, users);
|
||||||
// 查询条件过滤
|
// 查询条件过滤
|
||||||
if (StringUtils.isNotEmpty(userModel.getUserName())) {
|
if (StringUtils.isNotEmpty(userModel.getUserName()))
|
||||||
|
{
|
||||||
userList.clear();
|
userList.clear();
|
||||||
for (UserTableModel user : users) {
|
for (UserTableModel user : users)
|
||||||
if (user.getUserName().equals(userModel.getUserName())) {
|
{
|
||||||
|
if (user.getUserName().equals(userModel.getUserName()))
|
||||||
|
{
|
||||||
userList.add(user);
|
userList.add(user);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||||
if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize()) {
|
if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize())
|
||||||
|
{
|
||||||
rspData.setRows(userList);
|
rspData.setRows(userList);
|
||||||
rspData.setTotal(userList.size());
|
rspData.setTotal(userList.size());
|
||||||
return rspData;
|
return rspData;
|
||||||
}
|
}
|
||||||
Integer pageNum = (pageDomain.getPageNum() - 1) * 10;
|
Integer pageNum = (pageDomain.getPageNum() - 1) * 10;
|
||||||
Integer pageSize = pageDomain.getPageNum() * 10;
|
Integer pageSize = pageDomain.getPageNum() * 10;
|
||||||
if (pageSize > userList.size()) {
|
if (pageSize > userList.size())
|
||||||
|
{
|
||||||
pageSize = userList.size();
|
pageSize = userList.size();
|
||||||
}
|
}
|
||||||
rspData.setRows(userList.subList(pageNum, pageSize));
|
rspData.setRows(userList.subList(pageNum, pageSize));
|
||||||
|
|
@ -239,59 +309,44 @@ public class DemoTableController extends BaseController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class UserTableModel {
|
class UserTableModel
|
||||||
/**
|
{
|
||||||
* 用户ID
|
/** 用户ID */
|
||||||
*/
|
|
||||||
private int userId;
|
private int userId;
|
||||||
|
|
||||||
/**
|
/** 用户编号 */
|
||||||
* 用户编号
|
|
||||||
*/
|
|
||||||
private String userCode;
|
private String userCode;
|
||||||
|
|
||||||
/**
|
/** 用户姓名 */
|
||||||
* 用户姓名
|
|
||||||
*/
|
|
||||||
private String userName;
|
private String userName;
|
||||||
|
|
||||||
/**
|
/** 用户性别 */
|
||||||
* 用户性别
|
|
||||||
*/
|
|
||||||
private String userSex;
|
private String userSex;
|
||||||
|
|
||||||
/**
|
/** 用户手机 */
|
||||||
* 用户手机
|
|
||||||
*/
|
|
||||||
private String userPhone;
|
private String userPhone;
|
||||||
|
|
||||||
/**
|
/** 用户邮箱 */
|
||||||
* 用户邮箱
|
|
||||||
*/
|
|
||||||
private String userEmail;
|
private String userEmail;
|
||||||
|
|
||||||
/**
|
/** 用户余额 */
|
||||||
* 用户余额
|
|
||||||
*/
|
|
||||||
private double userBalance;
|
private double userBalance;
|
||||||
|
|
||||||
/**
|
/** 用户状态(0正常 1停用) */
|
||||||
* 用户状态(0正常 1停用)
|
|
||||||
*/
|
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
/**
|
/** 创建时间 */
|
||||||
* 创建时间
|
|
||||||
*/
|
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
|
|
||||||
public UserTableModel() {
|
public UserTableModel()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserTableModel(int userId, String userCode, String userName, String userSex, String userPhone,
|
public UserTableModel(int userId, String userCode, String userName, String userSex, String userPhone,
|
||||||
String userEmail, double userBalance, String status) {
|
String userEmail, double userBalance, String status)
|
||||||
|
{
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
this.userCode = userCode;
|
this.userCode = userCode;
|
||||||
this.userName = userName;
|
this.userName = userName;
|
||||||
|
|
@ -303,75 +358,93 @@ class UserTableModel {
|
||||||
this.createTime = DateUtils.getNowDate();
|
this.createTime = DateUtils.getNowDate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getUserId() {
|
public int getUserId()
|
||||||
|
{
|
||||||
return userId;
|
return userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserId(int userId) {
|
public void setUserId(int userId)
|
||||||
|
{
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserCode() {
|
public String getUserCode()
|
||||||
|
{
|
||||||
return userCode;
|
return userCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserCode(String userCode) {
|
public void setUserCode(String userCode)
|
||||||
|
{
|
||||||
this.userCode = userCode;
|
this.userCode = userCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserName() {
|
public String getUserName()
|
||||||
|
{
|
||||||
return userName;
|
return userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserName(String userName) {
|
public void setUserName(String userName)
|
||||||
|
{
|
||||||
this.userName = userName;
|
this.userName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserSex() {
|
public String getUserSex()
|
||||||
|
{
|
||||||
return userSex;
|
return userSex;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserSex(String userSex) {
|
public void setUserSex(String userSex)
|
||||||
|
{
|
||||||
this.userSex = userSex;
|
this.userSex = userSex;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserPhone() {
|
public String getUserPhone()
|
||||||
|
{
|
||||||
return userPhone;
|
return userPhone;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserPhone(String userPhone) {
|
public void setUserPhone(String userPhone)
|
||||||
|
{
|
||||||
this.userPhone = userPhone;
|
this.userPhone = userPhone;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserEmail() {
|
public String getUserEmail()
|
||||||
|
{
|
||||||
return userEmail;
|
return userEmail;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserEmail(String userEmail) {
|
public void setUserEmail(String userEmail)
|
||||||
|
{
|
||||||
this.userEmail = userEmail;
|
this.userEmail = userEmail;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getUserBalance() {
|
public double getUserBalance()
|
||||||
|
{
|
||||||
return userBalance;
|
return userBalance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserBalance(double userBalance) {
|
public void setUserBalance(double userBalance)
|
||||||
|
{
|
||||||
this.userBalance = userBalance;
|
this.userBalance = userBalance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getStatus() {
|
public String getStatus()
|
||||||
|
{
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStatus(String status) {
|
public void setStatus(String status)
|
||||||
|
{
|
||||||
this.status = status;
|
this.status = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getCreateTime() {
|
public Date getCreateTime()
|
||||||
|
{
|
||||||
return createTime;
|
return createTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCreateTime(Date createTime) {
|
public void setCreateTime(Date createTime)
|
||||||
|
{
|
||||||
this.createTime = createTime;
|
this.createTime = createTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,116 @@
|
||||||
|
package com.ruoyi.web.controller.demo.domain;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户测试信息
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
public class CustomerModel
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 客户姓名
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户手机
|
||||||
|
*/
|
||||||
|
private String phonenumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户性别
|
||||||
|
*/
|
||||||
|
private String sex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户生日
|
||||||
|
*/
|
||||||
|
private String birthday;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户描述
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品信息
|
||||||
|
*/
|
||||||
|
private List<GoodsModel> goods;
|
||||||
|
|
||||||
|
public String getName()
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPhonenumber()
|
||||||
|
{
|
||||||
|
return phonenumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhonenumber(String phonenumber)
|
||||||
|
{
|
||||||
|
this.phonenumber = phonenumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getSex()
|
||||||
|
{
|
||||||
|
return sex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSex(String sex)
|
||||||
|
{
|
||||||
|
this.sex = sex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBirthday()
|
||||||
|
{
|
||||||
|
return birthday;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBirthday(String birthday)
|
||||||
|
{
|
||||||
|
this.birthday = birthday;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRemark()
|
||||||
|
{
|
||||||
|
return remark;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemark(String remark)
|
||||||
|
{
|
||||||
|
this.remark = remark;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<GoodsModel> getGoods()
|
||||||
|
{
|
||||||
|
return goods;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGoods(List<GoodsModel> goods)
|
||||||
|
{
|
||||||
|
this.goods = goods;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||||
|
.append("name", getName())
|
||||||
|
.append("phonenumber", getPhonenumber())
|
||||||
|
.append("sex", getSex())
|
||||||
|
.append("birthday", getBirthday())
|
||||||
|
.append("goods", getGoods())
|
||||||
|
.append("remark", getRemark())
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
package com.ruoyi.web.controller.demo.domain;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品测试信息
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
public class GoodsModel
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 商品名称
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品重量
|
||||||
|
*/
|
||||||
|
private Integer weight;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品价格
|
||||||
|
*/
|
||||||
|
private Double price;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品日期
|
||||||
|
*/
|
||||||
|
private Date date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品种类
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
public String getName()
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getWeight()
|
||||||
|
{
|
||||||
|
return weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWeight(Integer weight)
|
||||||
|
{
|
||||||
|
this.weight = weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getPrice()
|
||||||
|
{
|
||||||
|
return price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrice(Double price)
|
||||||
|
{
|
||||||
|
this.price = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getDate()
|
||||||
|
{
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDate(Date date)
|
||||||
|
{
|
||||||
|
this.date = date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType()
|
||||||
|
{
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type)
|
||||||
|
{
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||||
|
.append("name", getName())
|
||||||
|
.append("weight", getWeight())
|
||||||
|
.append("price", getPrice())
|
||||||
|
.append("date", getDate())
|
||||||
|
.append("type", getType())
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
package com.ruoyi.web.controller.demo.domain;
|
package com.ruoyi.web.controller.demo.domain;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import com.ruoyi.common.annotation.Excel;
|
import com.ruoyi.common.annotation.Excel;
|
||||||
import com.ruoyi.common.annotation.Excel.Type;
|
import com.ruoyi.common.annotation.Excel.Type;
|
||||||
import com.ruoyi.common.core.domain.BaseEntity;
|
import com.ruoyi.common.core.domain.BaseEntity;
|
||||||
import com.ruoyi.common.utils.DateUtils;
|
import com.ruoyi.common.utils.DateUtils;
|
||||||
|
|
||||||
public class UserOperateModel extends BaseEntity {
|
public class UserOperateModel extends BaseEntity
|
||||||
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private int userId;
|
private int userId;
|
||||||
|
|
@ -36,12 +36,14 @@ public class UserOperateModel extends BaseEntity {
|
||||||
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
|
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
|
|
||||||
public UserOperateModel() {
|
public UserOperateModel()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserOperateModel(int userId, String userCode, String userName, String userSex, String userPhone,
|
public UserOperateModel(int userId, String userCode, String userName, String userSex, String userPhone,
|
||||||
String userEmail, double userBalance, String status) {
|
String userEmail, double userBalance, String status)
|
||||||
|
{
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
this.userCode = userCode;
|
this.userCode = userCode;
|
||||||
this.userName = userName;
|
this.userName = userName;
|
||||||
|
|
@ -53,75 +55,95 @@ public class UserOperateModel extends BaseEntity {
|
||||||
this.createTime = DateUtils.getNowDate();
|
this.createTime = DateUtils.getNowDate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getUserId() {
|
public int getUserId()
|
||||||
|
{
|
||||||
return userId;
|
return userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserId(int userId) {
|
public void setUserId(int userId)
|
||||||
|
{
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserCode() {
|
public String getUserCode()
|
||||||
|
{
|
||||||
return userCode;
|
return userCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserCode(String userCode) {
|
public void setUserCode(String userCode)
|
||||||
|
{
|
||||||
this.userCode = userCode;
|
this.userCode = userCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserName() {
|
public String getUserName()
|
||||||
|
{
|
||||||
return userName;
|
return userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserName(String userName) {
|
public void setUserName(String userName)
|
||||||
|
{
|
||||||
this.userName = userName;
|
this.userName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserSex() {
|
public String getUserSex()
|
||||||
|
{
|
||||||
return userSex;
|
return userSex;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserSex(String userSex) {
|
public void setUserSex(String userSex)
|
||||||
|
{
|
||||||
this.userSex = userSex;
|
this.userSex = userSex;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserPhone() {
|
public String getUserPhone()
|
||||||
|
{
|
||||||
return userPhone;
|
return userPhone;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserPhone(String userPhone) {
|
public void setUserPhone(String userPhone)
|
||||||
|
{
|
||||||
this.userPhone = userPhone;
|
this.userPhone = userPhone;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserEmail() {
|
public String getUserEmail()
|
||||||
|
{
|
||||||
return userEmail;
|
return userEmail;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserEmail(String userEmail) {
|
public void setUserEmail(String userEmail)
|
||||||
|
{
|
||||||
this.userEmail = userEmail;
|
this.userEmail = userEmail;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getUserBalance() {
|
public double getUserBalance()
|
||||||
|
{
|
||||||
return userBalance;
|
return userBalance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserBalance(double userBalance) {
|
public void setUserBalance(double userBalance)
|
||||||
|
{
|
||||||
this.userBalance = userBalance;
|
this.userBalance = userBalance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getStatus() {
|
public String getStatus()
|
||||||
|
{
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStatus(String status) {
|
public void setStatus(String status)
|
||||||
|
{
|
||||||
this.status = status;
|
this.status = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getCreateTime() {
|
@Override
|
||||||
|
public Date getCreateTime()
|
||||||
|
{
|
||||||
return createTime;
|
return createTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCreateTime(Date createTime) {
|
@Override
|
||||||
|
public void setCreateTime(Date createTime)
|
||||||
|
{
|
||||||
this.createTime = createTime;
|
this.createTime = createTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,9 +1,19 @@
|
||||||
package com.ruoyi.web.controller.monitor;
|
package com.ruoyi.web.controller.monitor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.shiro.authz.annotation.Logical;
|
||||||
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
import com.ruoyi.common.annotation.Log;
|
import com.ruoyi.common.annotation.Log;
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
|
import com.ruoyi.common.core.text.Convert;
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
import com.ruoyi.common.enums.OnlineStatus;
|
import com.ruoyi.common.enums.OnlineStatus;
|
||||||
import com.ruoyi.framework.shiro.session.OnlineSession;
|
import com.ruoyi.framework.shiro.session.OnlineSession;
|
||||||
|
|
@ -11,10 +21,6 @@ import com.ruoyi.framework.shiro.session.OnlineSessionDAO;
|
||||||
import com.ruoyi.framework.util.ShiroUtils;
|
import com.ruoyi.framework.util.ShiroUtils;
|
||||||
import com.ruoyi.system.domain.SysUserOnline;
|
import com.ruoyi.system.domain.SysUserOnline;
|
||||||
import com.ruoyi.system.service.ISysUserOnlineService;
|
import com.ruoyi.system.service.ISysUserOnlineService;
|
||||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在线用户监控
|
* 在线用户监控
|
||||||
|
|
@ -23,7 +29,8 @@ import org.springframework.web.bind.annotation.*;
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/monitor/online")
|
@RequestMapping("/monitor/online")
|
||||||
public class SysUserOnlineController extends BaseController {
|
public class SysUserOnlineController extends BaseController
|
||||||
|
{
|
||||||
private String prefix = "monitor/online";
|
private String prefix = "monitor/online";
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -34,62 +41,48 @@ public class SysUserOnlineController extends BaseController {
|
||||||
|
|
||||||
@RequiresPermissions("monitor:online:view")
|
@RequiresPermissions("monitor:online:view")
|
||||||
@GetMapping()
|
@GetMapping()
|
||||||
public String online() {
|
public String online()
|
||||||
|
{
|
||||||
return prefix + "/online";
|
return prefix + "/online";
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresPermissions("monitor:online:list")
|
@RequiresPermissions("monitor:online:list")
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public TableDataInfo list(SysUserOnline userOnline) {
|
public TableDataInfo list(SysUserOnline userOnline)
|
||||||
return getDataTable(userOnlineService.selectUserOnlineList(userOnline, getPageRequest()));
|
{
|
||||||
|
startPage();
|
||||||
|
List<SysUserOnline> list = userOnlineService.selectUserOnlineList(userOnline);
|
||||||
|
return getDataTable(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresPermissions("monitor:online:batchForceLogout")
|
@RequiresPermissions(value = { "monitor:online:batchForceLogout", "monitor:online:forceLogout" }, logical = Logical.OR)
|
||||||
@Log(title = "在线用户", businessType = BusinessType.FORCE)
|
@Log(title = "在线用户", businessType = BusinessType.FORCE)
|
||||||
@PostMapping("/batchForceLogout")
|
@PostMapping("/batchForceLogout")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult batchForceLogout(@RequestParam("ids[]") String[] ids) {
|
public AjaxResult batchForceLogout(String ids)
|
||||||
for (String sessionId : ids) {
|
{
|
||||||
|
for (String sessionId : Convert.toStrArray(ids))
|
||||||
|
{
|
||||||
SysUserOnline online = userOnlineService.selectOnlineById(sessionId);
|
SysUserOnline online = userOnlineService.selectOnlineById(sessionId);
|
||||||
if (online == null) {
|
if (online == null)
|
||||||
|
{
|
||||||
return error("用户已下线");
|
return error("用户已下线");
|
||||||
}
|
}
|
||||||
OnlineSession onlineSession = (OnlineSession) onlineSessionDAO.readSession(online.getSessionId());
|
OnlineSession onlineSession = (OnlineSession) onlineSessionDAO.readSession(online.getSessionId());
|
||||||
if (onlineSession == null) {
|
if (onlineSession == null)
|
||||||
|
{
|
||||||
return error("用户已下线");
|
return error("用户已下线");
|
||||||
}
|
}
|
||||||
if (sessionId.equals(ShiroUtils.getSessionId())) {
|
if (sessionId.equals(ShiroUtils.getSessionId()))
|
||||||
|
{
|
||||||
return error("当前登陆用户无法强退");
|
return error("当前登陆用户无法强退");
|
||||||
}
|
}
|
||||||
onlineSession.setStatus(OnlineStatus.off_line);
|
onlineSessionDAO.delete(onlineSession);
|
||||||
onlineSessionDAO.update(onlineSession);
|
|
||||||
online.setStatus(OnlineStatus.off_line);
|
online.setStatus(OnlineStatus.off_line);
|
||||||
userOnlineService.saveOnline(online);
|
userOnlineService.saveOnline(online);
|
||||||
|
userOnlineService.removeUserCache(online.getLoginName(), sessionId);
|
||||||
}
|
}
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresPermissions("monitor:online:forceLogout")
|
|
||||||
@Log(title = "在线用户", businessType = BusinessType.FORCE)
|
|
||||||
@PostMapping("/forceLogout")
|
|
||||||
@ResponseBody
|
|
||||||
public AjaxResult forceLogout(String sessionId) {
|
|
||||||
SysUserOnline online = userOnlineService.selectOnlineById(sessionId);
|
|
||||||
if (sessionId.equals(ShiroUtils.getSessionId())) {
|
|
||||||
return error("当前登陆用户无法强退");
|
|
||||||
}
|
|
||||||
if (online == null) {
|
|
||||||
return error("用户已下线");
|
|
||||||
}
|
|
||||||
OnlineSession onlineSession = (OnlineSession) onlineSessionDAO.readSession(online.getSessionId());
|
|
||||||
if (onlineSession == null) {
|
|
||||||
return error("用户已下线");
|
|
||||||
}
|
|
||||||
onlineSession.setStatus(OnlineStatus.off_line);
|
|
||||||
onlineSessionDAO.update(onlineSession);
|
|
||||||
online.setStatus(OnlineStatus.off_line);
|
|
||||||
userOnlineService.saveOnline(online);
|
|
||||||
return success();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,16 @@
|
||||||
package com.ruoyi.web.controller.system;
|
package com.ruoyi.web.controller.system;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.ModelMap;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
import com.ruoyi.common.annotation.Log;
|
import com.ruoyi.common.annotation.Log;
|
||||||
import com.ruoyi.common.constant.UserConstants;
|
import com.ruoyi.common.constant.UserConstants;
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
|
|
@ -10,15 +21,6 @@ import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||||
import com.ruoyi.framework.util.ShiroUtils;
|
import com.ruoyi.framework.util.ShiroUtils;
|
||||||
import com.ruoyi.system.domain.SysConfig;
|
import com.ruoyi.system.domain.SysConfig;
|
||||||
import com.ruoyi.system.service.ISysConfigService;
|
import com.ruoyi.system.service.ISysConfigService;
|
||||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.data.domain.Pageable;
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.ui.ModelMap;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 参数配置 信息操作处理
|
* 参数配置 信息操作处理
|
||||||
|
|
@ -27,7 +29,8 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/system/config")
|
@RequestMapping("/system/config")
|
||||||
public class SysConfigController extends BaseController {
|
public class SysConfigController extends BaseController
|
||||||
|
{
|
||||||
private String prefix = "system/config";
|
private String prefix = "system/config";
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -35,7 +38,8 @@ public class SysConfigController extends BaseController {
|
||||||
|
|
||||||
@RequiresPermissions("system:config:view")
|
@RequiresPermissions("system:config:view")
|
||||||
@GetMapping()
|
@GetMapping()
|
||||||
public String config() {
|
public String config()
|
||||||
|
{
|
||||||
return prefix + "/config";
|
return prefix + "/config";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,16 +49,20 @@ public class SysConfigController extends BaseController {
|
||||||
@RequiresPermissions("system:config:list")
|
@RequiresPermissions("system:config:list")
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public TableDataInfo list(SysConfig config) {
|
public TableDataInfo list(SysConfig config)
|
||||||
return getDataTable(configService.selectConfigList(config, getPageRequest()));
|
{
|
||||||
|
startPage();
|
||||||
|
List<SysConfig> list = configService.selectConfigList(config);
|
||||||
|
return getDataTable(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Log(title = "参数管理", businessType = BusinessType.EXPORT)
|
@Log(title = "参数管理", businessType = BusinessType.EXPORT)
|
||||||
@RequiresPermissions("system:config:export")
|
@RequiresPermissions("system:config:export")
|
||||||
@PostMapping("/export")
|
@PostMapping("/export")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult export(SysConfig config) {
|
public AjaxResult export(SysConfig config)
|
||||||
List<SysConfig> list = configService.selectConfigList(config, Pageable.unpaged()).getContent();
|
{
|
||||||
|
List<SysConfig> list = configService.selectConfigList(config);
|
||||||
ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
|
ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
|
||||||
return util.exportExcel(list, "参数数据");
|
return util.exportExcel(list, "参数数据");
|
||||||
}
|
}
|
||||||
|
|
@ -63,7 +71,8 @@ public class SysConfigController extends BaseController {
|
||||||
* 新增参数配置
|
* 新增参数配置
|
||||||
*/
|
*/
|
||||||
@GetMapping("/add")
|
@GetMapping("/add")
|
||||||
public String add() {
|
public String add()
|
||||||
|
{
|
||||||
return prefix + "/add";
|
return prefix + "/add";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -74,8 +83,10 @@ public class SysConfigController extends BaseController {
|
||||||
@Log(title = "参数管理", businessType = BusinessType.INSERT)
|
@Log(title = "参数管理", businessType = BusinessType.INSERT)
|
||||||
@PostMapping("/add")
|
@PostMapping("/add")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult addSave(@Validated SysConfig config) {
|
public AjaxResult addSave(@Validated SysConfig config)
|
||||||
if (UserConstants.CONFIG_KEY_NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
|
{
|
||||||
|
if (UserConstants.CONFIG_KEY_NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
|
||||||
|
{
|
||||||
return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
|
return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
|
||||||
}
|
}
|
||||||
config.setCreateBy(ShiroUtils.getLoginName());
|
config.setCreateBy(ShiroUtils.getLoginName());
|
||||||
|
|
@ -86,7 +97,8 @@ public class SysConfigController extends BaseController {
|
||||||
* 修改参数配置
|
* 修改参数配置
|
||||||
*/
|
*/
|
||||||
@GetMapping("/edit/{configId}")
|
@GetMapping("/edit/{configId}")
|
||||||
public String edit(@PathVariable("configId") Long configId, ModelMap mmap) {
|
public String edit(@PathVariable("configId") Long configId, ModelMap mmap)
|
||||||
|
{
|
||||||
mmap.put("config", configService.selectConfigById(configId));
|
mmap.put("config", configService.selectConfigById(configId));
|
||||||
return prefix + "/edit";
|
return prefix + "/edit";
|
||||||
}
|
}
|
||||||
|
|
@ -98,8 +110,10 @@ public class SysConfigController extends BaseController {
|
||||||
@Log(title = "参数管理", businessType = BusinessType.UPDATE)
|
@Log(title = "参数管理", businessType = BusinessType.UPDATE)
|
||||||
@PostMapping("/edit")
|
@PostMapping("/edit")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult editSave(@Validated SysConfig config) {
|
public AjaxResult editSave(@Validated SysConfig config)
|
||||||
if (UserConstants.CONFIG_KEY_NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
|
{
|
||||||
|
if (UserConstants.CONFIG_KEY_NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
|
||||||
|
{
|
||||||
return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
|
return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
|
||||||
}
|
}
|
||||||
config.setUpdateBy(ShiroUtils.getLoginName());
|
config.setUpdateBy(ShiroUtils.getLoginName());
|
||||||
|
|
@ -113,16 +127,31 @@ public class SysConfigController extends BaseController {
|
||||||
@Log(title = "参数管理", businessType = BusinessType.DELETE)
|
@Log(title = "参数管理", businessType = BusinessType.DELETE)
|
||||||
@PostMapping("/remove")
|
@PostMapping("/remove")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult remove(String ids) {
|
public AjaxResult remove(String ids)
|
||||||
|
{
|
||||||
return toAjax(configService.deleteConfigByIds(ids));
|
return toAjax(configService.deleteConfigByIds(ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清空缓存
|
||||||
|
*/
|
||||||
|
@RequiresPermissions("system:config:remove")
|
||||||
|
@Log(title = "参数管理", businessType = BusinessType.CLEAN)
|
||||||
|
@GetMapping("/clearCache")
|
||||||
|
@ResponseBody
|
||||||
|
public AjaxResult clearCache()
|
||||||
|
{
|
||||||
|
configService.clearCache();
|
||||||
|
return success();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验参数键名
|
* 校验参数键名
|
||||||
*/
|
*/
|
||||||
@PostMapping("/checkConfigKeyUnique")
|
@PostMapping("/checkConfigKeyUnique")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public String checkConfigKeyUnique(SysConfig config) {
|
public String checkConfigKeyUnique(SysConfig config)
|
||||||
|
{
|
||||||
return configService.checkConfigKeyUnique(config);
|
return configService.checkConfigKeyUnique(config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,27 @@
|
||||||
package com.ruoyi.web.controller.system;
|
package com.ruoyi.web.controller.system;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.ModelMap;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
import com.ruoyi.common.annotation.Log;
|
import com.ruoyi.common.annotation.Log;
|
||||||
import com.ruoyi.common.constant.UserConstants;
|
import com.ruoyi.common.constant.UserConstants;
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
import com.ruoyi.common.core.domain.Ztree;
|
import com.ruoyi.common.core.domain.Ztree;
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.framework.util.ShiroUtils;
|
import com.ruoyi.framework.util.ShiroUtils;
|
||||||
import com.ruoyi.system.domain.SysDept;
|
import com.ruoyi.system.domain.SysDept;
|
||||||
import com.ruoyi.system.domain.SysRole;
|
import com.ruoyi.system.domain.SysRole;
|
||||||
import com.ruoyi.system.service.ISysDeptService;
|
import com.ruoyi.system.service.ISysDeptService;
|
||||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.data.domain.Pageable;
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.ui.ModelMap;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 部门信息
|
* 部门信息
|
||||||
|
|
@ -27,7 +30,8 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/system/dept")
|
@RequestMapping("/system/dept")
|
||||||
public class SysDeptController extends BaseController {
|
public class SysDeptController extends BaseController
|
||||||
|
{
|
||||||
private String prefix = "system/dept";
|
private String prefix = "system/dept";
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -35,22 +39,26 @@ public class SysDeptController extends BaseController {
|
||||||
|
|
||||||
@RequiresPermissions("system:dept:view")
|
@RequiresPermissions("system:dept:view")
|
||||||
@GetMapping()
|
@GetMapping()
|
||||||
public String dept() {
|
public String dept()
|
||||||
|
{
|
||||||
return prefix + "/dept";
|
return prefix + "/dept";
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresPermissions("system:dept:list")
|
@RequiresPermissions("system:dept:list")
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public List<SysDept> list(SysDept dept) {
|
public List<SysDept> list(SysDept dept)
|
||||||
return deptService.selectDeptList(dept, Pageable.unpaged()).getContent();
|
{
|
||||||
|
List<SysDept> deptList = deptService.selectDeptList(dept);
|
||||||
|
return deptList;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增部门
|
* 新增部门
|
||||||
*/
|
*/
|
||||||
@GetMapping("/add/{parentId}")
|
@GetMapping("/add/{parentId}")
|
||||||
public String add(@PathVariable("parentId") Long parentId, ModelMap mmap) {
|
public String add(@PathVariable("parentId") Long parentId, ModelMap mmap)
|
||||||
|
{
|
||||||
mmap.put("dept", deptService.selectDeptById(parentId));
|
mmap.put("dept", deptService.selectDeptById(parentId));
|
||||||
return prefix + "/add";
|
return prefix + "/add";
|
||||||
}
|
}
|
||||||
|
|
@ -62,20 +70,27 @@ public class SysDeptController extends BaseController {
|
||||||
@RequiresPermissions("system:dept:add")
|
@RequiresPermissions("system:dept:add")
|
||||||
@PostMapping("/add")
|
@PostMapping("/add")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult addSave(@Validated SysDept dept) {
|
public AjaxResult addSave(@Validated SysDept dept)
|
||||||
if (UserConstants.DEPT_NAME_NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) {
|
{
|
||||||
|
if (UserConstants.DEPT_NAME_NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
|
||||||
|
{
|
||||||
return error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
|
return error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
|
||||||
}
|
}
|
||||||
dept.setCreateBy(ShiroUtils.getLoginName());
|
dept.setCreateBy(ShiroUtils.getLoginName());
|
||||||
return success(deptService.insertDept(dept));
|
return toAjax(deptService.insertDept(dept));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改
|
* 修改
|
||||||
*/
|
*/
|
||||||
@GetMapping("/edit/{deptId}")
|
@GetMapping("/edit/{deptId}")
|
||||||
public String edit(@PathVariable("deptId") Long deptId, ModelMap mmap) {
|
public String edit(@PathVariable("deptId") Long deptId, ModelMap mmap)
|
||||||
|
{
|
||||||
SysDept dept = deptService.selectDeptById(deptId);
|
SysDept dept = deptService.selectDeptById(deptId);
|
||||||
|
if (StringUtils.isNotNull(dept) && 100L == deptId)
|
||||||
|
{
|
||||||
|
dept.setParentName("无");
|
||||||
|
}
|
||||||
mmap.put("dept", dept);
|
mmap.put("dept", dept);
|
||||||
return prefix + "/edit";
|
return prefix + "/edit";
|
||||||
}
|
}
|
||||||
|
|
@ -87,15 +102,23 @@ public class SysDeptController extends BaseController {
|
||||||
@RequiresPermissions("system:dept:edit")
|
@RequiresPermissions("system:dept:edit")
|
||||||
@PostMapping("/edit")
|
@PostMapping("/edit")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult editSave(@Validated SysDept dept) {
|
public AjaxResult editSave(@Validated SysDept dept)
|
||||||
if (UserConstants.DEPT_NAME_NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) {
|
{
|
||||||
|
if (UserConstants.DEPT_NAME_NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
|
||||||
|
{
|
||||||
return error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
|
return error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
|
||||||
} else if (dept.getParentId().equals(dept.getDeptId())) {
|
}
|
||||||
|
else if (dept.getParentId().equals(dept.getDeptId()))
|
||||||
|
{
|
||||||
return error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
|
return error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
|
||||||
}
|
}
|
||||||
|
else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())
|
||||||
|
&& deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0)
|
||||||
|
{
|
||||||
|
return AjaxResult.error("该部门包含未停用的子部门!");
|
||||||
|
}
|
||||||
dept.setUpdateBy(ShiroUtils.getLoginName());
|
dept.setUpdateBy(ShiroUtils.getLoginName());
|
||||||
deptService.updateDept(dept);
|
return toAjax(deptService.updateDept(dept));
|
||||||
return success();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -105,15 +128,17 @@ public class SysDeptController extends BaseController {
|
||||||
@RequiresPermissions("system:dept:remove")
|
@RequiresPermissions("system:dept:remove")
|
||||||
@GetMapping("/remove/{deptId}")
|
@GetMapping("/remove/{deptId}")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult remove(@PathVariable("deptId") Long deptId) {
|
public AjaxResult remove(@PathVariable("deptId") Long deptId)
|
||||||
if (deptService.countChildren(deptId) > 0) {
|
{
|
||||||
|
if (deptService.selectDeptCount(deptId) > 0)
|
||||||
|
{
|
||||||
return AjaxResult.warn("存在下级部门,不允许删除");
|
return AjaxResult.warn("存在下级部门,不允许删除");
|
||||||
}
|
}
|
||||||
if (deptService.checkDeptExistUser(deptId)) {
|
if (deptService.checkDeptExistUser(deptId))
|
||||||
|
{
|
||||||
return AjaxResult.warn("部门存在用户,不允许删除");
|
return AjaxResult.warn("部门存在用户,不允许删除");
|
||||||
}
|
}
|
||||||
deptService.deleteDeptById(deptId);
|
return toAjax(deptService.deleteDeptById(deptId));
|
||||||
return success();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -121,16 +146,23 @@ public class SysDeptController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/checkDeptNameUnique")
|
@PostMapping("/checkDeptNameUnique")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public String checkDeptNameUnique(SysDept dept) {
|
public String checkDeptNameUnique(SysDept dept)
|
||||||
|
{
|
||||||
return deptService.checkDeptNameUnique(dept);
|
return deptService.checkDeptNameUnique(dept);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 选择部门树
|
* 选择部门树
|
||||||
|
*
|
||||||
|
* @param deptId 部门ID
|
||||||
|
* @param excludeId 排除ID
|
||||||
*/
|
*/
|
||||||
@GetMapping("/selectDeptTree/{deptId}")
|
@GetMapping(value = { "/selectDeptTree/{deptId}", "/selectDeptTree/{deptId}/{excludeId}" })
|
||||||
public String selectDeptTree(@PathVariable("deptId") Long deptId, ModelMap mmap) {
|
public String selectDeptTree(@PathVariable("deptId") Long deptId,
|
||||||
|
@PathVariable(value = "excludeId", required = false) String excludeId, ModelMap mmap)
|
||||||
|
{
|
||||||
mmap.put("dept", deptService.selectDeptById(deptId));
|
mmap.put("dept", deptService.selectDeptById(deptId));
|
||||||
|
mmap.put("excludeId", excludeId);
|
||||||
return prefix + "/tree";
|
return prefix + "/tree";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -139,17 +171,32 @@ public class SysDeptController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@GetMapping("/treeData")
|
@GetMapping("/treeData")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public List<Ztree> treeData() {
|
public List<Ztree> treeData()
|
||||||
|
{
|
||||||
List<Ztree> ztrees = deptService.selectDeptTree(new SysDept());
|
List<Ztree> ztrees = deptService.selectDeptTree(new SysDept());
|
||||||
return ztrees;
|
return ztrees;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载部门列表树(排除下级)
|
||||||
|
*/
|
||||||
|
@GetMapping("/treeData/{excludeId}")
|
||||||
|
@ResponseBody
|
||||||
|
public List<Ztree> treeDataExcludeChild(@PathVariable(value = "excludeId", required = false) Long excludeId)
|
||||||
|
{
|
||||||
|
SysDept dept = new SysDept();
|
||||||
|
dept.setDeptId(excludeId);
|
||||||
|
List<Ztree> ztrees = deptService.selectDeptTreeExcludeChild(dept);
|
||||||
|
return ztrees;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加载角色部门(数据权限)列表树
|
* 加载角色部门(数据权限)列表树
|
||||||
*/
|
*/
|
||||||
@GetMapping("/roleDeptTreeData")
|
@GetMapping("/roleDeptTreeData")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public List<Ztree> deptTreeData(SysRole role) {
|
public List<Ztree> deptTreeData(SysRole role)
|
||||||
|
{
|
||||||
List<Ztree> ztrees = deptService.roleDeptTreeData(role);
|
List<Ztree> ztrees = deptService.roleDeptTreeData(role);
|
||||||
return ztrees;
|
return ztrees;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,16 @@
|
||||||
package com.ruoyi.web.controller.system;
|
package com.ruoyi.web.controller.system;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.ModelMap;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
import com.ruoyi.common.annotation.Log;
|
import com.ruoyi.common.annotation.Log;
|
||||||
import com.ruoyi.common.constant.UserConstants;
|
import com.ruoyi.common.constant.UserConstants;
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
|
|
@ -11,15 +22,6 @@ import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||||
import com.ruoyi.framework.util.ShiroUtils;
|
import com.ruoyi.framework.util.ShiroUtils;
|
||||||
import com.ruoyi.system.domain.SysDictType;
|
import com.ruoyi.system.domain.SysDictType;
|
||||||
import com.ruoyi.system.service.ISysDictTypeService;
|
import com.ruoyi.system.service.ISysDictTypeService;
|
||||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.data.domain.Pageable;
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.ui.ModelMap;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据字典信息
|
* 数据字典信息
|
||||||
|
|
@ -28,7 +30,8 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/system/dict")
|
@RequestMapping("/system/dict")
|
||||||
public class SysDictTypeController extends BaseController {
|
public class SysDictTypeController extends BaseController
|
||||||
|
{
|
||||||
private String prefix = "system/dict/type";
|
private String prefix = "system/dict/type";
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -36,23 +39,29 @@ public class SysDictTypeController extends BaseController {
|
||||||
|
|
||||||
@RequiresPermissions("system:dict:view")
|
@RequiresPermissions("system:dict:view")
|
||||||
@GetMapping()
|
@GetMapping()
|
||||||
public String dictType() {
|
public String dictType()
|
||||||
|
{
|
||||||
return prefix + "/type";
|
return prefix + "/type";
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
@RequiresPermissions("system:dict:list")
|
@RequiresPermissions("system:dict:list")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public TableDataInfo list(SysDictType dictType) {
|
public TableDataInfo list(SysDictType dictType)
|
||||||
return getDataTable(dictTypeService.selectDictTypeList(dictType, getPageRequest()));
|
{
|
||||||
|
startPage();
|
||||||
|
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
|
||||||
|
return getDataTable(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Log(title = "字典类型", businessType = BusinessType.EXPORT)
|
@Log(title = "字典类型", businessType = BusinessType.EXPORT)
|
||||||
@RequiresPermissions("system:dict:export")
|
@RequiresPermissions("system:dict:export")
|
||||||
@PostMapping("/export")
|
@PostMapping("/export")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult export(SysDictType dictType) {
|
public AjaxResult export(SysDictType dictType)
|
||||||
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType, Pageable.unpaged()).getContent();
|
{
|
||||||
|
|
||||||
|
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
|
||||||
ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
|
ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
|
||||||
return util.exportExcel(list, "字典类型");
|
return util.exportExcel(list, "字典类型");
|
||||||
}
|
}
|
||||||
|
|
@ -61,7 +70,8 @@ public class SysDictTypeController extends BaseController {
|
||||||
* 新增字典类型
|
* 新增字典类型
|
||||||
*/
|
*/
|
||||||
@GetMapping("/add")
|
@GetMapping("/add")
|
||||||
public String add() {
|
public String add()
|
||||||
|
{
|
||||||
return prefix + "/add";
|
return prefix + "/add";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -72,8 +82,10 @@ public class SysDictTypeController extends BaseController {
|
||||||
@RequiresPermissions("system:dict:add")
|
@RequiresPermissions("system:dict:add")
|
||||||
@PostMapping("/add")
|
@PostMapping("/add")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult addSave(@Validated SysDictType dict) {
|
public AjaxResult addSave(@Validated SysDictType dict)
|
||||||
if (UserConstants.DICT_TYPE_NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
|
{
|
||||||
|
if (UserConstants.DICT_TYPE_NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
|
||||||
|
{
|
||||||
return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
|
return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
|
||||||
}
|
}
|
||||||
dict.setCreateBy(ShiroUtils.getLoginName());
|
dict.setCreateBy(ShiroUtils.getLoginName());
|
||||||
|
|
@ -84,7 +96,8 @@ public class SysDictTypeController extends BaseController {
|
||||||
* 修改字典类型
|
* 修改字典类型
|
||||||
*/
|
*/
|
||||||
@GetMapping("/edit/{dictId}")
|
@GetMapping("/edit/{dictId}")
|
||||||
public String edit(@PathVariable("dictId") Long dictId, ModelMap mmap) {
|
public String edit(@PathVariable("dictId") Long dictId, ModelMap mmap)
|
||||||
|
{
|
||||||
mmap.put("dict", dictTypeService.selectDictTypeById(dictId));
|
mmap.put("dict", dictTypeService.selectDictTypeById(dictId));
|
||||||
return prefix + "/edit";
|
return prefix + "/edit";
|
||||||
}
|
}
|
||||||
|
|
@ -96,8 +109,10 @@ public class SysDictTypeController extends BaseController {
|
||||||
@RequiresPermissions("system:dict:edit")
|
@RequiresPermissions("system:dict:edit")
|
||||||
@PostMapping("/edit")
|
@PostMapping("/edit")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult editSave(@Validated SysDictType dict) {
|
public AjaxResult editSave(@Validated SysDictType dict)
|
||||||
if (UserConstants.DICT_TYPE_NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
|
{
|
||||||
|
if (UserConstants.DICT_TYPE_NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
|
||||||
|
{
|
||||||
return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
|
return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
|
||||||
}
|
}
|
||||||
dict.setUpdateBy(ShiroUtils.getLoginName());
|
dict.setUpdateBy(ShiroUtils.getLoginName());
|
||||||
|
|
@ -108,12 +123,22 @@ public class SysDictTypeController extends BaseController {
|
||||||
@RequiresPermissions("system:dict:remove")
|
@RequiresPermissions("system:dict:remove")
|
||||||
@PostMapping("/remove")
|
@PostMapping("/remove")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult remove(String ids) {
|
public AjaxResult remove(String ids)
|
||||||
try {
|
{
|
||||||
return toAjax(dictTypeService.deleteDictTypeByIds(ids));
|
return toAjax(dictTypeService.deleteDictTypeByIds(ids));
|
||||||
} catch (Exception e) {
|
|
||||||
return error(e.getMessage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清空缓存
|
||||||
|
*/
|
||||||
|
@RequiresPermissions("system:dict:remove")
|
||||||
|
@Log(title = "字典类型", businessType = BusinessType.CLEAN)
|
||||||
|
@GetMapping("/clearCache")
|
||||||
|
@ResponseBody
|
||||||
|
public AjaxResult clearCache()
|
||||||
|
{
|
||||||
|
dictTypeService.clearCache();
|
||||||
|
return success();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -121,7 +146,8 @@ public class SysDictTypeController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@RequiresPermissions("system:dict:list")
|
@RequiresPermissions("system:dict:list")
|
||||||
@GetMapping("/detail/{dictId}")
|
@GetMapping("/detail/{dictId}")
|
||||||
public String detail(@PathVariable("dictId") Long dictId, ModelMap mmap) {
|
public String detail(@PathVariable("dictId") Long dictId, ModelMap mmap)
|
||||||
|
{
|
||||||
mmap.put("dict", dictTypeService.selectDictTypeById(dictId));
|
mmap.put("dict", dictTypeService.selectDictTypeById(dictId));
|
||||||
mmap.put("dictList", dictTypeService.selectDictTypeAll());
|
mmap.put("dictList", dictTypeService.selectDictTypeAll());
|
||||||
return "system/dict/data/data";
|
return "system/dict/data/data";
|
||||||
|
|
@ -132,7 +158,8 @@ public class SysDictTypeController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/checkDictTypeUnique")
|
@PostMapping("/checkDictTypeUnique")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public String checkDictTypeUnique(SysDictType dictType) {
|
public String checkDictTypeUnique(SysDictType dictType)
|
||||||
|
{
|
||||||
return dictTypeService.checkDictTypeUnique(dictType);
|
return dictTypeService.checkDictTypeUnique(dictType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -141,7 +168,8 @@ public class SysDictTypeController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@GetMapping("/selectDictTree/{columnId}/{dictType}")
|
@GetMapping("/selectDictTree/{columnId}/{dictType}")
|
||||||
public String selectDeptTree(@PathVariable("columnId") Long columnId, @PathVariable("dictType") String dictType,
|
public String selectDeptTree(@PathVariable("columnId") Long columnId, @PathVariable("dictType") String dictType,
|
||||||
ModelMap mmap) {
|
ModelMap mmap)
|
||||||
|
{
|
||||||
mmap.put("columnId", columnId);
|
mmap.put("columnId", columnId);
|
||||||
mmap.put("dict", dictTypeService.selectDictTypeByType(dictType));
|
mmap.put("dict", dictTypeService.selectDictTypeByType(dictType));
|
||||||
return prefix + "/tree";
|
return prefix + "/tree";
|
||||||
|
|
@ -152,7 +180,8 @@ public class SysDictTypeController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@GetMapping("/treeData")
|
@GetMapping("/treeData")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public List<Ztree> treeData() {
|
public List<Ztree> treeData()
|
||||||
|
{
|
||||||
List<Ztree> ztrees = dictTypeService.selectDictTree(new SysDictType());
|
List<Ztree> ztrees = dictTypeService.selectDictTree(new SysDictType());
|
||||||
return ztrees;
|
return ztrees;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,22 @@ package com.ruoyi.web.controller.system;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.servlet.http.Cookie;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.ModelMap;
|
import org.springframework.ui.ModelMap;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import com.ruoyi.common.config.Global;
|
import com.ruoyi.common.config.Global;
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
|
import com.ruoyi.common.utils.CookieUtils;
|
||||||
|
import com.ruoyi.common.utils.ServletUtils;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.framework.util.ShiroUtils;
|
import com.ruoyi.framework.util.ShiroUtils;
|
||||||
import com.ruoyi.system.domain.SysMenu;
|
import com.ruoyi.system.domain.SysMenu;
|
||||||
import com.ruoyi.system.domain.SysUser;
|
import com.ruoyi.system.domain.SysUser;
|
||||||
|
import com.ruoyi.system.service.ISysConfigService;
|
||||||
import com.ruoyi.system.service.ISysMenuService;
|
import com.ruoyi.system.service.ISysMenuService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -19,33 +26,67 @@ import com.ruoyi.system.service.ISysMenuService;
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
public class SysIndexController extends BaseController {
|
public class SysIndexController extends BaseController
|
||||||
|
{
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISysMenuService menuService;
|
private ISysMenuService menuService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ISysConfigService configService;
|
||||||
|
|
||||||
// 系统首页
|
// 系统首页
|
||||||
@GetMapping("/index")
|
@GetMapping("/index")
|
||||||
public String index(ModelMap mmap) {
|
public String index(ModelMap mmap)
|
||||||
|
{
|
||||||
// 取身份信息
|
// 取身份信息
|
||||||
SysUser user = ShiroUtils.getSysUser();
|
SysUser user = ShiroUtils.getSysUser();
|
||||||
// 根据用户id取出菜单
|
// 根据用户id取出菜单
|
||||||
List<SysMenu> menus = menuService.selectMenusByUser(user);
|
List<SysMenu> menus = menuService.selectMenusByUser(user);
|
||||||
mmap.put("menus", menus);
|
mmap.put("menus", menus);
|
||||||
mmap.put("user", user);
|
mmap.put("user", user);
|
||||||
|
mmap.put("sideTheme", configService.selectConfigByKey("sys.index.sideTheme"));
|
||||||
|
mmap.put("skinName", configService.selectConfigByKey("sys.index.skinName"));
|
||||||
|
mmap.put("ignoreFooter", configService.selectConfigByKey("sys.index.ignoreFooter"));
|
||||||
mmap.put("copyrightYear", Global.getCopyrightYear());
|
mmap.put("copyrightYear", Global.getCopyrightYear());
|
||||||
mmap.put("demoEnabled", Global.isDemoEnabled());
|
mmap.put("demoEnabled", Global.isDemoEnabled());
|
||||||
return "index";
|
|
||||||
|
// 菜单导航显示风格
|
||||||
|
String menuStyle = configService.selectConfigByKey("sys.index.menuStyle");
|
||||||
|
// 移动端,默认使左侧导航菜单,否则取默认配置
|
||||||
|
String indexStyle = ServletUtils.checkAgentIsMobile(ServletUtils.getRequest().getHeader("User-Agent")) ? "index" : menuStyle;
|
||||||
|
|
||||||
|
// 优先Cookie配置导航菜单
|
||||||
|
Cookie[] cookies = ServletUtils.getRequest().getCookies();
|
||||||
|
for (Cookie cookie : cookies)
|
||||||
|
{
|
||||||
|
if (StringUtils.isNotEmpty(cookie.getName()) && "nav-style".equalsIgnoreCase(cookie.getName()))
|
||||||
|
{
|
||||||
|
indexStyle = cookie.getValue();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String webIndex = "topnav".equalsIgnoreCase(indexStyle) ? "index-topnav" : "index";
|
||||||
|
return webIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 切换主题
|
// 切换主题
|
||||||
@GetMapping("/system/switchSkin")
|
@GetMapping("/system/switchSkin")
|
||||||
public String switchSkin(ModelMap mmap) {
|
public String switchSkin()
|
||||||
|
{
|
||||||
return "skin";
|
return "skin";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 切换菜单
|
||||||
|
@GetMapping("/system/menuStyle/{style}")
|
||||||
|
public void menuStyle(@PathVariable String style, HttpServletResponse response)
|
||||||
|
{
|
||||||
|
CookieUtils.setCookie(response, "nav-style", style);
|
||||||
|
}
|
||||||
|
|
||||||
// 系统介绍
|
// 系统介绍
|
||||||
@GetMapping("/system/main")
|
@GetMapping("/system/main")
|
||||||
public String main(ModelMap mmap) {
|
public String main(ModelMap mmap)
|
||||||
|
{
|
||||||
mmap.put("version", Global.getVersion());
|
mmap.put("version", Global.getVersion());
|
||||||
return "main";
|
return "main";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
package com.ruoyi.web.controller.system;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
|
import com.ruoyi.framework.shiro.service.SysRegisterService;
|
||||||
|
import com.ruoyi.system.domain.SysUser;
|
||||||
|
import com.ruoyi.system.service.ISysConfigService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册验证
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
@Controller
|
||||||
|
public class SysRegisterController extends BaseController
|
||||||
|
{
|
||||||
|
@Autowired
|
||||||
|
private SysRegisterService registerService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ISysConfigService configService;
|
||||||
|
|
||||||
|
@GetMapping("/register")
|
||||||
|
public String register()
|
||||||
|
{
|
||||||
|
return "register";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/register")
|
||||||
|
@ResponseBody
|
||||||
|
public AjaxResult ajaxRegister(SysUser user)
|
||||||
|
{
|
||||||
|
if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
|
||||||
|
{
|
||||||
|
return error("当前系统没有开启注册功能!");
|
||||||
|
}
|
||||||
|
String msg = registerService.register(user);
|
||||||
|
return StringUtils.isEmpty(msg) ? success() : error(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,30 +1,32 @@
|
||||||
package com.ruoyi.web.controller.system;
|
package com.ruoyi.web.controller.system;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.ModelMap;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import com.ruoyi.common.annotation.Log;
|
import com.ruoyi.common.annotation.Log;
|
||||||
import com.ruoyi.common.constant.UserConstants;
|
import com.ruoyi.common.constant.UserConstants;
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
import com.ruoyi.common.core.domain.BaseEntity;
|
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||||
import com.ruoyi.framework.shiro.service.SysPasswordService;
|
import com.ruoyi.framework.shiro.service.SysPasswordService;
|
||||||
import com.ruoyi.framework.util.ShiroUtils;
|
import com.ruoyi.framework.util.ShiroUtils;
|
||||||
|
import com.ruoyi.system.domain.SysRole;
|
||||||
import com.ruoyi.system.domain.SysUser;
|
import com.ruoyi.system.domain.SysUser;
|
||||||
import com.ruoyi.system.service.ISysPostService;
|
import com.ruoyi.system.service.ISysPostService;
|
||||||
import com.ruoyi.system.service.ISysRoleService;
|
import com.ruoyi.system.service.ISysRoleService;
|
||||||
import com.ruoyi.system.service.ISysUserService;
|
import com.ruoyi.system.service.ISysUserService;
|
||||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.data.domain.Page;
|
|
||||||
import org.springframework.data.domain.Pageable;
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.ui.ModelMap;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户信息
|
* 用户信息
|
||||||
|
|
@ -33,7 +35,8 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/system/user")
|
@RequestMapping("/system/user")
|
||||||
public class SysUserController extends BaseController {
|
public class SysUserController extends BaseController
|
||||||
|
{
|
||||||
private String prefix = "system/user";
|
private String prefix = "system/user";
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -50,32 +53,38 @@ public class SysUserController extends BaseController {
|
||||||
|
|
||||||
@RequiresPermissions("system:user:view")
|
@RequiresPermissions("system:user:view")
|
||||||
@GetMapping()
|
@GetMapping()
|
||||||
public String user() {
|
public String user()
|
||||||
|
{
|
||||||
return prefix + "/user";
|
return prefix + "/user";
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresPermissions("system:user:list")
|
@RequiresPermissions("system:user:list")
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public TableDataInfo list(SysUser user) {
|
public TableDataInfo list(SysUser user)
|
||||||
return getDataTable(userService.selectUserList(user, getPageRequest()));
|
{
|
||||||
|
startPage();
|
||||||
|
List<SysUser> list = userService.selectUserList(user);
|
||||||
|
return getDataTable(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Log(title = "用户管理", businessType = BusinessType.EXPORT)
|
@Log(title = "用户管理", businessType = BusinessType.EXPORT)
|
||||||
@RequiresPermissions("system:user:export")
|
@RequiresPermissions("system:user:export")
|
||||||
@PostMapping("/export")
|
@PostMapping("/export")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult export(SysUser user) {
|
public AjaxResult export(SysUser user)
|
||||||
Page<SysUser> page = userService.selectUserList(user, Pageable.unpaged());
|
{
|
||||||
|
List<SysUser> list = userService.selectUserList(user);
|
||||||
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
|
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
|
||||||
return util.exportExcel(page.getContent(), "用户数据");
|
return util.exportExcel(list, "用户数据");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Log(title = "用户管理", businessType = BusinessType.IMPORT)
|
@Log(title = "用户管理", businessType = BusinessType.IMPORT)
|
||||||
@RequiresPermissions("system:user:import")
|
@RequiresPermissions("system:user:import")
|
||||||
@PostMapping("/importData")
|
@PostMapping("/importData")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
|
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
|
||||||
|
{
|
||||||
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
|
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
|
||||||
List<SysUser> userList = util.importExcel(file.getInputStream());
|
List<SysUser> userList = util.importExcel(file.getInputStream());
|
||||||
String operName = ShiroUtils.getSysUser().getLoginName();
|
String operName = ShiroUtils.getSysUser().getLoginName();
|
||||||
|
|
@ -86,7 +95,8 @@ public class SysUserController extends BaseController {
|
||||||
@RequiresPermissions("system:user:view")
|
@RequiresPermissions("system:user:view")
|
||||||
@GetMapping("/importTemplate")
|
@GetMapping("/importTemplate")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult importTemplate() {
|
public AjaxResult importTemplate()
|
||||||
|
{
|
||||||
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
|
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
|
||||||
return util.importTemplateExcel("用户数据");
|
return util.importTemplateExcel("用户数据");
|
||||||
}
|
}
|
||||||
|
|
@ -95,8 +105,9 @@ public class SysUserController extends BaseController {
|
||||||
* 新增用户
|
* 新增用户
|
||||||
*/
|
*/
|
||||||
@GetMapping("/add")
|
@GetMapping("/add")
|
||||||
public String add(ModelMap mmap) {
|
public String add(ModelMap mmap)
|
||||||
mmap.put("roles", roleService.selectRoleAll());
|
{
|
||||||
|
mmap.put("roles", roleService.selectRoleAll().stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
|
||||||
mmap.put("posts", postService.selectPostAll());
|
mmap.put("posts", postService.selectPostAll());
|
||||||
return prefix + "/add";
|
return prefix + "/add";
|
||||||
}
|
}
|
||||||
|
|
@ -108,28 +119,36 @@ public class SysUserController extends BaseController {
|
||||||
@Log(title = "用户管理", businessType = BusinessType.INSERT)
|
@Log(title = "用户管理", businessType = BusinessType.INSERT)
|
||||||
@PostMapping("/add")
|
@PostMapping("/add")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult addSave(@Validated SysUser user) {
|
public AjaxResult addSave(@Validated SysUser user)
|
||||||
if (UserConstants.USER_NAME_NOT_UNIQUE.equals(userService.checkLoginNameUnique(user.getLoginName()))) {
|
{
|
||||||
|
if (UserConstants.USER_NAME_NOT_UNIQUE.equals(userService.checkLoginNameUnique(user.getLoginName())))
|
||||||
|
{
|
||||||
return error("新增用户'" + user.getLoginName() + "'失败,登录账号已存在");
|
return error("新增用户'" + user.getLoginName() + "'失败,登录账号已存在");
|
||||||
} else if (UserConstants.USER_PHONE_NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
|
}
|
||||||
|
else if (UserConstants.USER_PHONE_NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
|
||||||
|
{
|
||||||
return error("新增用户'" + user.getLoginName() + "'失败,手机号码已存在");
|
return error("新增用户'" + user.getLoginName() + "'失败,手机号码已存在");
|
||||||
} else if (UserConstants.USER_EMAIL_NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
|
}
|
||||||
|
else if (UserConstants.USER_EMAIL_NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
|
||||||
|
{
|
||||||
return error("新增用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
|
return error("新增用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
|
||||||
}
|
}
|
||||||
user.setSalt(ShiroUtils.randomSalt());
|
user.setSalt(ShiroUtils.randomSalt());
|
||||||
user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
|
user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
|
||||||
user.setCreateBy(ShiroUtils.getLoginName());
|
user.setCreateBy(ShiroUtils.getLoginName());
|
||||||
return success(userService.insertUser(user));
|
return toAjax(userService.insertUser(user));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改用户
|
* 修改用户
|
||||||
*/
|
*/
|
||||||
@GetMapping("/edit/{userId}")
|
@GetMapping("/edit/{userId}")
|
||||||
public String edit(@PathVariable("userId") Long userId, ModelMap mmap) {
|
public String edit(@PathVariable("userId") Long userId, ModelMap mmap)
|
||||||
mmap.put("user", userService.selectUserWithRolesAndPostsById(userId));
|
{
|
||||||
mmap.put("roles", roleService.selectRoleAll());
|
List<SysRole> roles = roleService.selectRolesByUserId(userId);
|
||||||
mmap.put("posts", postService.selectPostAll());
|
mmap.put("user", userService.selectUserById(userId));
|
||||||
|
mmap.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
|
||||||
|
mmap.put("posts", postService.selectPostsByUserId(userId));
|
||||||
return prefix + "/edit";
|
return prefix + "/edit";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -140,22 +159,25 @@ public class SysUserController extends BaseController {
|
||||||
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
|
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
|
||||||
@PostMapping("/edit")
|
@PostMapping("/edit")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult editSave(@Validated SysUser user) {
|
public AjaxResult editSave(@Validated SysUser user)
|
||||||
|
{
|
||||||
userService.checkUserAllowed(user);
|
userService.checkUserAllowed(user);
|
||||||
if (UserConstants.USER_PHONE_NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
|
if (UserConstants.USER_PHONE_NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
|
||||||
|
{
|
||||||
return error("修改用户'" + user.getLoginName() + "'失败,手机号码已存在");
|
return error("修改用户'" + user.getLoginName() + "'失败,手机号码已存在");
|
||||||
} else if (UserConstants.USER_EMAIL_NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
|
}
|
||||||
|
else if (UserConstants.USER_EMAIL_NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
|
||||||
|
{
|
||||||
return error("修改用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
|
return error("修改用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
|
||||||
}
|
}
|
||||||
user.setUpdateBy(ShiroUtils.getLoginName());
|
user.setUpdateBy(ShiroUtils.getLoginName());
|
||||||
userService.updateUser(user);
|
return toAjax(userService.updateUser(user));
|
||||||
return success();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresPermissions("system:user:resetPwd")
|
@RequiresPermissions("system:user:resetPwd")
|
||||||
@Log(title = "重置密码", businessType = BusinessType.UPDATE)
|
|
||||||
@GetMapping("/resetPwd/{userId}")
|
@GetMapping("/resetPwd/{userId}")
|
||||||
public String resetPwd(@PathVariable("userId") Long userId, ModelMap mmap) {
|
public String resetPwd(@PathVariable("userId") Long userId, ModelMap mmap)
|
||||||
|
{
|
||||||
mmap.put("user", userService.selectUserById(userId));
|
mmap.put("user", userService.selectUserById(userId));
|
||||||
return prefix + "/resetPwd";
|
return prefix + "/resetPwd";
|
||||||
}
|
}
|
||||||
|
|
@ -164,25 +186,61 @@ public class SysUserController extends BaseController {
|
||||||
@Log(title = "重置密码", businessType = BusinessType.UPDATE)
|
@Log(title = "重置密码", businessType = BusinessType.UPDATE)
|
||||||
@PostMapping("/resetPwd")
|
@PostMapping("/resetPwd")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult resetPwdSave(SysUser user) {
|
public AjaxResult resetPwdSave(SysUser user)
|
||||||
|
{
|
||||||
userService.checkUserAllowed(user);
|
userService.checkUserAllowed(user);
|
||||||
user.setSalt(ShiroUtils.randomSalt());
|
user.setSalt(ShiroUtils.randomSalt());
|
||||||
user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
|
user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
|
||||||
userService.resetUserPwd(user);
|
if (userService.resetUserPwd(user) > 0)
|
||||||
if (ShiroUtils.getUserId() == user.getUserId()) {
|
{
|
||||||
|
if (ShiroUtils.getUserId().longValue() == user.getUserId().longValue())
|
||||||
|
{
|
||||||
ShiroUtils.setSysUser(userService.selectUserById(user.getUserId()));
|
ShiroUtils.setSysUser(userService.selectUserById(user.getUserId()));
|
||||||
}
|
}
|
||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
return error();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 进入授权角色页
|
||||||
|
*/
|
||||||
|
@GetMapping("/authRole/{userId}")
|
||||||
|
public String authRole(@PathVariable("userId") Long userId, ModelMap mmap)
|
||||||
|
{
|
||||||
|
SysUser user = userService.selectUserById(userId);
|
||||||
|
// 获取用户所属的角色列表
|
||||||
|
List<SysRole> roles = roleService.selectRolesByUserId(userId);
|
||||||
|
mmap.put("user", user);
|
||||||
|
mmap.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
|
||||||
|
return prefix + "/authRole";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户授权角色
|
||||||
|
*/
|
||||||
|
@RequiresPermissions("system:user:add")
|
||||||
|
@Log(title = "用户管理", businessType = BusinessType.GRANT)
|
||||||
|
@PostMapping("/authRole/insertAuthRole")
|
||||||
|
@ResponseBody
|
||||||
|
public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
|
||||||
|
{
|
||||||
|
userService.insertUserAuth(userId, roleIds);
|
||||||
|
return success();
|
||||||
|
}
|
||||||
|
|
||||||
@RequiresPermissions("system:user:remove")
|
@RequiresPermissions("system:user:remove")
|
||||||
@Log(title = "用户管理", businessType = BusinessType.DELETE)
|
@Log(title = "用户管理", businessType = BusinessType.DELETE)
|
||||||
@PostMapping("/remove")
|
@PostMapping("/remove")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult remove(String ids) {
|
public AjaxResult remove(String ids)
|
||||||
try {
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
return toAjax(userService.deleteUserByIds(ids));
|
return toAjax(userService.deleteUserByIds(ids));
|
||||||
} catch (Exception e) {
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
return error(e.getMessage());
|
return error(e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -192,7 +250,8 @@ public class SysUserController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/checkLoginNameUnique")
|
@PostMapping("/checkLoginNameUnique")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public String checkLoginNameUnique(SysUser user) {
|
public String checkLoginNameUnique(SysUser user)
|
||||||
|
{
|
||||||
return userService.checkLoginNameUnique(user.getLoginName());
|
return userService.checkLoginNameUnique(user.getLoginName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -201,7 +260,8 @@ public class SysUserController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/checkPhoneUnique")
|
@PostMapping("/checkPhoneUnique")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public String checkPhoneUnique(SysUser user) {
|
public String checkPhoneUnique(SysUser user)
|
||||||
|
{
|
||||||
return userService.checkPhoneUnique(user);
|
return userService.checkPhoneUnique(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -210,7 +270,8 @@ public class SysUserController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("/checkEmailUnique")
|
@PostMapping("/checkEmailUnique")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public String checkEmailUnique(SysUser user) {
|
public String checkEmailUnique(SysUser user)
|
||||||
|
{
|
||||||
return userService.checkEmailUnique(user);
|
return userService.checkEmailUnique(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -221,9 +282,9 @@ public class SysUserController extends BaseController {
|
||||||
@RequiresPermissions("system:user:edit")
|
@RequiresPermissions("system:user:edit")
|
||||||
@PostMapping("/changeStatus")
|
@PostMapping("/changeStatus")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult changeStatus(SysUser user) {
|
public AjaxResult changeStatus(SysUser user)
|
||||||
|
{
|
||||||
userService.checkUserAllowed(user);
|
userService.checkUserAllowed(user);
|
||||||
userService.changeStatus(user);
|
return toAjax(userService.changeStatus(user));
|
||||||
return success();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.ruoyi.web.core.config;
|
package com.ruoyi.web.core.config;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import com.ruoyi.common.config.Global;
|
import com.ruoyi.common.config.Global;
|
||||||
|
|
@ -20,13 +21,21 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
|
||||||
*/
|
*/
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableSwagger2
|
@EnableSwagger2
|
||||||
public class SwaggerConfig {
|
public class SwaggerConfig
|
||||||
|
{
|
||||||
|
/** 是否开启swagger */
|
||||||
|
@Value("${swagger.enabled}")
|
||||||
|
private boolean enabled;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建API
|
* 创建API
|
||||||
*/
|
*/
|
||||||
@Bean
|
@Bean
|
||||||
public Docket createRestApi() {
|
public Docket createRestApi()
|
||||||
|
{
|
||||||
return new Docket(DocumentationType.SWAGGER_2)
|
return new Docket(DocumentationType.SWAGGER_2)
|
||||||
|
// 是否启用Swagger
|
||||||
|
.enable(enabled)
|
||||||
// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
|
// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
|
||||||
.apiInfo(apiInfo())
|
.apiInfo(apiInfo())
|
||||||
// 设置哪些接口暴露给Swagger展示
|
// 设置哪些接口暴露给Swagger展示
|
||||||
|
|
@ -43,7 +52,8 @@ public class SwaggerConfig {
|
||||||
/**
|
/**
|
||||||
* 添加摘要信息
|
* 添加摘要信息
|
||||||
*/
|
*/
|
||||||
private ApiInfo apiInfo() {
|
private ApiInfo apiInfo()
|
||||||
|
{
|
||||||
// 用ApiInfoBuilder进行定制
|
// 用ApiInfoBuilder进行定制
|
||||||
return new ApiInfoBuilder()
|
return new ApiInfoBuilder()
|
||||||
// 设置标题
|
// 设置标题
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ ruoyi:
|
||||||
# 名称
|
# 名称
|
||||||
name: RuoYi
|
name: RuoYi
|
||||||
# 版本
|
# 版本
|
||||||
version: 4.1.0
|
version: 4.4.0
|
||||||
# 版权年份
|
# 版权年份
|
||||||
copyrightYear: 2019
|
copyrightYear: 2019
|
||||||
# 实例演示开关
|
# 实例演示开关
|
||||||
|
|
@ -11,7 +11,7 @@ ruoyi:
|
||||||
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
|
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
|
||||||
profile: D:/ruoyi/uploadPath
|
profile: D:/ruoyi/uploadPath
|
||||||
# 获取ip地址开关
|
# 获取ip地址开关
|
||||||
addressEnabled: true
|
addressEnabled: false
|
||||||
|
|
||||||
# 开发环境配置
|
# 开发环境配置
|
||||||
server:
|
server:
|
||||||
|
|
@ -124,6 +124,8 @@ shiro:
|
||||||
httpOnly: true
|
httpOnly: true
|
||||||
# 设置Cookie的过期时间,天为单位
|
# 设置Cookie的过期时间,天为单位
|
||||||
maxAge: 30
|
maxAge: 30
|
||||||
|
# 设置密钥,务必保持唯一性(生成方式,直接拷贝到main运行即可)KeyGenerator keygen = KeyGenerator.getInstance("AES"); SecretKey deskey = keygen.generateKey(); System.out.println(Base64.encodeToString(deskey.getEncoded()));
|
||||||
|
cipherKey: zSyK5Kp6PZAAjlT+eeNMlg==
|
||||||
session:
|
session:
|
||||||
# Session超时时间,-1代表永不过期(默认30分钟)
|
# Session超时时间,-1代表永不过期(默认30分钟)
|
||||||
expireTime: 30
|
expireTime: 30
|
||||||
|
|
@ -144,3 +146,8 @@ xss:
|
||||||
excludes: /system/notice/*
|
excludes: /system/notice/*
|
||||||
# 匹配链接
|
# 匹配链接
|
||||||
urlPatterns: /system/*,/monitor/*,/tool/*
|
urlPatterns: /system/*,/monitor/*,/tool/*
|
||||||
|
|
||||||
|
# Swagger配置
|
||||||
|
swagger:
|
||||||
|
# 是否开启swagger
|
||||||
|
enabled: true
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ drop table if exists sys_dept;
|
||||||
create table sys_dept (
|
create table sys_dept (
|
||||||
dept_id bigint(20) not null auto_increment comment '部门id',
|
dept_id bigint(20) not null auto_increment comment '部门id',
|
||||||
parent_id bigint(20) default 0 comment '父部门id',
|
parent_id bigint(20) default 0 comment '父部门id',
|
||||||
code varchar(128) not null comment '部门编码',
|
|
||||||
ancestors varchar(50) default '' comment '祖级列表',
|
ancestors varchar(50) default '' comment '祖级列表',
|
||||||
dept_name varchar(30) default '' comment '部门名称',
|
dept_name varchar(30) default '' comment '部门名称',
|
||||||
order_num int(4) default 0 comment '显示顺序',
|
order_num int(4) default 0 comment '显示顺序',
|
||||||
|
|
@ -24,7 +23,17 @@ create table sys_dept (
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- 初始化-部门表数据
|
-- 初始化-部门表数据
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
insert into sys_dept values(1, NULL, '001', NULL, '根', 0, 'Admin', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
|
insert into sys_dept values(100, 0, '0', '若依科技', 0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
|
||||||
|
insert into sys_dept values(101, 100, '0,100', '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
|
||||||
|
insert into sys_dept values(102, 100, '0,100', '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
|
||||||
|
insert into sys_dept values(103, 101, '0,100,101', '研发部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
|
||||||
|
insert into sys_dept values(104, 101, '0,100,101', '市场部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
|
||||||
|
insert into sys_dept values(105, 101, '0,100,101', '测试部门', 3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
|
||||||
|
insert into sys_dept values(106, 101, '0,100,101', '财务部门', 4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
|
||||||
|
insert into sys_dept values(107, 101, '0,100,101', '运维部门', 5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
|
||||||
|
insert into sys_dept values(108, 102, '0,100,102', '市场部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
|
||||||
|
insert into sys_dept values(109, 102, '0,100,102', '财务部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
|
||||||
|
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- 2、用户信息表
|
-- 2、用户信息表
|
||||||
|
|
@ -34,8 +43,8 @@ create table sys_user (
|
||||||
user_id bigint(20) not null auto_increment comment '用户ID',
|
user_id bigint(20) not null auto_increment comment '用户ID',
|
||||||
dept_id bigint(20) default null comment '部门ID',
|
dept_id bigint(20) default null comment '部门ID',
|
||||||
login_name varchar(30) not null comment '登录账号',
|
login_name varchar(30) not null comment '登录账号',
|
||||||
user_name varchar(30) not null comment '用户昵称',
|
user_name varchar(30) default '' comment '用户昵称',
|
||||||
user_type varchar(2) default '00' comment '用户类型(00系统用户)',
|
user_type varchar(2) default '00' comment '用户类型(00系统用户 01注册用户)',
|
||||||
email varchar(50) default '' comment '用户邮箱',
|
email varchar(50) default '' comment '用户邮箱',
|
||||||
phonenumber varchar(11) default '' comment '手机号码',
|
phonenumber varchar(11) default '' comment '手机号码',
|
||||||
sex char(1) default '0' comment '用户性别(0男 1女 2未知)',
|
sex char(1) default '0' comment '用户性别(0男 1女 2未知)',
|
||||||
|
|
@ -57,8 +66,8 @@ create table sys_user (
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- 初始化-用户信息表数据
|
-- 初始化-用户信息表数据
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
insert into sys_user values(1, 1, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '29c67a30398638269fe600f73a054934', '111111', '0', '0', '127.0.0.1', '2018-03-16 11-33-00', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '管理员');
|
insert into sys_user values(1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '29c67a30398638269fe600f73a054934', '111111', '0', '0', '127.0.0.1', '2018-03-16 11-33-00', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '管理员');
|
||||||
insert into sys_user values(2, 1, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '8e6d98b90472783cc73c17047ddccf36', '222222', '0', '0', '127.0.0.1', '2018-03-16 11-33-00', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '测试员');
|
insert into sys_user values(2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '8e6d98b90472783cc73c17047ddccf36', '222222', '0', '0', '127.0.0.1', '2018-03-16 11-33-00', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '测试员');
|
||||||
|
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
|
|
@ -112,7 +121,7 @@ create table sys_role (
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- 初始化-角色信息表数据
|
-- 初始化-角色信息表数据
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
insert into sys_role values('1', '管理员', 'admin', 1, 1, '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '管理员');
|
insert into sys_role values('1', '超级管理员', 'admin', 1, 1, '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '超级管理员');
|
||||||
insert into sys_role values('2', '普通角色', 'common', 2, 2, '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '普通角色');
|
insert into sys_role values('2', '普通角色', 'common', 2, 2, '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '普通角色');
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -146,26 +155,27 @@ create table sys_menu (
|
||||||
insert into sys_menu values('1', '系统管理', '0', '1', '#', '', 'M', '0', '', 'fa fa-gear', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统管理目录');
|
insert into sys_menu values('1', '系统管理', '0', '1', '#', '', 'M', '0', '', 'fa fa-gear', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统管理目录');
|
||||||
insert into sys_menu values('2', '系统监控', '0', '2', '#', '', 'M', '0', '', 'fa fa-video-camera', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统监控目录');
|
insert into sys_menu values('2', '系统监控', '0', '2', '#', '', 'M', '0', '', 'fa fa-video-camera', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统监控目录');
|
||||||
insert into sys_menu values('3', '系统工具', '0', '3', '#', '', 'M', '0', '', 'fa fa-bars', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统工具目录');
|
insert into sys_menu values('3', '系统工具', '0', '3', '#', '', 'M', '0', '', 'fa fa-bars', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统工具目录');
|
||||||
|
insert into sys_menu values('4', '若依官网', '0', '4', 'http://ruoyi.vip', 'menuBlank', 'C', '0', '', 'fa fa-location-arrow', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '若依官网地址');
|
||||||
-- 二级菜单
|
-- 二级菜单
|
||||||
insert into sys_menu values('100', '用户管理', '1', '1', '/system/user', '', 'C', '0', 'system:user:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '用户管理菜单');
|
insert into sys_menu values('100', '用户管理', '1', '1', '/system/user', '', 'C', '0', 'system:user:view', 'fa fa-user-o', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '用户管理菜单');
|
||||||
insert into sys_menu values('101', '角色管理', '1', '2', '/system/role', '', 'C', '0', 'system:role:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '角色管理菜单');
|
insert into sys_menu values('101', '角色管理', '1', '2', '/system/role', '', 'C', '0', 'system:role:view', 'fa fa-user-secret', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '角色管理菜单');
|
||||||
insert into sys_menu values('102', '菜单管理', '1', '3', '/system/menu', '', 'C', '0', 'system:menu:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '菜单管理菜单');
|
insert into sys_menu values('102', '菜单管理', '1', '3', '/system/menu', '', 'C', '0', 'system:menu:view', 'fa fa-th-list', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '菜单管理菜单');
|
||||||
insert into sys_menu values('103', '部门管理', '1', '4', '/system/dept', '', 'C', '0', 'system:dept:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '部门管理菜单');
|
insert into sys_menu values('103', '部门管理', '1', '4', '/system/dept', '', 'C', '0', 'system:dept:view', 'fa fa-outdent', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '部门管理菜单');
|
||||||
insert into sys_menu values('104', '岗位管理', '1', '5', '/system/post', '', 'C', '0', 'system:post:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '岗位管理菜单');
|
insert into sys_menu values('104', '岗位管理', '1', '5', '/system/post', '', 'C', '0', 'system:post:view', 'fa fa-address-card-o', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '岗位管理菜单');
|
||||||
insert into sys_menu values('105', '字典管理', '1', '6', '/system/dict', '', 'C', '0', 'system:dict:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '字典管理菜单');
|
insert into sys_menu values('105', '字典管理', '1', '6', '/system/dict', '', 'C', '0', 'system:dict:view', 'fa fa-bookmark-o', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '字典管理菜单');
|
||||||
insert into sys_menu values('106', '参数设置', '1', '7', '/system/config', '', 'C', '0', 'system:config:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '参数设置菜单');
|
insert into sys_menu values('106', '参数设置', '1', '7', '/system/config', '', 'C', '0', 'system:config:view', 'fa fa-sun-o', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '参数设置菜单');
|
||||||
insert into sys_menu values('107', '通知公告', '1', '8', '/system/notice', '', 'C', '0', 'system:notice:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '通知公告菜单');
|
insert into sys_menu values('107', '通知公告', '1', '8', '/system/notice', '', 'C', '0', 'system:notice:view', 'fa fa-bullhorn', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '通知公告菜单');
|
||||||
insert into sys_menu values('108', '日志管理', '1', '9', '#', '', 'M', '0', '', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '日志管理菜单');
|
insert into sys_menu values('108', '日志管理', '1', '9', '#', '', 'M', '0', '', 'fa fa-pencil-square-o', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '日志管理菜单');
|
||||||
insert into sys_menu values('109', '在线用户', '2', '1', '/monitor/online', '', 'C', '0', 'monitor:online:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '在线用户菜单');
|
insert into sys_menu values('109', '在线用户', '2', '1', '/monitor/online', '', 'C', '0', 'monitor:online:view', 'fa fa-user-circle', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '在线用户菜单');
|
||||||
insert into sys_menu values('110', '定时任务', '2', '2', '/monitor/job', '', 'C', '0', 'monitor:job:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '定时任务菜单');
|
insert into sys_menu values('110', '定时任务', '2', '2', '/monitor/job', '', 'C', '0', 'monitor:job:view', 'fa fa-tasks', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '定时任务菜单');
|
||||||
insert into sys_menu values('111', '数据监控', '2', '3', '/monitor/data', '', 'C', '0', 'monitor:data:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '数据监控菜单');
|
insert into sys_menu values('111', '数据监控', '2', '3', '/monitor/data', '', 'C', '0', 'monitor:data:view', 'fa fa-bug', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '数据监控菜单');
|
||||||
insert into sys_menu values('112', '服务监控', '2', '3', '/monitor/server', '', 'C', '0', 'monitor:server:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '服务监控菜单');
|
insert into sys_menu values('112', '服务监控', '2', '3', '/monitor/server', '', 'C', '0', 'monitor:server:view', 'fa fa-server', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '服务监控菜单');
|
||||||
insert into sys_menu values('113', '表单构建', '3', '1', '/tool/build', '', 'C', '0', 'tool:build:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '表单构建菜单');
|
insert into sys_menu values('113', '表单构建', '3', '1', '/tool/build', '', 'C', '0', 'tool:build:view', 'fa fa-wpforms', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '表单构建菜单');
|
||||||
insert into sys_menu values('114', '代码生成', '3', '2', '/tool/gen', '', 'C', '0', 'tool:gen:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '代码生成菜单');
|
insert into sys_menu values('114', '代码生成', '3', '2', '/tool/gen', '', 'C', '0', 'tool:gen:view', 'fa fa-code', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '代码生成菜单');
|
||||||
insert into sys_menu values('115', '系统接口', '3', '3', '/tool/swagger', '', 'C', '0', 'tool:swagger:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统接口菜单');
|
insert into sys_menu values('115', '系统接口', '3', '3', '/tool/swagger', '', 'C', '0', 'tool:swagger:view', 'fa fa-gg', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统接口菜单');
|
||||||
-- 三级菜单
|
-- 三级菜单
|
||||||
insert into sys_menu values('500', '操作日志', '108', '1', '/monitor/operlog', '', 'C', '0', 'monitor:operlog:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '操作日志菜单');
|
insert into sys_menu values('500', '操作日志', '108', '1', '/monitor/operlog', '', 'C', '0', 'monitor:operlog:view', 'fa fa-address-book', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '操作日志菜单');
|
||||||
insert into sys_menu values('501', '登录日志', '108', '2', '/monitor/logininfor', '', 'C', '0', 'monitor:logininfor:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '登录日志菜单');
|
insert into sys_menu values('501', '登录日志', '108', '2', '/monitor/logininfor', '', 'C', '0', 'monitor:logininfor:view', 'fa fa-file-image-o', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '登录日志菜单');
|
||||||
-- 用户管理按钮
|
-- 用户管理按钮
|
||||||
insert into sys_menu values('1000', '用户查询', '100', '1', '#', '', 'F', '0', 'system:user:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
|
insert into sys_menu values('1000', '用户查询', '100', '1', '#', '', 'F', '0', 'system:user:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
|
||||||
insert into sys_menu values('1001', '用户新增', '100', '2', '#', '', 'F', '0', 'system:user:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
|
insert into sys_menu values('1001', '用户新增', '100', '2', '#', '', 'F', '0', 'system:user:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
|
||||||
|
|
@ -276,6 +286,7 @@ create table sys_role_menu (
|
||||||
insert into sys_role_menu values ('2', '1');
|
insert into sys_role_menu values ('2', '1');
|
||||||
insert into sys_role_menu values ('2', '2');
|
insert into sys_role_menu values ('2', '2');
|
||||||
insert into sys_role_menu values ('2', '3');
|
insert into sys_role_menu values ('2', '3');
|
||||||
|
insert into sys_role_menu values ('2', '4');
|
||||||
insert into sys_role_menu values ('2', '100');
|
insert into sys_role_menu values ('2', '100');
|
||||||
insert into sys_role_menu values ('2', '101');
|
insert into sys_role_menu values ('2', '101');
|
||||||
insert into sys_role_menu values ('2', '102');
|
insert into sys_role_menu values ('2', '102');
|
||||||
|
|
@ -488,17 +499,18 @@ insert into sys_dict_data values(14, 1, '通知', '1', 'sys_notice_ty
|
||||||
insert into sys_dict_data values(15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '公告');
|
insert into sys_dict_data values(15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '公告');
|
||||||
insert into sys_dict_data values(16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '正常状态');
|
insert into sys_dict_data values(16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '正常状态');
|
||||||
insert into sys_dict_data values(17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '关闭状态');
|
insert into sys_dict_data values(17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '关闭状态');
|
||||||
insert into sys_dict_data values(18, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '新增操作');
|
insert into sys_dict_data values(18, 99, '其他', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '其他操作');
|
||||||
insert into sys_dict_data values(19, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '修改操作');
|
insert into sys_dict_data values(19, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '新增操作');
|
||||||
insert into sys_dict_data values(20, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '删除操作');
|
insert into sys_dict_data values(20, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '修改操作');
|
||||||
insert into sys_dict_data values(21, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '授权操作');
|
insert into sys_dict_data values(21, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '删除操作');
|
||||||
insert into sys_dict_data values(22, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '导出操作');
|
insert into sys_dict_data values(22, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '授权操作');
|
||||||
insert into sys_dict_data values(23, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '导入操作');
|
insert into sys_dict_data values(23, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '导出操作');
|
||||||
insert into sys_dict_data values(24, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '强退操作');
|
insert into sys_dict_data values(24, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '导入操作');
|
||||||
insert into sys_dict_data values(25, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '生成操作');
|
insert into sys_dict_data values(25, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '强退操作');
|
||||||
insert into sys_dict_data values(26, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '清空操作');
|
insert into sys_dict_data values(26, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '生成操作');
|
||||||
insert into sys_dict_data values(27, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '正常状态');
|
insert into sys_dict_data values(27, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '清空操作');
|
||||||
insert into sys_dict_data values(28, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '停用状态');
|
insert into sys_dict_data values(28, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '正常状态');
|
||||||
|
insert into sys_dict_data values(29, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '停用状态');
|
||||||
|
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
|
|
@ -521,7 +533,11 @@ create table sys_config (
|
||||||
|
|
||||||
insert into sys_config values(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow');
|
insert into sys_config values(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow');
|
||||||
insert into sys_config values(2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '初始化密码 123456');
|
insert into sys_config values(2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '初始化密码 123456');
|
||||||
insert into sys_config values(3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '深色主题theme-dark,浅色主题theme-light' );
|
insert into sys_config values(3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '深黑主题theme-dark,浅色主题theme-light,深蓝主题theme-blue');
|
||||||
|
insert into sys_config values(4, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '是否开启注册用户功能(true开启,false关闭)');
|
||||||
|
insert into sys_config values(5, '用户管理-密码字符范围', 'sys.account.chrtype', '0', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '默认任意字符范围,0任意(密码可以输入任意字符),1数字(密码只能为0-9数字),2英文字母(密码只能为a-z和A-Z字母),3字母和数字(密码必须包含字母,数字),4字母数组和特殊字符(密码必须包含字母,数字,特殊字符-_)');
|
||||||
|
insert into sys_config values(6, '主框架页-菜单导航显示风格', 'sys.index.menuStyle', 'default', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '菜单导航显示风格(default为左侧导航菜单,topnav为顶部导航菜单)');
|
||||||
|
insert into sys_config values(7, '主框架页-是否开启页脚', 'sys.index.ignoreFooter', 'true', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '是否开启底部页脚显示(true显示,false隐藏)');
|
||||||
|
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
|
|
@ -547,7 +563,7 @@ create table sys_logininfor (
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
drop table if exists sys_user_online;
|
drop table if exists sys_user_online;
|
||||||
create table sys_user_online (
|
create table sys_user_online (
|
||||||
session_id varchar(50) default '' comment '用户会话id',
|
sessionId varchar(50) default '' comment '用户会话id',
|
||||||
login_name varchar(50) default '' comment '登录账号',
|
login_name varchar(50) default '' comment '登录账号',
|
||||||
dept_name varchar(50) default '' comment '部门名称',
|
dept_name varchar(50) default '' comment '部门名称',
|
||||||
ipaddr varchar(50) default '' comment '登录IP地址',
|
ipaddr varchar(50) default '' comment '登录IP地址',
|
||||||
|
|
@ -558,7 +574,7 @@ create table sys_user_online (
|
||||||
start_timestamp datetime comment 'session创建时间',
|
start_timestamp datetime comment 'session创建时间',
|
||||||
last_access_time datetime comment 'session最后访问时间',
|
last_access_time datetime comment 'session最后访问时间',
|
||||||
expire_time int(5) default 0 comment '超时时间,单位为分钟',
|
expire_time int(5) default 0 comment '超时时间,单位为分钟',
|
||||||
primary key (session_id)
|
primary key (sessionId)
|
||||||
) engine=innodb comment = '在线用户记录';
|
) engine=innodb comment = '在线用户记录';
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -638,13 +654,17 @@ create table gen_table (
|
||||||
table_id bigint(20) not null auto_increment comment '编号',
|
table_id bigint(20) not null auto_increment comment '编号',
|
||||||
table_name varchar(200) default '' comment '表名称',
|
table_name varchar(200) default '' comment '表名称',
|
||||||
table_comment varchar(500) default '' comment '表描述',
|
table_comment varchar(500) default '' comment '表描述',
|
||||||
|
sub_table_name varchar(64) default null comment '关联子表的表名',
|
||||||
|
sub_table_fk_name varchar(64) default null comment '子表关联的外键名',
|
||||||
class_name varchar(100) default '' comment '实体类名称',
|
class_name varchar(100) default '' comment '实体类名称',
|
||||||
tpl_category varchar(200) default 'crud' comment '使用的模板(crud单表操作 tree树表操作)',
|
tpl_category varchar(200) default 'crud' comment '使用的模板(crud单表操作 tree树表操作 sub主子表操作)',
|
||||||
package_name varchar(100) comment '生成包路径',
|
package_name varchar(100) comment '生成包路径',
|
||||||
module_name varchar(30) comment '生成模块名',
|
module_name varchar(30) comment '生成模块名',
|
||||||
business_name varchar(30) comment '生成业务名',
|
business_name varchar(30) comment '生成业务名',
|
||||||
function_name varchar(50) comment '生成功能名',
|
function_name varchar(50) comment '生成功能名',
|
||||||
function_author varchar(50) comment '生成功能作者',
|
function_author varchar(50) comment '生成功能作者',
|
||||||
|
gen_type char(1) default '0' comment '生成代码方式(0zip压缩包 1自定义路径)',
|
||||||
|
gen_path varchar(200) default '/' comment '生成路径(不填默认项目路径)',
|
||||||
options varchar(1000) comment '其它生成选项',
|
options varchar(1000) comment '其它生成选项',
|
||||||
create_by varchar(64) default '' comment '创建者',
|
create_by varchar(64) default '' comment '创建者',
|
||||||
create_time datetime comment '创建时间',
|
create_time datetime comment '创建时间',
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,30 @@
|
||||||
statistics="true">
|
statistics="true">
|
||||||
</cache>
|
</cache>
|
||||||
|
|
||||||
|
<!-- 系统缓存 -->
|
||||||
|
<cache name="sys-cache"
|
||||||
|
maxEntriesLocalHeap="1000"
|
||||||
|
eternal="true"
|
||||||
|
overflowToDisk="true"
|
||||||
|
statistics="true">
|
||||||
|
</cache>
|
||||||
|
|
||||||
|
<!-- 系统参数缓存 -->
|
||||||
|
<cache name="sys-config"
|
||||||
|
maxEntriesLocalHeap="1000"
|
||||||
|
eternal="true"
|
||||||
|
overflowToDisk="true"
|
||||||
|
statistics="true">
|
||||||
|
</cache>
|
||||||
|
|
||||||
|
<!-- 系统字典缓存 -->
|
||||||
|
<cache name="sys-dict"
|
||||||
|
maxEntriesLocalHeap="1000"
|
||||||
|
eternal="true"
|
||||||
|
overflowToDisk="true"
|
||||||
|
statistics="true">
|
||||||
|
</cache>
|
||||||
|
|
||||||
<!-- 系统会话缓存 -->
|
<!-- 系统会话缓存 -->
|
||||||
<cache name="shiro-activeSessionCache"
|
<cache name="shiro-activeSessionCache"
|
||||||
maxElementsInMemory="10000"
|
maxElementsInMemory="10000"
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
|
@ -1,211 +0,0 @@
|
||||||
/**
|
|
||||||
* @author: aperez <aperez@datadec.es>
|
|
||||||
* @version: v2.0.0
|
|
||||||
*
|
|
||||||
* @update Dennis Hernández <http://djhvscf.github.io/Blog>
|
|
||||||
*/
|
|
||||||
|
|
||||||
!function($) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var firstLoad = false;
|
|
||||||
|
|
||||||
var sprintf = $.fn.bootstrapTable.utils.sprintf;
|
|
||||||
|
|
||||||
var showAvdSearch = function(pColumns, searchTitle, searchText, that) {
|
|
||||||
if (!$("#avdSearchModal" + "_" + that.options.idTable).hasClass("modal")) {
|
|
||||||
var vModal = sprintf("<div id=\"avdSearchModal%s\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"mySmallModalLabel\" aria-hidden=\"true\">", "_" + that.options.idTable);
|
|
||||||
vModal += "<div class=\"modal-dialog modal-xs\">";
|
|
||||||
vModal += " <div class=\"modal-content\">";
|
|
||||||
vModal += " <div class=\"modal-header\">";
|
|
||||||
vModal += " <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\" >×</button>";
|
|
||||||
vModal += sprintf(" <h4 class=\"modal-title\">%s</h4>", searchTitle);
|
|
||||||
vModal += " </div>";
|
|
||||||
vModal += " <div class=\"modal-body modal-body-custom\">";
|
|
||||||
vModal += sprintf(" <div class=\"container-fluid\" id=\"avdSearchModalContent%s\" style=\"padding-right: 0px;padding-left: 0px;\" >", "_" + that.options.idTable);
|
|
||||||
vModal += " </div>";
|
|
||||||
vModal += " </div>";
|
|
||||||
vModal += " </div>";
|
|
||||||
vModal += " </div>";
|
|
||||||
vModal += "</div>";
|
|
||||||
|
|
||||||
$("body").append($(vModal));
|
|
||||||
|
|
||||||
var vFormAvd = createFormAvd(pColumns, searchText, that),
|
|
||||||
timeoutId = 0;;
|
|
||||||
|
|
||||||
$('#avdSearchModalContent' + "_" + that.options.idTable).append(vFormAvd.join(''));
|
|
||||||
|
|
||||||
$('#' + that.options.idForm).off('keyup blur', 'input').on('keyup blur', 'input', function (event) {
|
|
||||||
clearTimeout(timeoutId);
|
|
||||||
timeoutId = setTimeout(function () {
|
|
||||||
that.onColumnAdvancedSearch(event);
|
|
||||||
}, that.options.searchTimeOut);
|
|
||||||
});
|
|
||||||
|
|
||||||
$("#btnCloseAvd" + "_" + that.options.idTable).click(function() {
|
|
||||||
$("#avdSearchModal" + "_" + that.options.idTable).modal('hide');
|
|
||||||
});
|
|
||||||
|
|
||||||
$("#avdSearchModal" + "_" + that.options.idTable).modal();
|
|
||||||
} else {
|
|
||||||
$("#avdSearchModal" + "_" + that.options.idTable).modal();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var createFormAvd = function(pColumns, searchText, that) {
|
|
||||||
var htmlForm = [];
|
|
||||||
htmlForm.push(sprintf('<form class="form-horizontal" id="%s" action="%s" >', that.options.idForm, that.options.actionForm));
|
|
||||||
for (var i in pColumns) {
|
|
||||||
var vObjCol = pColumns[i];
|
|
||||||
if (!vObjCol.checkbox && vObjCol.visible && vObjCol.searchable) {
|
|
||||||
htmlForm.push('<div class="form-group">');
|
|
||||||
htmlForm.push(sprintf('<label class="col-sm-4 control-label">%s</label>', vObjCol.title));
|
|
||||||
htmlForm.push('<div class="col-sm-6">');
|
|
||||||
htmlForm.push(sprintf('<input type="text" class="form-control input-md" name="%s" placeholder="%s" id="%s">', vObjCol.field, vObjCol.title, vObjCol.field));
|
|
||||||
htmlForm.push('</div>');
|
|
||||||
htmlForm.push('</div>');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
htmlForm.push('<div class="form-group">');
|
|
||||||
htmlForm.push('<div class="col-sm-offset-9 col-sm-3">');
|
|
||||||
htmlForm.push(sprintf('<button type="button" id="btnCloseAvd%s" class="btn btn-default" >%s</button>', "_" + that.options.idTable, searchText));
|
|
||||||
htmlForm.push('</div>');
|
|
||||||
htmlForm.push('</div>');
|
|
||||||
htmlForm.push('</form>');
|
|
||||||
|
|
||||||
return htmlForm;
|
|
||||||
};
|
|
||||||
|
|
||||||
$.extend($.fn.bootstrapTable.defaults, {
|
|
||||||
advancedSearch: false,
|
|
||||||
idForm: 'advancedSearch',
|
|
||||||
actionForm: '',
|
|
||||||
idTable: undefined,
|
|
||||||
onColumnAdvancedSearch: function (field, text) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$.extend($.fn.bootstrapTable.defaults.icons, {
|
|
||||||
advancedSearchIcon: 'glyphicon-chevron-down'
|
|
||||||
});
|
|
||||||
|
|
||||||
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
|
|
||||||
'column-advanced-search.bs.table': 'onColumnAdvancedSearch'
|
|
||||||
});
|
|
||||||
|
|
||||||
$.extend($.fn.bootstrapTable.locales, {
|
|
||||||
formatAdvancedSearch: function() {
|
|
||||||
return 'Advanced search';
|
|
||||||
},
|
|
||||||
formatAdvancedCloseButton: function() {
|
|
||||||
return "Close";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales);
|
|
||||||
|
|
||||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
|
||||||
_initToolbar = BootstrapTable.prototype.initToolbar,
|
|
||||||
_load = BootstrapTable.prototype.load,
|
|
||||||
_initSearch = BootstrapTable.prototype.initSearch;
|
|
||||||
|
|
||||||
BootstrapTable.prototype.initToolbar = function() {
|
|
||||||
_initToolbar.apply(this, Array.prototype.slice.apply(arguments));
|
|
||||||
|
|
||||||
if (!this.options.search) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.options.advancedSearch) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.options.idTable) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var that = this,
|
|
||||||
html = [];
|
|
||||||
|
|
||||||
html.push(sprintf('<div class="columns columns-%s btn-group pull-%s" role="group">', this.options.buttonsAlign, this.options.buttonsAlign));
|
|
||||||
html.push(sprintf('<button class="btn btn-default%s' + '" type="button" name="advancedSearch" title="%s">', that.options.iconSize === undefined ? '' : ' btn-' + that.options.iconSize, that.options.formatAdvancedSearch()));
|
|
||||||
html.push(sprintf('<i class="%s %s"></i>', that.options.iconsPrefix, that.options.icons.advancedSearchIcon))
|
|
||||||
html.push('</button></div>');
|
|
||||||
|
|
||||||
that.$toolbar.prepend(html.join(''));
|
|
||||||
|
|
||||||
that.$toolbar.find('button[name="advancedSearch"]')
|
|
||||||
.off('click').on('click', function() {
|
|
||||||
showAvdSearch(that.columns, that.options.formatAdvancedSearch(), that.options.formatAdvancedCloseButton(), that);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
BootstrapTable.prototype.load = function(data) {
|
|
||||||
_load.apply(this, Array.prototype.slice.apply(arguments));
|
|
||||||
|
|
||||||
if (!this.options.advancedSearch) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof this.options.idTable === 'undefined') {
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
if (!firstLoad) {
|
|
||||||
var height = parseInt($(".bootstrap-table").height());
|
|
||||||
height += 10;
|
|
||||||
$("#" + this.options.idTable).bootstrapTable("resetView", {height: height});
|
|
||||||
firstLoad = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
BootstrapTable.prototype.initSearch = function () {
|
|
||||||
_initSearch.apply(this, Array.prototype.slice.apply(arguments));
|
|
||||||
|
|
||||||
if (!this.options.advancedSearch) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var that = this;
|
|
||||||
var fp = $.isEmptyObject(this.filterColumnsPartial) ? null : this.filterColumnsPartial;
|
|
||||||
|
|
||||||
this.data = fp ? $.grep(this.data, function (item, i) {
|
|
||||||
for (var key in fp) {
|
|
||||||
var fval = fp[key].toLowerCase();
|
|
||||||
var value = item[key];
|
|
||||||
value = $.fn.bootstrapTable.utils.calculateObjectValue(that.header,
|
|
||||||
that.header.formatters[$.inArray(key, that.header.fields)],
|
|
||||||
[value, item, i], value);
|
|
||||||
|
|
||||||
if (!($.inArray(key, that.header.fields) !== -1 &&
|
|
||||||
(typeof value === 'string' || typeof value === 'number') &&
|
|
||||||
(value + '').toLowerCase().indexOf(fval) !== -1)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}) : this.data;
|
|
||||||
};
|
|
||||||
|
|
||||||
BootstrapTable.prototype.onColumnAdvancedSearch = function (event) {
|
|
||||||
var text = $.trim($(event.currentTarget).val());
|
|
||||||
var $field = $(event.currentTarget)[0].id;
|
|
||||||
|
|
||||||
if ($.isEmptyObject(this.filterColumnsPartial)) {
|
|
||||||
this.filterColumnsPartial = {};
|
|
||||||
}
|
|
||||||
if (text) {
|
|
||||||
this.filterColumnsPartial[$field] = text;
|
|
||||||
} else {
|
|
||||||
delete this.filterColumnsPartial[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
this.options.pageNumber = 1;
|
|
||||||
this.onSearch(event);
|
|
||||||
this.updatePagination();
|
|
||||||
this.trigger('column-advanced-search', $field, text);
|
|
||||||
};
|
|
||||||
}(jQuery);
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
/*
|
|
||||||
* bootstrap-table - v1.11.0 - 2016-07-02
|
|
||||||
* https://github.com/wenzhixin/bootstrap-table
|
|
||||||
* Copyright (c) 2016 zhixin wen
|
|
||||||
* Licensed MIT License
|
|
||||||
*/
|
|
||||||
!function(a){"use strict";var b=!1,c=a.fn.bootstrapTable.utils.sprintf,d=function(b,d,f,g){if(a("#avdSearchModal_"+g.options.idTable).hasClass("modal"))a("#avdSearchModal_"+g.options.idTable).modal();else{var h=c('<div id="avdSearchModal%s" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">',"_"+g.options.idTable);h+='<div class="modal-dialog modal-xs">',h+=' <div class="modal-content">',h+=' <div class="modal-header">',h+=' <button type="button" class="close" data-dismiss="modal" aria-hidden="true" >×</button>',h+=c(' <h4 class="modal-title">%s</h4>',d),h+=" </div>",h+=' <div class="modal-body modal-body-custom">',h+=c(' <div class="container-fluid" id="avdSearchModalContent%s" style="padding-right: 0px;padding-left: 0px;" >',"_"+g.options.idTable),h+=" </div>",h+=" </div>",h+=" </div>",h+=" </div>",h+="</div>",a("body").append(a(h));var i=e(b,f,g),j=0;a("#avdSearchModalContent_"+g.options.idTable).append(i.join("")),a("#"+g.options.idForm).off("keyup blur","input").on("keyup blur","input",function(a){clearTimeout(j),j=setTimeout(function(){g.onColumnAdvancedSearch(a)},g.options.searchTimeOut)}),a("#btnCloseAvd_"+g.options.idTable).click(function(){a("#avdSearchModal_"+g.options.idTable).modal("hide")}),a("#avdSearchModal_"+g.options.idTable).modal()}},e=function(a,b,d){var e=[];e.push(c('<form class="form-horizontal" id="%s" action="%s" >',d.options.idForm,d.options.actionForm));for(var f in a){var g=a[f];!g.checkbox&&g.visible&&g.searchable&&(e.push('<div class="form-group">'),e.push(c('<label class="col-sm-4 control-label">%s</label>',g.title)),e.push('<div class="col-sm-6">'),e.push(c('<input type="text" class="form-control input-md" name="%s" placeholder="%s" id="%s">',g.field,g.title,g.field)),e.push("</div>"),e.push("</div>"))}return e.push('<div class="form-group">'),e.push('<div class="col-sm-offset-9 col-sm-3">'),e.push(c('<button type="button" id="btnCloseAvd%s" class="btn btn-default" >%s</button>',"_"+d.options.idTable,b)),e.push("</div>"),e.push("</div>"),e.push("</form>"),e};a.extend(a.fn.bootstrapTable.defaults,{advancedSearch:!1,idForm:"advancedSearch",actionForm:"",idTable:void 0,onColumnAdvancedSearch:function(){return!1}}),a.extend(a.fn.bootstrapTable.defaults.icons,{advancedSearchIcon:"glyphicon-chevron-down"}),a.extend(a.fn.bootstrapTable.Constructor.EVENTS,{"column-advanced-search.bs.table":"onColumnAdvancedSearch"}),a.extend(a.fn.bootstrapTable.locales,{formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"}}),a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales);var f=a.fn.bootstrapTable.Constructor,g=f.prototype.initToolbar,h=f.prototype.load,i=f.prototype.initSearch;f.prototype.initToolbar=function(){if(g.apply(this,Array.prototype.slice.apply(arguments)),this.options.search&&this.options.advancedSearch&&this.options.idTable){var a=this,b=[];b.push(c('<div class="columns columns-%s btn-group pull-%s" role="group">',this.options.buttonsAlign,this.options.buttonsAlign)),b.push(c('<button class="btn btn-default%s" type="button" name="advancedSearch" title="%s">',void 0===a.options.iconSize?"":" btn-"+a.options.iconSize,a.options.formatAdvancedSearch())),b.push(c('<i class="%s %s"></i>',a.options.iconsPrefix,a.options.icons.advancedSearchIcon)),b.push("</button></div>"),a.$toolbar.prepend(b.join("")),a.$toolbar.find('button[name="advancedSearch"]').off("click").on("click",function(){d(a.columns,a.options.formatAdvancedSearch(),a.options.formatAdvancedCloseButton(),a)})}},f.prototype.load=function(){if(h.apply(this,Array.prototype.slice.apply(arguments)),this.options.advancedSearch&&"undefined"!=typeof this.options.idTable&&!b){var c=parseInt(a(".bootstrap-table").height());c+=10,a("#"+this.options.idTable).bootstrapTable("resetView",{height:c}),b=!0}},f.prototype.initSearch=function(){if(i.apply(this,Array.prototype.slice.apply(arguments)),this.options.advancedSearch){var b=this,c=a.isEmptyObject(this.filterColumnsPartial)?null:this.filterColumnsPartial;this.data=c?a.grep(this.data,function(d,e){for(var f in c){var g=c[f].toLowerCase(),h=d[f];if(h=a.fn.bootstrapTable.utils.calculateObjectValue(b.header,b.header.formatters[a.inArray(f,b.header.fields)],[h,d,e],h),-1===a.inArray(f,b.header.fields)||"string"!=typeof h&&"number"!=typeof h||-1===(h+"").toLowerCase().indexOf(g))return!1}return!0}):this.data}},f.prototype.onColumnAdvancedSearch=function(b){var c=a.trim(a(b.currentTarget).val()),d=a(b.currentTarget)[0].id;a.isEmptyObject(this.filterColumnsPartial)&&(this.filterColumnsPartial={}),c?this.filterColumnsPartial[d]=c:delete this.filterColumnsPartial[d],this.options.pageNumber=1,this.onSearch(b),this.updatePagination(),this.trigger("column-advanced-search",d,c)}}(jQuery);
|
|
||||||
|
|
@ -1,42 +1,771 @@
|
||||||
(function ($) {
|
(function (global, factory) {
|
||||||
'use strict';
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :
|
||||||
|
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
|
||||||
|
(global = global || self, factory(global.jQuery));
|
||||||
|
}(this, (function ($) { 'use strict';
|
||||||
|
|
||||||
$.fn.bootstrapTable.locales['zh-CN'] = {
|
$ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;
|
||||||
formatLoadingMessage: function () {
|
|
||||||
return '正在努力地加载数据中,请稍候……';
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
||||||
},
|
|
||||||
formatRecordsPerPage: function (pageNumber) {
|
function createCommonjsModule(fn, module) {
|
||||||
return pageNumber + ' 条记录每页';
|
return module = { exports: {} }, fn(module, module.exports), module.exports;
|
||||||
},
|
}
|
||||||
formatShowingRows: function (pageFrom, pageTo, totalRows) {
|
|
||||||
return '第 ' + pageFrom + ' 到 ' + pageTo + ' 条,共 ' + totalRows + ' 条记录。';
|
var check = function (it) {
|
||||||
},
|
return it && it.Math == Math && it;
|
||||||
formatSearch: function () {
|
};
|
||||||
return '搜索';
|
|
||||||
},
|
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
|
||||||
formatNoMatches: function () {
|
var global_1 =
|
||||||
return '没有找到匹配的记录';
|
// eslint-disable-next-line no-undef
|
||||||
},
|
check(typeof globalThis == 'object' && globalThis) ||
|
||||||
formatPaginationSwitch: function () {
|
check(typeof window == 'object' && window) ||
|
||||||
return '隐藏/显示分页';
|
check(typeof self == 'object' && self) ||
|
||||||
},
|
check(typeof commonjsGlobal == 'object' && commonjsGlobal) ||
|
||||||
formatRefresh: function () {
|
// eslint-disable-next-line no-new-func
|
||||||
return '刷新';
|
Function('return this')();
|
||||||
},
|
|
||||||
formatToggle: function () {
|
var fails = function (exec) {
|
||||||
return '切换';
|
try {
|
||||||
},
|
return !!exec();
|
||||||
formatColumns: function () {
|
} catch (error) {
|
||||||
return '列';
|
return true;
|
||||||
},
|
|
||||||
formatExport: function () {
|
|
||||||
return '导出数据';
|
|
||||||
},
|
|
||||||
formatClearFilters: function () {
|
|
||||||
return '清空过滤';
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Thank's IE8 for his funny defineProperty
|
||||||
|
var descriptors = !fails(function () {
|
||||||
|
return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
|
||||||
|
});
|
||||||
|
|
||||||
|
var nativePropertyIsEnumerable = {}.propertyIsEnumerable;
|
||||||
|
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
||||||
|
|
||||||
|
// Nashorn ~ JDK8 bug
|
||||||
|
var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);
|
||||||
|
|
||||||
|
// `Object.prototype.propertyIsEnumerable` method implementation
|
||||||
|
// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable
|
||||||
|
var f = NASHORN_BUG ? function propertyIsEnumerable(V) {
|
||||||
|
var descriptor = getOwnPropertyDescriptor(this, V);
|
||||||
|
return !!descriptor && descriptor.enumerable;
|
||||||
|
} : nativePropertyIsEnumerable;
|
||||||
|
|
||||||
|
var objectPropertyIsEnumerable = {
|
||||||
|
f: f
|
||||||
|
};
|
||||||
|
|
||||||
|
var createPropertyDescriptor = function (bitmap, value) {
|
||||||
|
return {
|
||||||
|
enumerable: !(bitmap & 1),
|
||||||
|
configurable: !(bitmap & 2),
|
||||||
|
writable: !(bitmap & 4),
|
||||||
|
value: value
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var toString = {}.toString;
|
||||||
|
|
||||||
|
var classofRaw = function (it) {
|
||||||
|
return toString.call(it).slice(8, -1);
|
||||||
|
};
|
||||||
|
|
||||||
|
var split = ''.split;
|
||||||
|
|
||||||
|
// fallback for non-array-like ES3 and non-enumerable old V8 strings
|
||||||
|
var indexedObject = fails(function () {
|
||||||
|
// throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
|
||||||
|
// eslint-disable-next-line no-prototype-builtins
|
||||||
|
return !Object('z').propertyIsEnumerable(0);
|
||||||
|
}) ? function (it) {
|
||||||
|
return classofRaw(it) == 'String' ? split.call(it, '') : Object(it);
|
||||||
|
} : Object;
|
||||||
|
|
||||||
|
// `RequireObjectCoercible` abstract operation
|
||||||
|
// https://tc39.github.io/ecma262/#sec-requireobjectcoercible
|
||||||
|
var requireObjectCoercible = function (it) {
|
||||||
|
if (it == undefined) throw TypeError("Can't call method on " + it);
|
||||||
|
return it;
|
||||||
|
};
|
||||||
|
|
||||||
|
// toObject with fallback for non-array-like ES3 strings
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var toIndexedObject = function (it) {
|
||||||
|
return indexedObject(requireObjectCoercible(it));
|
||||||
|
};
|
||||||
|
|
||||||
|
var isObject = function (it) {
|
||||||
|
return typeof it === 'object' ? it !== null : typeof it === 'function';
|
||||||
|
};
|
||||||
|
|
||||||
|
// `ToPrimitive` abstract operation
|
||||||
|
// https://tc39.github.io/ecma262/#sec-toprimitive
|
||||||
|
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
|
||||||
|
// and the second argument - flag - preferred type is a string
|
||||||
|
var toPrimitive = function (input, PREFERRED_STRING) {
|
||||||
|
if (!isObject(input)) return input;
|
||||||
|
var fn, val;
|
||||||
|
if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
|
||||||
|
if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;
|
||||||
|
if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
|
||||||
|
throw TypeError("Can't convert object to primitive value");
|
||||||
|
};
|
||||||
|
|
||||||
|
var hasOwnProperty = {}.hasOwnProperty;
|
||||||
|
|
||||||
|
var has = function (it, key) {
|
||||||
|
return hasOwnProperty.call(it, key);
|
||||||
|
};
|
||||||
|
|
||||||
|
var document = global_1.document;
|
||||||
|
// typeof document.createElement is 'object' in old IE
|
||||||
|
var EXISTS = isObject(document) && isObject(document.createElement);
|
||||||
|
|
||||||
|
var documentCreateElement = function (it) {
|
||||||
|
return EXISTS ? document.createElement(it) : {};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Thank's IE8 for his funny defineProperty
|
||||||
|
var ie8DomDefine = !descriptors && !fails(function () {
|
||||||
|
return Object.defineProperty(documentCreateElement('div'), 'a', {
|
||||||
|
get: function () { return 7; }
|
||||||
|
}).a != 7;
|
||||||
|
});
|
||||||
|
|
||||||
|
var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
||||||
|
|
||||||
|
// `Object.getOwnPropertyDescriptor` method
|
||||||
|
// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor
|
||||||
|
var f$1 = descriptors ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
|
||||||
|
O = toIndexedObject(O);
|
||||||
|
P = toPrimitive(P, true);
|
||||||
|
if (ie8DomDefine) try {
|
||||||
|
return nativeGetOwnPropertyDescriptor(O, P);
|
||||||
|
} catch (error) { /* empty */ }
|
||||||
|
if (has(O, P)) return createPropertyDescriptor(!objectPropertyIsEnumerable.f.call(O, P), O[P]);
|
||||||
|
};
|
||||||
|
|
||||||
|
var objectGetOwnPropertyDescriptor = {
|
||||||
|
f: f$1
|
||||||
|
};
|
||||||
|
|
||||||
|
var anObject = function (it) {
|
||||||
|
if (!isObject(it)) {
|
||||||
|
throw TypeError(String(it) + ' is not an object');
|
||||||
|
} return it;
|
||||||
|
};
|
||||||
|
|
||||||
|
var nativeDefineProperty = Object.defineProperty;
|
||||||
|
|
||||||
|
// `Object.defineProperty` method
|
||||||
|
// https://tc39.github.io/ecma262/#sec-object.defineproperty
|
||||||
|
var f$2 = descriptors ? nativeDefineProperty : function defineProperty(O, P, Attributes) {
|
||||||
|
anObject(O);
|
||||||
|
P = toPrimitive(P, true);
|
||||||
|
anObject(Attributes);
|
||||||
|
if (ie8DomDefine) try {
|
||||||
|
return nativeDefineProperty(O, P, Attributes);
|
||||||
|
} catch (error) { /* empty */ }
|
||||||
|
if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');
|
||||||
|
if ('value' in Attributes) O[P] = Attributes.value;
|
||||||
|
return O;
|
||||||
|
};
|
||||||
|
|
||||||
|
var objectDefineProperty = {
|
||||||
|
f: f$2
|
||||||
|
};
|
||||||
|
|
||||||
|
var createNonEnumerableProperty = descriptors ? function (object, key, value) {
|
||||||
|
return objectDefineProperty.f(object, key, createPropertyDescriptor(1, value));
|
||||||
|
} : function (object, key, value) {
|
||||||
|
object[key] = value;
|
||||||
|
return object;
|
||||||
|
};
|
||||||
|
|
||||||
|
var setGlobal = function (key, value) {
|
||||||
|
try {
|
||||||
|
createNonEnumerableProperty(global_1, key, value);
|
||||||
|
} catch (error) {
|
||||||
|
global_1[key] = value;
|
||||||
|
} return value;
|
||||||
|
};
|
||||||
|
|
||||||
|
var SHARED = '__core-js_shared__';
|
||||||
|
var store = global_1[SHARED] || setGlobal(SHARED, {});
|
||||||
|
|
||||||
|
var sharedStore = store;
|
||||||
|
|
||||||
|
var functionToString = Function.toString;
|
||||||
|
|
||||||
|
// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper
|
||||||
|
if (typeof sharedStore.inspectSource != 'function') {
|
||||||
|
sharedStore.inspectSource = function (it) {
|
||||||
|
return functionToString.call(it);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var inspectSource = sharedStore.inspectSource;
|
||||||
|
|
||||||
|
var WeakMap = global_1.WeakMap;
|
||||||
|
|
||||||
|
var nativeWeakMap = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));
|
||||||
|
|
||||||
|
var shared = createCommonjsModule(function (module) {
|
||||||
|
(module.exports = function (key, value) {
|
||||||
|
return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {});
|
||||||
|
})('versions', []).push({
|
||||||
|
version: '3.6.0',
|
||||||
|
mode: 'global',
|
||||||
|
copyright: '© 2019 Denis Pushkarev (zloirock.ru)'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var id = 0;
|
||||||
|
var postfix = Math.random();
|
||||||
|
|
||||||
|
var uid = function (key) {
|
||||||
|
return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);
|
||||||
|
};
|
||||||
|
|
||||||
|
var keys = shared('keys');
|
||||||
|
|
||||||
|
var sharedKey = function (key) {
|
||||||
|
return keys[key] || (keys[key] = uid(key));
|
||||||
|
};
|
||||||
|
|
||||||
|
var hiddenKeys = {};
|
||||||
|
|
||||||
|
var WeakMap$1 = global_1.WeakMap;
|
||||||
|
var set, get, has$1;
|
||||||
|
|
||||||
|
var enforce = function (it) {
|
||||||
|
return has$1(it) ? get(it) : set(it, {});
|
||||||
|
};
|
||||||
|
|
||||||
|
var getterFor = function (TYPE) {
|
||||||
|
return function (it) {
|
||||||
|
var state;
|
||||||
|
if (!isObject(it) || (state = get(it)).type !== TYPE) {
|
||||||
|
throw TypeError('Incompatible receiver, ' + TYPE + ' required');
|
||||||
|
} return state;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
if (nativeWeakMap) {
|
||||||
|
var store$1 = new WeakMap$1();
|
||||||
|
var wmget = store$1.get;
|
||||||
|
var wmhas = store$1.has;
|
||||||
|
var wmset = store$1.set;
|
||||||
|
set = function (it, metadata) {
|
||||||
|
wmset.call(store$1, it, metadata);
|
||||||
|
return metadata;
|
||||||
|
};
|
||||||
|
get = function (it) {
|
||||||
|
return wmget.call(store$1, it) || {};
|
||||||
|
};
|
||||||
|
has$1 = function (it) {
|
||||||
|
return wmhas.call(store$1, it);
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
var STATE = sharedKey('state');
|
||||||
|
hiddenKeys[STATE] = true;
|
||||||
|
set = function (it, metadata) {
|
||||||
|
createNonEnumerableProperty(it, STATE, metadata);
|
||||||
|
return metadata;
|
||||||
|
};
|
||||||
|
get = function (it) {
|
||||||
|
return has(it, STATE) ? it[STATE] : {};
|
||||||
|
};
|
||||||
|
has$1 = function (it) {
|
||||||
|
return has(it, STATE);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var internalState = {
|
||||||
|
set: set,
|
||||||
|
get: get,
|
||||||
|
has: has$1,
|
||||||
|
enforce: enforce,
|
||||||
|
getterFor: getterFor
|
||||||
|
};
|
||||||
|
|
||||||
|
var redefine = createCommonjsModule(function (module) {
|
||||||
|
var getInternalState = internalState.get;
|
||||||
|
var enforceInternalState = internalState.enforce;
|
||||||
|
var TEMPLATE = String(String).split('String');
|
||||||
|
|
||||||
|
(module.exports = function (O, key, value, options) {
|
||||||
|
var unsafe = options ? !!options.unsafe : false;
|
||||||
|
var simple = options ? !!options.enumerable : false;
|
||||||
|
var noTargetGet = options ? !!options.noTargetGet : false;
|
||||||
|
if (typeof value == 'function') {
|
||||||
|
if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);
|
||||||
|
enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');
|
||||||
|
}
|
||||||
|
if (O === global_1) {
|
||||||
|
if (simple) O[key] = value;
|
||||||
|
else setGlobal(key, value);
|
||||||
|
return;
|
||||||
|
} else if (!unsafe) {
|
||||||
|
delete O[key];
|
||||||
|
} else if (!noTargetGet && O[key]) {
|
||||||
|
simple = true;
|
||||||
|
}
|
||||||
|
if (simple) O[key] = value;
|
||||||
|
else createNonEnumerableProperty(O, key, value);
|
||||||
|
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
|
||||||
|
})(Function.prototype, 'toString', function toString() {
|
||||||
|
return typeof this == 'function' && getInternalState(this).source || inspectSource(this);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var path = global_1;
|
||||||
|
|
||||||
|
var aFunction = function (variable) {
|
||||||
|
return typeof variable == 'function' ? variable : undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
var getBuiltIn = function (namespace, method) {
|
||||||
|
return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global_1[namespace])
|
||||||
|
: path[namespace] && path[namespace][method] || global_1[namespace] && global_1[namespace][method];
|
||||||
|
};
|
||||||
|
|
||||||
|
var ceil = Math.ceil;
|
||||||
|
var floor = Math.floor;
|
||||||
|
|
||||||
|
// `ToInteger` abstract operation
|
||||||
|
// https://tc39.github.io/ecma262/#sec-tointeger
|
||||||
|
var toInteger = function (argument) {
|
||||||
|
return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
|
||||||
|
};
|
||||||
|
|
||||||
|
var min = Math.min;
|
||||||
|
|
||||||
|
// `ToLength` abstract operation
|
||||||
|
// https://tc39.github.io/ecma262/#sec-tolength
|
||||||
|
var toLength = function (argument) {
|
||||||
|
return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
|
||||||
|
};
|
||||||
|
|
||||||
|
var max = Math.max;
|
||||||
|
var min$1 = Math.min;
|
||||||
|
|
||||||
|
// Helper for a popular repeating case of the spec:
|
||||||
|
// Let integer be ? ToInteger(index).
|
||||||
|
// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
|
||||||
|
var toAbsoluteIndex = function (index, length) {
|
||||||
|
var integer = toInteger(index);
|
||||||
|
return integer < 0 ? max(integer + length, 0) : min$1(integer, length);
|
||||||
|
};
|
||||||
|
|
||||||
|
// `Array.prototype.{ indexOf, includes }` methods implementation
|
||||||
|
var createMethod = function (IS_INCLUDES) {
|
||||||
|
return function ($this, el, fromIndex) {
|
||||||
|
var O = toIndexedObject($this);
|
||||||
|
var length = toLength(O.length);
|
||||||
|
var index = toAbsoluteIndex(fromIndex, length);
|
||||||
|
var value;
|
||||||
|
// Array#includes uses SameValueZero equality algorithm
|
||||||
|
// eslint-disable-next-line no-self-compare
|
||||||
|
if (IS_INCLUDES && el != el) while (length > index) {
|
||||||
|
value = O[index++];
|
||||||
|
// eslint-disable-next-line no-self-compare
|
||||||
|
if (value != value) return true;
|
||||||
|
// Array#indexOf ignores holes, Array#includes - not
|
||||||
|
} else for (;length > index; index++) {
|
||||||
|
if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
|
||||||
|
} return !IS_INCLUDES && -1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var arrayIncludes = {
|
||||||
|
// `Array.prototype.includes` method
|
||||||
|
// https://tc39.github.io/ecma262/#sec-array.prototype.includes
|
||||||
|
includes: createMethod(true),
|
||||||
|
// `Array.prototype.indexOf` method
|
||||||
|
// https://tc39.github.io/ecma262/#sec-array.prototype.indexof
|
||||||
|
indexOf: createMethod(false)
|
||||||
|
};
|
||||||
|
|
||||||
|
var indexOf = arrayIncludes.indexOf;
|
||||||
|
|
||||||
|
|
||||||
|
var objectKeysInternal = function (object, names) {
|
||||||
|
var O = toIndexedObject(object);
|
||||||
|
var i = 0;
|
||||||
|
var result = [];
|
||||||
|
var key;
|
||||||
|
for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);
|
||||||
|
// Don't enum bug & hidden keys
|
||||||
|
while (names.length > i) if (has(O, key = names[i++])) {
|
||||||
|
~indexOf(result, key) || result.push(key);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
// IE8- don't enum bug keys
|
||||||
|
var enumBugKeys = [
|
||||||
|
'constructor',
|
||||||
|
'hasOwnProperty',
|
||||||
|
'isPrototypeOf',
|
||||||
|
'propertyIsEnumerable',
|
||||||
|
'toLocaleString',
|
||||||
|
'toString',
|
||||||
|
'valueOf'
|
||||||
|
];
|
||||||
|
|
||||||
|
var hiddenKeys$1 = enumBugKeys.concat('length', 'prototype');
|
||||||
|
|
||||||
|
// `Object.getOwnPropertyNames` method
|
||||||
|
// https://tc39.github.io/ecma262/#sec-object.getownpropertynames
|
||||||
|
var f$3 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
|
||||||
|
return objectKeysInternal(O, hiddenKeys$1);
|
||||||
|
};
|
||||||
|
|
||||||
|
var objectGetOwnPropertyNames = {
|
||||||
|
f: f$3
|
||||||
|
};
|
||||||
|
|
||||||
|
var f$4 = Object.getOwnPropertySymbols;
|
||||||
|
|
||||||
|
var objectGetOwnPropertySymbols = {
|
||||||
|
f: f$4
|
||||||
|
};
|
||||||
|
|
||||||
|
// all object keys, includes non-enumerable and symbols
|
||||||
|
var ownKeys = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {
|
||||||
|
var keys = objectGetOwnPropertyNames.f(anObject(it));
|
||||||
|
var getOwnPropertySymbols = objectGetOwnPropertySymbols.f;
|
||||||
|
return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;
|
||||||
|
};
|
||||||
|
|
||||||
|
var copyConstructorProperties = function (target, source) {
|
||||||
|
var keys = ownKeys(source);
|
||||||
|
var defineProperty = objectDefineProperty.f;
|
||||||
|
var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
|
||||||
|
for (var i = 0; i < keys.length; i++) {
|
||||||
|
var key = keys[i];
|
||||||
|
if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var replacement = /#|\.prototype\./;
|
||||||
|
|
||||||
|
var isForced = function (feature, detection) {
|
||||||
|
var value = data[normalize(feature)];
|
||||||
|
return value == POLYFILL ? true
|
||||||
|
: value == NATIVE ? false
|
||||||
|
: typeof detection == 'function' ? fails(detection)
|
||||||
|
: !!detection;
|
||||||
|
};
|
||||||
|
|
||||||
|
var normalize = isForced.normalize = function (string) {
|
||||||
|
return String(string).replace(replacement, '.').toLowerCase();
|
||||||
|
};
|
||||||
|
|
||||||
|
var data = isForced.data = {};
|
||||||
|
var NATIVE = isForced.NATIVE = 'N';
|
||||||
|
var POLYFILL = isForced.POLYFILL = 'P';
|
||||||
|
|
||||||
|
var isForced_1 = isForced;
|
||||||
|
|
||||||
|
var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
options.target - name of the target object
|
||||||
|
options.global - target is the global object
|
||||||
|
options.stat - export as static methods of target
|
||||||
|
options.proto - export as prototype methods of target
|
||||||
|
options.real - real prototype method for the `pure` version
|
||||||
|
options.forced - export even if the native feature is available
|
||||||
|
options.bind - bind methods to the target, required for the `pure` version
|
||||||
|
options.wrap - wrap constructors to preventing global pollution, required for the `pure` version
|
||||||
|
options.unsafe - use the simple assignment of property instead of delete + defineProperty
|
||||||
|
options.sham - add a flag to not completely full polyfills
|
||||||
|
options.enumerable - export as enumerable property
|
||||||
|
options.noTargetGet - prevent calling a getter on target
|
||||||
|
*/
|
||||||
|
var _export = function (options, source) {
|
||||||
|
var TARGET = options.target;
|
||||||
|
var GLOBAL = options.global;
|
||||||
|
var STATIC = options.stat;
|
||||||
|
var FORCED, target, key, targetProperty, sourceProperty, descriptor;
|
||||||
|
if (GLOBAL) {
|
||||||
|
target = global_1;
|
||||||
|
} else if (STATIC) {
|
||||||
|
target = global_1[TARGET] || setGlobal(TARGET, {});
|
||||||
|
} else {
|
||||||
|
target = (global_1[TARGET] || {}).prototype;
|
||||||
|
}
|
||||||
|
if (target) for (key in source) {
|
||||||
|
sourceProperty = source[key];
|
||||||
|
if (options.noTargetGet) {
|
||||||
|
descriptor = getOwnPropertyDescriptor$1(target, key);
|
||||||
|
targetProperty = descriptor && descriptor.value;
|
||||||
|
} else targetProperty = target[key];
|
||||||
|
FORCED = isForced_1(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
|
||||||
|
// contained in target
|
||||||
|
if (!FORCED && targetProperty !== undefined) {
|
||||||
|
if (typeof sourceProperty === typeof targetProperty) continue;
|
||||||
|
copyConstructorProperties(sourceProperty, targetProperty);
|
||||||
|
}
|
||||||
|
// add a flag to not completely full polyfills
|
||||||
|
if (options.sham || (targetProperty && targetProperty.sham)) {
|
||||||
|
createNonEnumerableProperty(sourceProperty, 'sham', true);
|
||||||
|
}
|
||||||
|
// extend global
|
||||||
|
redefine(target, key, sourceProperty, options);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// `IsArray` abstract operation
|
||||||
|
// https://tc39.github.io/ecma262/#sec-isarray
|
||||||
|
var isArray = Array.isArray || function isArray(arg) {
|
||||||
|
return classofRaw(arg) == 'Array';
|
||||||
|
};
|
||||||
|
|
||||||
|
// `ToObject` abstract operation
|
||||||
|
// https://tc39.github.io/ecma262/#sec-toobject
|
||||||
|
var toObject = function (argument) {
|
||||||
|
return Object(requireObjectCoercible(argument));
|
||||||
|
};
|
||||||
|
|
||||||
|
var createProperty = function (object, key, value) {
|
||||||
|
var propertyKey = toPrimitive(key);
|
||||||
|
if (propertyKey in object) objectDefineProperty.f(object, propertyKey, createPropertyDescriptor(0, value));
|
||||||
|
else object[propertyKey] = value;
|
||||||
|
};
|
||||||
|
|
||||||
|
var nativeSymbol = !!Object.getOwnPropertySymbols && !fails(function () {
|
||||||
|
// Chrome 38 Symbol has incorrect toString conversion
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
return !String(Symbol());
|
||||||
|
});
|
||||||
|
|
||||||
|
var useSymbolAsUid = nativeSymbol
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
&& !Symbol.sham
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
&& typeof Symbol() == 'symbol';
|
||||||
|
|
||||||
|
var WellKnownSymbolsStore = shared('wks');
|
||||||
|
var Symbol$1 = global_1.Symbol;
|
||||||
|
var createWellKnownSymbol = useSymbolAsUid ? Symbol$1 : uid;
|
||||||
|
|
||||||
|
var wellKnownSymbol = function (name) {
|
||||||
|
if (!has(WellKnownSymbolsStore, name)) {
|
||||||
|
if (nativeSymbol && has(Symbol$1, name)) WellKnownSymbolsStore[name] = Symbol$1[name];
|
||||||
|
else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
|
||||||
|
} return WellKnownSymbolsStore[name];
|
||||||
|
};
|
||||||
|
|
||||||
|
var SPECIES = wellKnownSymbol('species');
|
||||||
|
|
||||||
|
// `ArraySpeciesCreate` abstract operation
|
||||||
|
// https://tc39.github.io/ecma262/#sec-arrayspeciescreate
|
||||||
|
var arraySpeciesCreate = function (originalArray, length) {
|
||||||
|
var C;
|
||||||
|
if (isArray(originalArray)) {
|
||||||
|
C = originalArray.constructor;
|
||||||
|
// cross-realm fallback
|
||||||
|
if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
|
||||||
|
else if (isObject(C)) {
|
||||||
|
C = C[SPECIES];
|
||||||
|
if (C === null) C = undefined;
|
||||||
|
}
|
||||||
|
} return new (C === undefined ? Array : C)(length === 0 ? 0 : length);
|
||||||
|
};
|
||||||
|
|
||||||
|
var userAgent = getBuiltIn('navigator', 'userAgent') || '';
|
||||||
|
|
||||||
|
var process = global_1.process;
|
||||||
|
var versions = process && process.versions;
|
||||||
|
var v8 = versions && versions.v8;
|
||||||
|
var match, version;
|
||||||
|
|
||||||
|
if (v8) {
|
||||||
|
match = v8.split('.');
|
||||||
|
version = match[0] + match[1];
|
||||||
|
} else if (userAgent) {
|
||||||
|
match = userAgent.match(/Edge\/(\d+)/);
|
||||||
|
if (!match || match[1] >= 74) {
|
||||||
|
match = userAgent.match(/Chrome\/(\d+)/);
|
||||||
|
if (match) version = match[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var v8Version = version && +version;
|
||||||
|
|
||||||
|
var SPECIES$1 = wellKnownSymbol('species');
|
||||||
|
|
||||||
|
var arrayMethodHasSpeciesSupport = function (METHOD_NAME) {
|
||||||
|
// We can't use this feature detection in V8 since it causes
|
||||||
|
// deoptimization and serious performance degradation
|
||||||
|
// https://github.com/zloirock/core-js/issues/677
|
||||||
|
return v8Version >= 51 || !fails(function () {
|
||||||
|
var array = [];
|
||||||
|
var constructor = array.constructor = {};
|
||||||
|
constructor[SPECIES$1] = function () {
|
||||||
|
return { foo: 1 };
|
||||||
|
};
|
||||||
|
return array[METHOD_NAME](Boolean).foo !== 1;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');
|
||||||
|
var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;
|
||||||
|
var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';
|
||||||
|
|
||||||
|
// We can't use this feature detection in V8 since it causes
|
||||||
|
// deoptimization and serious performance degradation
|
||||||
|
// https://github.com/zloirock/core-js/issues/679
|
||||||
|
var IS_CONCAT_SPREADABLE_SUPPORT = v8Version >= 51 || !fails(function () {
|
||||||
|
var array = [];
|
||||||
|
array[IS_CONCAT_SPREADABLE] = false;
|
||||||
|
return array.concat()[0] !== array;
|
||||||
|
});
|
||||||
|
|
||||||
|
var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');
|
||||||
|
|
||||||
|
var isConcatSpreadable = function (O) {
|
||||||
|
if (!isObject(O)) return false;
|
||||||
|
var spreadable = O[IS_CONCAT_SPREADABLE];
|
||||||
|
return spreadable !== undefined ? !!spreadable : isArray(O);
|
||||||
|
};
|
||||||
|
|
||||||
|
var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;
|
||||||
|
|
||||||
|
// `Array.prototype.concat` method
|
||||||
|
// https://tc39.github.io/ecma262/#sec-array.prototype.concat
|
||||||
|
// with adding support of @@isConcatSpreadable and @@species
|
||||||
|
_export({ target: 'Array', proto: true, forced: FORCED }, {
|
||||||
|
concat: function concat(arg) { // eslint-disable-line no-unused-vars
|
||||||
|
var O = toObject(this);
|
||||||
|
var A = arraySpeciesCreate(O, 0);
|
||||||
|
var n = 0;
|
||||||
|
var i, k, length, len, E;
|
||||||
|
for (i = -1, length = arguments.length; i < length; i++) {
|
||||||
|
E = i === -1 ? O : arguments[i];
|
||||||
|
if (isConcatSpreadable(E)) {
|
||||||
|
len = toLength(E.length);
|
||||||
|
if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
|
||||||
|
for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);
|
||||||
|
} else {
|
||||||
|
if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
|
||||||
|
createProperty(A, n++, E);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
A.length = n;
|
||||||
|
return A;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bootstrap Table Chinese translation
|
||||||
|
* Author: Zhixin Wen<wenzhixin2010@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn.bootstrapTable.locales['zh-CN'] = {
|
||||||
|
formatLoadingMessage: function formatLoadingMessage() {
|
||||||
|
return '正在努力地加载数据中,请稍候';
|
||||||
|
},
|
||||||
|
formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
|
||||||
|
return "\u6BCF\u9875\u663E\u793A ".concat(pageNumber, " \u6761\u8BB0\u5F55");
|
||||||
|
},
|
||||||
|
formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
|
||||||
|
if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
|
||||||
|
return "\u663E\u793A\u7B2C ".concat(pageFrom, " \u5230\u7B2C ").concat(pageTo, " \u6761\u8BB0\u5F55\uFF0C\u603B\u5171 ").concat(totalRows, " \u6761\u8BB0\u5F55\uFF08\u4ECE ").concat(totalNotFiltered, " \u603B\u8BB0\u5F55\u4E2D\u8FC7\u6EE4\uFF09");
|
||||||
|
}
|
||||||
|
|
||||||
|
return "\u663E\u793A\u7B2C ".concat(pageFrom, " \u5230\u7B2C ").concat(pageTo, " \u6761\u8BB0\u5F55\uFF0C\u603B\u5171 ").concat(totalRows, " \u6761\u8BB0\u5F55");
|
||||||
|
},
|
||||||
|
formatSRPaginationPreText: function formatSRPaginationPreText() {
|
||||||
|
return '上一页';
|
||||||
|
},
|
||||||
|
formatSRPaginationPageText: function formatSRPaginationPageText(page) {
|
||||||
|
return "\u7B2C".concat(page, "\u9875");
|
||||||
|
},
|
||||||
|
formatSRPaginationNextText: function formatSRPaginationNextText() {
|
||||||
|
return '下一页';
|
||||||
|
},
|
||||||
|
formatDetailPagination: function formatDetailPagination(totalRows) {
|
||||||
|
return "\u603B\u5171 ".concat(totalRows, " \u6761\u8BB0\u5F55");
|
||||||
|
},
|
||||||
|
formatClearSearch: function formatClearSearch() {
|
||||||
|
return '清空过滤';
|
||||||
|
},
|
||||||
|
formatSearch: function formatSearch() {
|
||||||
|
return '搜索';
|
||||||
|
},
|
||||||
|
formatNoMatches: function formatNoMatches() {
|
||||||
|
return '没有找到匹配的记录';
|
||||||
|
},
|
||||||
|
formatPaginationSwitch: function formatPaginationSwitch() {
|
||||||
|
return '隐藏/显示分页';
|
||||||
|
},
|
||||||
|
formatPaginationSwitchDown: function formatPaginationSwitchDown() {
|
||||||
|
return '显示分页';
|
||||||
|
},
|
||||||
|
formatPaginationSwitchUp: function formatPaginationSwitchUp() {
|
||||||
|
return '隐藏分页';
|
||||||
|
},
|
||||||
|
formatRefresh: function formatRefresh() {
|
||||||
|
return '刷新';
|
||||||
|
},
|
||||||
|
formatToggle: function formatToggle() {
|
||||||
|
return '切换';
|
||||||
|
},
|
||||||
|
formatToggleOn: function formatToggleOn() {
|
||||||
|
return '显示卡片视图';
|
||||||
|
},
|
||||||
|
formatToggleOff: function formatToggleOff() {
|
||||||
|
return '隐藏卡片视图';
|
||||||
|
},
|
||||||
|
formatColumns: function formatColumns() {
|
||||||
|
return '列';
|
||||||
|
},
|
||||||
|
formatColumnsToggleAll: function formatColumnsToggleAll() {
|
||||||
|
return '切换所有';
|
||||||
|
},
|
||||||
|
formatFullscreen: function formatFullscreen() {
|
||||||
|
return '全屏';
|
||||||
|
},
|
||||||
|
formatAllRows: function formatAllRows() {
|
||||||
|
return '所有';
|
||||||
|
},
|
||||||
|
formatAutoRefresh: function formatAutoRefresh() {
|
||||||
|
return '自动刷新';
|
||||||
|
},
|
||||||
|
formatExport: function formatExport() {
|
||||||
|
return '导出数据';
|
||||||
|
},
|
||||||
|
formatJumpTo: function formatJumpTo() {
|
||||||
|
return '跳转';
|
||||||
|
},
|
||||||
|
formatAdvancedSearch: function formatAdvancedSearch() {
|
||||||
|
return '高级搜索';
|
||||||
|
},
|
||||||
|
formatAdvancedCloseButton: function formatAdvancedCloseButton() {
|
||||||
|
return '关闭';
|
||||||
|
},
|
||||||
|
formatFilterControlSwitch: function formatFilterControlSwitch() {
|
||||||
|
return '隐藏/显示过滤控制';
|
||||||
|
},
|
||||||
|
formatFilterControlSwitchHide: function formatFilterControlSwitchHide() {
|
||||||
|
return '隐藏过滤控制';
|
||||||
|
},
|
||||||
|
formatFilterControlSwitchShow: function formatFilterControlSwitchShow() {
|
||||||
|
return '显示过滤控制';
|
||||||
|
}
|
||||||
|
};
|
||||||
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['zh-CN']);
|
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['zh-CN']);
|
||||||
|
|
||||||
})(jQuery);
|
})));
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -133,7 +133,7 @@
|
||||||
if((!target.isFixWidth)&& column.width){
|
if((!target.isFixWidth)&& column.width){
|
||||||
target.isFixWidth = column.width.indexOf("px")>-1?true:false;
|
target.isFixWidth = column.width.indexOf("px")>-1?true:false;
|
||||||
}
|
}
|
||||||
$th.text(column.title);
|
$th.html(column.title);
|
||||||
$thr.append($th);
|
$thr.append($th);
|
||||||
});
|
});
|
||||||
var $thead = $('<thead class="treetable-thead"></thead>');
|
var $thead = $('<thead class="treetable-thead"></thead>');
|
||||||
|
|
@ -167,6 +167,7 @@
|
||||||
success: function(data, textStatus, jqXHR) {
|
success: function(data, textStatus, jqXHR) {
|
||||||
data = calculateObjectValue(options, options.responseHandler, [data], data);
|
data = calculateObjectValue(options, options.responseHandler, [data], data);
|
||||||
renderTable(data);
|
renderTable(data);
|
||||||
|
calculateObjectValue(options, options.onLoadSuccess, [data], data);
|
||||||
},
|
},
|
||||||
error: function(xhr, textStatus) {
|
error: function(xhr, textStatus) {
|
||||||
var _errorMsg = '<tr><td colspan="' + options.columns.length + '"><div style="display: block;text-align: center;">' + xhr.responseText + '</div></td></tr>'
|
var _errorMsg = '<tr><td colspan="' + options.columns.length + '"><div style="display: block;text-align: center;">' + xhr.responseText + '</div></td></tr>'
|
||||||
|
|
@ -241,18 +242,25 @@
|
||||||
// 缓存并格式化数据
|
// 缓存并格式化数据
|
||||||
var formatData = function(data) {
|
var formatData = function(data) {
|
||||||
var _root = options.rootIdValue ? options.rootIdValue : null;
|
var _root = options.rootIdValue ? options.rootIdValue : null;
|
||||||
var firstCode = data[0][options.parentCode];
|
// 父节点属性列表
|
||||||
|
var parentCodes = [];
|
||||||
|
var rootFlag = false;
|
||||||
|
$.each(data, function(index, item) {
|
||||||
|
if($.inArray(item[options.parentCode], parentCodes) == -1){
|
||||||
|
parentCodes.push(item[options.parentCode]);
|
||||||
|
}
|
||||||
|
});
|
||||||
$.each(data, function(index, item) {
|
$.each(data, function(index, item) {
|
||||||
// 添加一个默认属性,用来判断当前节点有没有被显示
|
// 添加一个默认属性,用来判断当前节点有没有被显示
|
||||||
item.isShow = false;
|
item.isShow = false;
|
||||||
// 这里兼容几种常见Root节点写法
|
// 顶级节点校验判断,兼容0,'0','',null
|
||||||
// 默认的几种判断
|
|
||||||
var _defaultRootFlag = item[options.parentCode] == '0' ||
|
var _defaultRootFlag = item[options.parentCode] == '0' ||
|
||||||
item[options.parentCode] == 0 ||
|
item[options.parentCode] == 0 ||
|
||||||
item[options.parentCode] == null ||
|
item[options.parentCode] == null ||
|
||||||
item[options.parentCode] == firstCode ||
|
item[options.parentCode] == '' ||
|
||||||
item[options.parentCode] == '';
|
$.inArray(item[options.code], parentCodes) > 0 && !rootFlag;
|
||||||
if (!item[options.parentCode] || (_root ? (item[options.parentCode] == options.rootIdValue) : _defaultRootFlag)) {
|
if (!item[options.parentCode] || (_root ? (item[options.parentCode] == options.rootIdValue) : _defaultRootFlag)) {
|
||||||
|
rootFlag = true;
|
||||||
if (!target.data_list["_root_"]) {
|
if (!target.data_list["_root_"]) {
|
||||||
target.data_list["_root_"] = [];
|
target.data_list["_root_"] = [];
|
||||||
}
|
}
|
||||||
|
|
@ -731,6 +739,9 @@
|
||||||
expanderCollapsedClass: 'glyphicon glyphicon-chevron-right', // 缩起的按钮的图标
|
expanderCollapsedClass: 'glyphicon glyphicon-chevron-right', // 缩起的按钮的图标
|
||||||
responseHandler: function(res) {
|
responseHandler: function(res) {
|
||||||
return false;
|
return false;
|
||||||
|
},
|
||||||
|
onLoadSuccess: function(res) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
})(jQuery);
|
})(jQuery);
|
||||||
|
|
@ -1,127 +0,0 @@
|
||||||
@charset "utf-8";
|
|
||||||
.container {
|
|
||||||
margin: 10px auto 0 auto;
|
|
||||||
position: relative;
|
|
||||||
font-family: 微软雅黑;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
.container p {
|
|
||||||
line-height: 12px;
|
|
||||||
line-height: 0px;
|
|
||||||
height: 0px;
|
|
||||||
margin: 10px;
|
|
||||||
color: #bbb
|
|
||||||
}
|
|
||||||
.action {
|
|
||||||
width: 400px;
|
|
||||||
height: 30px;
|
|
||||||
margin: 10px 0;
|
|
||||||
}
|
|
||||||
.cropped {
|
|
||||||
position: absolute;
|
|
||||||
left: 500px;
|
|
||||||
top: 0;
|
|
||||||
width: 200px;
|
|
||||||
border: 1px #ddd solid;
|
|
||||||
height: 450px;
|
|
||||||
padding: 4px;
|
|
||||||
box-shadow: 0px 0px 12px #ddd;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.imageBox {
|
|
||||||
position: relative;
|
|
||||||
height: 400px;
|
|
||||||
width: 400px;
|
|
||||||
border: 1px solid #aaa;
|
|
||||||
background: #fff;
|
|
||||||
overflow: hidden;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
cursor: move;
|
|
||||||
box-shadow: 4px 4px 12px #B0B0B0;
|
|
||||||
}
|
|
||||||
.imageBox .thumbBox {
|
|
||||||
position: absolute;
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
width: 200px;
|
|
||||||
height: 200px;
|
|
||||||
margin-top: -100px;
|
|
||||||
margin-left: -100px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
border: 1px solid rgb(102, 102, 102);
|
|
||||||
box-shadow: 0 0 0 1000px rgba(0, 0, 0, 0.5);
|
|
||||||
background: none repeat scroll 0% 0% transparent;
|
|
||||||
}
|
|
||||||
.imageBox .spinner {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
bottom: 0;
|
|
||||||
right: 0;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 400px;
|
|
||||||
background: rgba(0,0,0,0.7);
|
|
||||||
}
|
|
||||||
.Btnsty_peyton{ float: right;
|
|
||||||
width: 46px;
|
|
||||||
display: inline-block;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
height: 37px;
|
|
||||||
line-height: 37px;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #FFFFFF;
|
|
||||||
margin:0px 2px;
|
|
||||||
background-color: #f38e81;
|
|
||||||
border-radius: 3px;
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
box-shadow: 0px 0px 5px #B0B0B0;
|
|
||||||
border: 0px #fff solid;}
|
|
||||||
/*选择文件上传*/
|
|
||||||
.new-contentarea {
|
|
||||||
width: 165px;
|
|
||||||
overflow:hidden;
|
|
||||||
margin: 0 auto;
|
|
||||||
position:relative;float:left;
|
|
||||||
}
|
|
||||||
.new-contentarea label {
|
|
||||||
width:100%;
|
|
||||||
height:100%;
|
|
||||||
display:block;
|
|
||||||
}
|
|
||||||
.new-contentarea input[type=file] {
|
|
||||||
width:188px;
|
|
||||||
height:60px;
|
|
||||||
background:#333;
|
|
||||||
margin: 0 auto;
|
|
||||||
position:absolute;
|
|
||||||
right:50%;
|
|
||||||
margin-right:-94px;
|
|
||||||
top:0;
|
|
||||||
right/*\**/:0px\9;
|
|
||||||
margin-right/*\**/:0px\9;
|
|
||||||
width/*\**/:10px\9;
|
|
||||||
opacity:0;
|
|
||||||
filter:alpha(opacity=0);
|
|
||||||
z-index:2;
|
|
||||||
}
|
|
||||||
a.upload-img{
|
|
||||||
width:165px;
|
|
||||||
display: inline-block;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
height:37px;
|
|
||||||
line-height: 37px;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #f38e81;
|
|
||||||
border-radius: 3px;
|
|
||||||
text-decoration:none;
|
|
||||||
cursor:pointer;
|
|
||||||
border: 0px #fff solid;
|
|
||||||
box-shadow: 0px 0px 5px #B0B0B0;
|
|
||||||
}
|
|
||||||
a.upload-img:hover{
|
|
||||||
background-color: #ec7e70;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tc{text-align:center;}
|
|
||||||
|
|
@ -1,136 +0,0 @@
|
||||||
"use strict";
|
|
||||||
(function (factory) {
|
|
||||||
if (typeof define === 'function' && define.amd) {
|
|
||||||
define(['jquery'], factory);
|
|
||||||
} else {
|
|
||||||
factory(jQuery);
|
|
||||||
}
|
|
||||||
}(function ($) {
|
|
||||||
var cropbox = function(options, el){
|
|
||||||
var el = el || $(options.imageBox),
|
|
||||||
obj =
|
|
||||||
{
|
|
||||||
state : {},
|
|
||||||
ratio : 1,
|
|
||||||
options : options,
|
|
||||||
imageBox : el,
|
|
||||||
thumbBox : el.find(options.thumbBox),
|
|
||||||
spinner : el.find(options.spinner),
|
|
||||||
image : new Image(),
|
|
||||||
getDataURL: function ()
|
|
||||||
{
|
|
||||||
var width = this.thumbBox.width(),
|
|
||||||
height = this.thumbBox.height(),
|
|
||||||
canvas = document.createElement("canvas"),
|
|
||||||
dim = el.css('background-position').split(' '),
|
|
||||||
size = el.css('background-size').split(' '),
|
|
||||||
dx = parseInt(dim[0]) - el.width()/2 + width/2,
|
|
||||||
dy = parseInt(dim[1]) - el.height()/2 + height/2,
|
|
||||||
dw = parseInt(size[0]),
|
|
||||||
dh = parseInt(size[1]),
|
|
||||||
sh = parseInt(this.image.height),
|
|
||||||
sw = parseInt(this.image.width);
|
|
||||||
|
|
||||||
canvas.width = width;
|
|
||||||
canvas.height = height;
|
|
||||||
var context = canvas.getContext("2d");
|
|
||||||
context.drawImage(this.image, 0, 0, sw, sh, dx, dy, dw, dh);
|
|
||||||
var imageData = canvas.toDataURL('image/png');
|
|
||||||
return imageData;
|
|
||||||
},
|
|
||||||
getBlob: function()
|
|
||||||
{
|
|
||||||
var imageData = this.getDataURL();
|
|
||||||
var b64 = imageData.replace('data:image/png;base64,','');
|
|
||||||
var binary = atob(b64);
|
|
||||||
var array = [];
|
|
||||||
for (var i = 0; i < binary.length; i++) {
|
|
||||||
array.push(binary.charCodeAt(i));
|
|
||||||
}
|
|
||||||
return new Blob([new Uint8Array(array)], {type: 'image/png'});
|
|
||||||
},
|
|
||||||
zoomIn: function ()
|
|
||||||
{
|
|
||||||
this.ratio*=1.1;
|
|
||||||
setBackground();
|
|
||||||
},
|
|
||||||
zoomOut: function ()
|
|
||||||
{
|
|
||||||
this.ratio*=0.9;
|
|
||||||
setBackground();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
setBackground = function()
|
|
||||||
{
|
|
||||||
var w = parseInt(obj.image.width)*obj.ratio;
|
|
||||||
var h = parseInt(obj.image.height)*obj.ratio;
|
|
||||||
|
|
||||||
var pw = (el.width() - w) / 2;
|
|
||||||
var ph = (el.height() - h) / 2;
|
|
||||||
|
|
||||||
el.css({
|
|
||||||
'background-image': 'url(' + obj.image.src + ')',
|
|
||||||
'background-size': w +'px ' + h + 'px',
|
|
||||||
'background-position': pw + 'px ' + ph + 'px',
|
|
||||||
'background-repeat': 'no-repeat'});
|
|
||||||
},
|
|
||||||
imgMouseDown = function(e)
|
|
||||||
{
|
|
||||||
e.stopImmediatePropagation();
|
|
||||||
|
|
||||||
obj.state.dragable = true;
|
|
||||||
obj.state.mouseX = e.clientX;
|
|
||||||
obj.state.mouseY = e.clientY;
|
|
||||||
},
|
|
||||||
imgMouseMove = function(e)
|
|
||||||
{
|
|
||||||
e.stopImmediatePropagation();
|
|
||||||
|
|
||||||
if (obj.state.dragable)
|
|
||||||
{
|
|
||||||
var x = e.clientX - obj.state.mouseX;
|
|
||||||
var y = e.clientY - obj.state.mouseY;
|
|
||||||
|
|
||||||
var bg = el.css('background-position').split(' ');
|
|
||||||
|
|
||||||
var bgX = x + parseInt(bg[0]);
|
|
||||||
var bgY = y + parseInt(bg[1]);
|
|
||||||
|
|
||||||
el.css('background-position', bgX +'px ' + bgY + 'px');
|
|
||||||
|
|
||||||
obj.state.mouseX = e.clientX;
|
|
||||||
obj.state.mouseY = e.clientY;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
imgMouseUp = function(e)
|
|
||||||
{
|
|
||||||
e.stopImmediatePropagation();
|
|
||||||
obj.state.dragable = false;
|
|
||||||
},
|
|
||||||
zoomImage = function(e)
|
|
||||||
{
|
|
||||||
e.originalEvent.wheelDelta > 0 || e.originalEvent.detail < 0 ? obj.ratio*=1.1 : obj.ratio*=0.9;
|
|
||||||
setBackground();
|
|
||||||
}
|
|
||||||
|
|
||||||
obj.spinner.show();
|
|
||||||
obj.image.onload = function() {
|
|
||||||
obj.spinner.hide();
|
|
||||||
setBackground();
|
|
||||||
|
|
||||||
el.bind('mousedown', imgMouseDown);
|
|
||||||
el.bind('mousemove', imgMouseMove);
|
|
||||||
$(window).bind('mouseup', imgMouseUp);
|
|
||||||
el.bind('mousewheel DOMMouseScroll', zoomImage);
|
|
||||||
};
|
|
||||||
obj.image.crossOrigin = 'Anonymous';
|
|
||||||
obj.image.src = options.imgSrc;
|
|
||||||
el.on('remove', function(){$(window).unbind('mouseup', imgMouseUp)});
|
|
||||||
|
|
||||||
return obj;
|
|
||||||
};
|
|
||||||
|
|
||||||
jQuery.fn.cropbox = function(options){
|
|
||||||
return new cropbox(options, this);
|
|
||||||
};
|
|
||||||
}));
|
|
||||||
|
|
@ -0,0 +1,304 @@
|
||||||
|
/*!
|
||||||
|
* Cropper.js v1.5.7
|
||||||
|
* https://fengyuanchen.github.io/cropperjs
|
||||||
|
*
|
||||||
|
* Copyright 2015-present Chen Fengyuan
|
||||||
|
* Released under the MIT license
|
||||||
|
*
|
||||||
|
* Date: 2020-05-23T05:22:57.283Z
|
||||||
|
*/
|
||||||
|
|
||||||
|
.cropper-container {
|
||||||
|
direction: ltr;
|
||||||
|
font-size: 0;
|
||||||
|
line-height: 0;
|
||||||
|
position: relative;
|
||||||
|
-ms-touch-action: none;
|
||||||
|
touch-action: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-container img {
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
|
image-orientation: 0deg;
|
||||||
|
max-height: none !important;
|
||||||
|
max-width: none !important;
|
||||||
|
min-height: 0 !important;
|
||||||
|
min-width: 0 !important;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-wrap-box,
|
||||||
|
.cropper-canvas,
|
||||||
|
.cropper-drag-box,
|
||||||
|
.cropper-crop-box,
|
||||||
|
.cropper-modal {
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-wrap-box,
|
||||||
|
.cropper-canvas {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-drag-box {
|
||||||
|
background-color: #fff;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-modal {
|
||||||
|
background-color: #000;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-view-box {
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
|
outline: 1px solid #39f;
|
||||||
|
outline-color: rgba(51, 153, 255, 0.75);
|
||||||
|
overflow: hidden;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-dashed {
|
||||||
|
border: 0 dashed #eee;
|
||||||
|
display: block;
|
||||||
|
opacity: 0.5;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-dashed.dashed-h {
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
border-top-width: 1px;
|
||||||
|
height: calc(100% / 3);
|
||||||
|
left: 0;
|
||||||
|
top: calc(100% / 3);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-dashed.dashed-v {
|
||||||
|
border-left-width: 1px;
|
||||||
|
border-right-width: 1px;
|
||||||
|
height: 100%;
|
||||||
|
left: calc(100% / 3);
|
||||||
|
top: 0;
|
||||||
|
width: calc(100% / 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-center {
|
||||||
|
display: block;
|
||||||
|
height: 0;
|
||||||
|
left: 50%;
|
||||||
|
opacity: 0.75;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-center::before,
|
||||||
|
.cropper-center::after {
|
||||||
|
background-color: #eee;
|
||||||
|
content: ' ';
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-center::before {
|
||||||
|
height: 1px;
|
||||||
|
left: -3px;
|
||||||
|
top: 0;
|
||||||
|
width: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-center::after {
|
||||||
|
height: 7px;
|
||||||
|
left: 0;
|
||||||
|
top: -3px;
|
||||||
|
width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-face,
|
||||||
|
.cropper-line,
|
||||||
|
.cropper-point {
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
|
opacity: 0.1;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-face {
|
||||||
|
background-color: #fff;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-line {
|
||||||
|
background-color: #39f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-line.line-e {
|
||||||
|
cursor: ew-resize;
|
||||||
|
right: -3px;
|
||||||
|
top: 0;
|
||||||
|
width: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-line.line-n {
|
||||||
|
cursor: ns-resize;
|
||||||
|
height: 5px;
|
||||||
|
left: 0;
|
||||||
|
top: -3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-line.line-w {
|
||||||
|
cursor: ew-resize;
|
||||||
|
left: -3px;
|
||||||
|
top: 0;
|
||||||
|
width: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-line.line-s {
|
||||||
|
bottom: -3px;
|
||||||
|
cursor: ns-resize;
|
||||||
|
height: 5px;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-point {
|
||||||
|
background-color: #39f;
|
||||||
|
height: 5px;
|
||||||
|
opacity: 0.75;
|
||||||
|
width: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-point.point-e {
|
||||||
|
cursor: ew-resize;
|
||||||
|
margin-top: -3px;
|
||||||
|
right: -3px;
|
||||||
|
top: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-point.point-n {
|
||||||
|
cursor: ns-resize;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -3px;
|
||||||
|
top: -3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-point.point-w {
|
||||||
|
cursor: ew-resize;
|
||||||
|
left: -3px;
|
||||||
|
margin-top: -3px;
|
||||||
|
top: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-point.point-s {
|
||||||
|
bottom: -3px;
|
||||||
|
cursor: s-resize;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-point.point-ne {
|
||||||
|
cursor: nesw-resize;
|
||||||
|
right: -3px;
|
||||||
|
top: -3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-point.point-nw {
|
||||||
|
cursor: nwse-resize;
|
||||||
|
left: -3px;
|
||||||
|
top: -3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-point.point-sw {
|
||||||
|
bottom: -3px;
|
||||||
|
cursor: nesw-resize;
|
||||||
|
left: -3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-point.point-se {
|
||||||
|
bottom: -3px;
|
||||||
|
cursor: nwse-resize;
|
||||||
|
height: 20px;
|
||||||
|
opacity: 1;
|
||||||
|
right: -3px;
|
||||||
|
width: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.cropper-point.point-se {
|
||||||
|
height: 15px;
|
||||||
|
width: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 992px) {
|
||||||
|
.cropper-point.point-se {
|
||||||
|
height: 10px;
|
||||||
|
width: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1200px) {
|
||||||
|
.cropper-point.point-se {
|
||||||
|
height: 5px;
|
||||||
|
opacity: 0.75;
|
||||||
|
width: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-point.point-se::before {
|
||||||
|
background-color: #39f;
|
||||||
|
bottom: -50%;
|
||||||
|
content: ' ';
|
||||||
|
display: block;
|
||||||
|
height: 200%;
|
||||||
|
opacity: 0;
|
||||||
|
position: absolute;
|
||||||
|
right: -50%;
|
||||||
|
width: 200%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-invisible {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-bg {
|
||||||
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC');
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-hide {
|
||||||
|
display: block;
|
||||||
|
height: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-hidden {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-move {
|
||||||
|
cursor: move;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-crop {
|
||||||
|
cursor: crosshair;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cropper-disabled .cropper-drag-box,
|
||||||
|
.cropper-disabled .cropper-face,
|
||||||
|
.cropper-disabled .cropper-line,
|
||||||
|
.cropper-disabled .cropper-point {
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,9 @@
|
||||||
|
/*!
|
||||||
|
* Cropper.js v1.5.7
|
||||||
|
* https://fengyuanchen.github.io/cropperjs
|
||||||
|
*
|
||||||
|
* Copyright 2015-present Chen Fengyuan
|
||||||
|
* Released under the MIT license
|
||||||
|
*
|
||||||
|
* Date: 2020-05-23T05:22:57.283Z
|
||||||
|
*/.cropper-container{direction:ltr;font-size:0;line-height:0;position:relative;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.cropper-container img{display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{bottom:0;left:0;position:absolute;right:0;top:0}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:rgba(51,153,255,.75);overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.33333%;left:0;top:33.33333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.33333%;top:0;width:33.33333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:after,.cropper-center:before{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC")}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,406 @@
|
||||||
|
/*!
|
||||||
|
* jQuery cxSelect
|
||||||
|
* @name jquery.cxselect.js
|
||||||
|
* @version 1.4.2
|
||||||
|
* @date 2017-09-26
|
||||||
|
* @author ciaoca
|
||||||
|
* @email ciaoca@gmail.com
|
||||||
|
* @site https://github.com/ciaoca/cxSelect
|
||||||
|
* @license Released under the MIT license
|
||||||
|
*/
|
||||||
|
(function(factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
define(['jquery'], factory);
|
||||||
|
} else {
|
||||||
|
factory(window.jQuery || window.Zepto || window.$);
|
||||||
|
};
|
||||||
|
}(function($) {
|
||||||
|
var cxSelect = function() {
|
||||||
|
var self = this;
|
||||||
|
var dom, settings, callback;
|
||||||
|
|
||||||
|
// 分配参数
|
||||||
|
for (var i = 0, l = arguments.length; i < l; i++) {
|
||||||
|
if (cxSelect.isJquery(arguments[i]) || cxSelect.isZepto(arguments[i])) {
|
||||||
|
dom = arguments[i];
|
||||||
|
} else if (cxSelect.isElement(arguments[i])) {
|
||||||
|
dom = $(arguments[i]);
|
||||||
|
} else if (typeof arguments[i] === 'function') {
|
||||||
|
callback = arguments[i];
|
||||||
|
} else if (typeof arguments[i] === 'object') {
|
||||||
|
settings = arguments[i];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
var api = new cxSelect.init(dom, settings);
|
||||||
|
|
||||||
|
if (typeof callback === 'function') {
|
||||||
|
callback(api);
|
||||||
|
};
|
||||||
|
|
||||||
|
return api;
|
||||||
|
};
|
||||||
|
|
||||||
|
cxSelect.isElement = function(o){
|
||||||
|
if (o && (typeof HTMLElement === 'function' || typeof HTMLElement === 'object') && o instanceof HTMLElement) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return (o && o.nodeType && o.nodeType === 1) ? true : false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
cxSelect.isJquery = function(o){
|
||||||
|
return (o && o.length && (typeof jQuery === 'function' || typeof jQuery === 'object') && o instanceof jQuery) ? true : false;
|
||||||
|
};
|
||||||
|
|
||||||
|
cxSelect.isZepto = function(o){
|
||||||
|
return (o && o.length && (typeof Zepto === 'function' || typeof Zepto === 'object') && Zepto.zepto.isZ(o)) ? true : false;
|
||||||
|
};
|
||||||
|
|
||||||
|
cxSelect.getIndex = function(n, required) {
|
||||||
|
return required ? n : n - 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
cxSelect.getData = function(data, space) {
|
||||||
|
if (typeof space === 'string' && space.length) {
|
||||||
|
space = space.split('.');
|
||||||
|
for (var i = 0, l = space.length; i < l; i++) {
|
||||||
|
data = data[space[i]];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
return data;
|
||||||
|
};
|
||||||
|
|
||||||
|
cxSelect.init = function(dom, settings) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
if (!cxSelect.isJquery(dom) && !cxSelect.isZepto(dom)) {return};
|
||||||
|
|
||||||
|
var theSelect = {
|
||||||
|
dom: {
|
||||||
|
box: dom
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
self.attach = cxSelect.attach.bind(theSelect);
|
||||||
|
self.detach = cxSelect.detach.bind(theSelect);
|
||||||
|
self.setOptions = cxSelect.setOptions.bind(theSelect);
|
||||||
|
self.clear = cxSelect.clear.bind(theSelect);
|
||||||
|
|
||||||
|
theSelect.changeEvent = function() {
|
||||||
|
cxSelect.selectChange.call(theSelect, this.className);
|
||||||
|
};
|
||||||
|
|
||||||
|
theSelect.settings = $.extend({}, $.cxSelect.defaults, settings, {
|
||||||
|
url: theSelect.dom.box.data('url'),
|
||||||
|
emptyStyle: theSelect.dom.box.data('emptyStyle'),
|
||||||
|
required: theSelect.dom.box.data('required'),
|
||||||
|
firstTitle: theSelect.dom.box.data('firstTitle'),
|
||||||
|
firstValue: theSelect.dom.box.data('firstValue'),
|
||||||
|
jsonSpace: theSelect.dom.box.data('jsonSpace'),
|
||||||
|
jsonName: theSelect.dom.box.data('jsonName'),
|
||||||
|
jsonValue: theSelect.dom.box.data('jsonValue'),
|
||||||
|
jsonSub: theSelect.dom.box.data('jsonSub')
|
||||||
|
});
|
||||||
|
|
||||||
|
var _dataSelects = theSelect.dom.box.data('selects');
|
||||||
|
|
||||||
|
if (typeof _dataSelects === 'string' && _dataSelects.length) {
|
||||||
|
theSelect.settings.selects = _dataSelects.split(',');
|
||||||
|
};
|
||||||
|
|
||||||
|
self.setOptions();
|
||||||
|
self.attach();
|
||||||
|
|
||||||
|
// 使用独立接口获取数据
|
||||||
|
if (!theSelect.settings.url && !theSelect.settings.data) {
|
||||||
|
cxSelect.start.apply(theSelect);
|
||||||
|
|
||||||
|
// 设置自定义数据
|
||||||
|
} else if ($.isArray(theSelect.settings.data)) {
|
||||||
|
cxSelect.start.call(theSelect, theSelect.settings.data);
|
||||||
|
|
||||||
|
// 设置 URL,通过 Ajax 获取数据
|
||||||
|
} else if (typeof theSelect.settings.url === 'string' && theSelect.settings.url.length) {
|
||||||
|
$.getJSON(theSelect.settings.url, function(json) {
|
||||||
|
cxSelect.start.call(theSelect, json);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 设置参数
|
||||||
|
cxSelect.setOptions = function(opts) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
if (opts) {
|
||||||
|
$.extend(self.settings, opts);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 初次或重设选择器组
|
||||||
|
if (!$.isArray(self.selectArray) || !self.selectArray.length || (opts && opts.selects)) {
|
||||||
|
self.selectArray = [];
|
||||||
|
|
||||||
|
if ($.isArray(self.settings.selects) && self.settings.selects.length) {
|
||||||
|
var _tempSelect;
|
||||||
|
|
||||||
|
for (var i = 0, l = self.settings.selects.length; i < l; i++) {
|
||||||
|
_tempSelect = self.dom.box.find('select.' + self.settings.selects[i]);
|
||||||
|
|
||||||
|
if (!_tempSelect || !_tempSelect.length) {break};
|
||||||
|
|
||||||
|
self.selectArray.push(_tempSelect);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
if (opts) {
|
||||||
|
if (!$.isArray(opts.data) && typeof opts.url === 'string' && opts.url.length) {
|
||||||
|
$.getJSON(self.settings.url, function(json) {
|
||||||
|
cxSelect.start.call(self, json);
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
cxSelect.start.call(self, opts.data);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 绑定
|
||||||
|
cxSelect.attach = function() {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
if (!self.attachStatus) {
|
||||||
|
self.dom.box.on('change', 'select', self.changeEvent);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (typeof self.attachStatus === 'boolean') {
|
||||||
|
cxSelect.start.call(self);
|
||||||
|
};
|
||||||
|
|
||||||
|
self.attachStatus = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 移除绑定
|
||||||
|
cxSelect.detach = function() {
|
||||||
|
var self = this;
|
||||||
|
self.dom.box.off('change', 'select', self.changeEvent);
|
||||||
|
self.attachStatus = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 清空选项
|
||||||
|
cxSelect.clear = function(index) {
|
||||||
|
var self = this;
|
||||||
|
var _style = {
|
||||||
|
display: '',
|
||||||
|
visibility: ''
|
||||||
|
};
|
||||||
|
|
||||||
|
index = isNaN(index) ? 0 : index;
|
||||||
|
|
||||||
|
// 清空后面的 select
|
||||||
|
for (var i = index, l = self.selectArray.length; i < l; i++) {
|
||||||
|
self.selectArray[i].empty().prop('disabled', true);
|
||||||
|
|
||||||
|
if (self.settings.emptyStyle === 'none') {
|
||||||
|
_style.display = 'none';
|
||||||
|
} else if (self.settings.emptyStyle === 'hidden') {
|
||||||
|
_style.visibility = 'hidden';
|
||||||
|
};
|
||||||
|
|
||||||
|
self.selectArray[i].css(_style);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
cxSelect.start = function(data) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
if ($.isArray(data)) {
|
||||||
|
self.settings.data = cxSelect.getData(data, self.settings.jsonSpace);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!self.selectArray.length) {return};
|
||||||
|
|
||||||
|
// 保存默认值
|
||||||
|
for (var i = 0, l = self.selectArray.length; i < l; i++) {
|
||||||
|
if (typeof self.selectArray[i].attr('data-value') !== 'string' && self.selectArray[i][0].options.length) {
|
||||||
|
self.selectArray[i].attr('data-value', self.selectArray[i].val());
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
if (self.settings.data || (typeof self.selectArray[0].data('url') === 'string' && self.selectArray[0].data('url').length)) {
|
||||||
|
cxSelect.getOptionData.call(self, 0);
|
||||||
|
} else if (self.selectArray[0][0].options.length && typeof self.selectArray[0].attr('data-value') === 'string' && self.selectArray[0].attr('data-value').length) {
|
||||||
|
self.selectArray[0].val(self.selectArray[0].attr('data-value'));
|
||||||
|
cxSelect.getOptionData.call(self, 1);
|
||||||
|
} else {
|
||||||
|
self.selectArray[0].prop('disabled', false).css({
|
||||||
|
'display': '',
|
||||||
|
'visibility': ''
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 获取选项数据
|
||||||
|
cxSelect.getOptionData = function(index) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
if (typeof index !== 'number' || isNaN(index) || index < 0 || index >= self.selectArray.length) {return};
|
||||||
|
|
||||||
|
var _indexPrev = index - 1;
|
||||||
|
var _select = self.selectArray[index];
|
||||||
|
var _selectData;
|
||||||
|
var _valueIndex;
|
||||||
|
var _dataUrl = _select.data('url');
|
||||||
|
var _jsonSpace = typeof _select.data('jsonSpace') === 'undefined' ? self.settings.jsonSpace : _select.data('jsonSpace');
|
||||||
|
var _query = {};
|
||||||
|
var _queryName;
|
||||||
|
var _selectName;
|
||||||
|
var _selectValue;
|
||||||
|
|
||||||
|
cxSelect.clear.call(self, index);
|
||||||
|
|
||||||
|
// 使用独立接口
|
||||||
|
if (typeof _dataUrl === 'string' && _dataUrl.length) {
|
||||||
|
if (index > 0) {
|
||||||
|
for (var i = 0, j = 1; i < index; i++, j++) {
|
||||||
|
_queryName = self.selectArray[j].data('queryName');
|
||||||
|
_selectName = self.selectArray[i].attr('name');
|
||||||
|
_selectValue = self.selectArray[i].val();
|
||||||
|
|
||||||
|
if (typeof _queryName === 'string' && _queryName.length) {
|
||||||
|
_query[_queryName] = _selectValue;
|
||||||
|
} else if (typeof _selectName === 'string' && _selectName.length) {
|
||||||
|
_query[_selectName] = _selectValue;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
$.getJSON(_dataUrl, _query, function(json) {
|
||||||
|
_selectData = cxSelect.getData(json, _jsonSpace);
|
||||||
|
|
||||||
|
cxSelect.buildOption.call(self, index, _selectData);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 使用整合数据
|
||||||
|
} else if (self.settings.data && typeof self.settings.data === 'object') {
|
||||||
|
_selectData = self.settings.data;
|
||||||
|
|
||||||
|
for (var i = 0; i < index; i++) {
|
||||||
|
_valueIndex = cxSelect.getIndex(self.selectArray[i][0].selectedIndex, typeof self.selectArray[i].data('required') === 'boolean' ? self.selectArray[i].data('required') : self.settings.required);
|
||||||
|
|
||||||
|
if (typeof _selectData[_valueIndex] === 'object' && $.isArray(_selectData[_valueIndex][self.settings.jsonSub]) && _selectData[_valueIndex][self.settings.jsonSub].length) {
|
||||||
|
_selectData = _selectData[_valueIndex][self.settings.jsonSub];
|
||||||
|
} else {
|
||||||
|
_selectData = null;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
cxSelect.buildOption.call(self, index, _selectData);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 构建选项列表
|
||||||
|
cxSelect.buildOption = function(index, data) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
var _select = self.selectArray[index];
|
||||||
|
var _required = typeof _select.data('required') === 'boolean' ? _select.data('required') : self.settings.required;
|
||||||
|
var _firstTitle = typeof _select.data('firstTitle') === 'undefined' ? self.settings.firstTitle : _select.data('firstTitle');
|
||||||
|
var _firstValue = typeof _select.data('firstValue') === 'undefined' ? self.settings.firstValue : _select.data('firstValue');
|
||||||
|
var _jsonName = typeof _select.data('jsonName') === 'undefined' ? self.settings.jsonName : _select.data('jsonName');
|
||||||
|
var _jsonValue = typeof _select.data('jsonValue') === 'undefined' ? self.settings.jsonValue : _select.data('jsonValue');
|
||||||
|
|
||||||
|
if (!$.isArray(data)) {return};
|
||||||
|
|
||||||
|
var _html = !_required ? '<option value="' + String(_firstValue) + '">' + String(_firstTitle) + '</option>' : '';
|
||||||
|
|
||||||
|
// 区分标题、值的数据
|
||||||
|
if (typeof _jsonName === 'string' && _jsonName.length) {
|
||||||
|
// 无值字段时使用标题作为值
|
||||||
|
if (typeof _jsonValue !== 'string' || !_jsonValue.length) {
|
||||||
|
_jsonValue = _jsonName;
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var i = 0, l = data.length; i < l; i++) {
|
||||||
|
_html += '<option value="' + String(data[i][_jsonValue]) + '">' + String(data[i][_jsonName]) + '</option>';
|
||||||
|
};
|
||||||
|
|
||||||
|
// 数组即为值的数据
|
||||||
|
} else {
|
||||||
|
for (var i = 0, l = data.length; i < l; i++) {
|
||||||
|
_html += '<option value="' + String(data[i]) + '">' + String(data[i]) + '</option>';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
_select.html(_html).prop('disabled', false).css({
|
||||||
|
'display': '',
|
||||||
|
'visibility': ''
|
||||||
|
});
|
||||||
|
|
||||||
|
// 初次加载设置默认值
|
||||||
|
if (typeof _select.attr('data-value') === 'string') {
|
||||||
|
_select.val(String(_select.attr('data-value'))).removeAttr('data-value');
|
||||||
|
|
||||||
|
if (_select[0].selectedIndex < 0) {
|
||||||
|
_select[0].options[0].selected = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_required || _select[0].selectedIndex > 0) {
|
||||||
|
_select.trigger('change');
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// 改变选择时的处理
|
||||||
|
cxSelect.selectChange = function(name) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
if (typeof name !== 'string' || !name.length) {return};
|
||||||
|
|
||||||
|
var index;
|
||||||
|
|
||||||
|
name = name.replace(/\s+/g, ',');
|
||||||
|
name = ',' + name + ',';
|
||||||
|
|
||||||
|
// 获取当前 select 位置
|
||||||
|
for (var i = 0, l = self.selectArray.length; i < l; i++) {
|
||||||
|
if (name.indexOf(',' + self.settings.selects[i] + ',') > -1) {
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
if (typeof index === 'number' && index > -1) {
|
||||||
|
index += 1;
|
||||||
|
cxSelect.getOptionData.call(self, index);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
$.cxSelect = function() {
|
||||||
|
return cxSelect.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 默认值
|
||||||
|
$.cxSelect.defaults = {
|
||||||
|
selects: [], // 下拉选框组
|
||||||
|
url: null, // 列表数据文件路径(URL)或数组数据
|
||||||
|
data: null, // 自定义数据
|
||||||
|
emptyStyle: null, // 无数据状态显示方式
|
||||||
|
required: false, // 是否为必选
|
||||||
|
firstTitle: '请选择', // 第一个选项的标题
|
||||||
|
firstValue: '', // 第一个选项的值
|
||||||
|
jsonSpace: '', // 数据命名空间
|
||||||
|
jsonName: 'n', // 数据标题字段名称
|
||||||
|
jsonValue: '', // 数据值字段名称
|
||||||
|
jsonSub: 's' // 子集数据字段名称
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.cxSelect = function(settings, callback) {
|
||||||
|
this.each(function(i) {
|
||||||
|
$.cxSelect(this, settings, callback);
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
}));
|
||||||
11
ruoyi-admin/src/main/resources/static/ajax/libs/cxselect/jquery.cxselect.min.js
vendored
Normal file
11
ruoyi-admin/src/main/resources/static/ajax/libs/cxselect/jquery.cxselect.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -5778,7 +5778,7 @@ td.visible-lg {
|
||||||
display: table-cell !important;
|
display: table-cell !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.hidden-xs {
|
.summernote .hidden-xs {
|
||||||
display: block !important;
|
display: block !important;
|
||||||
}
|
}
|
||||||
tr.hidden-xs {
|
tr.hidden-xs {
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -145,3 +145,17 @@ body.signin {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.form-control, .form-control:focus, .has-error .form-control:focus, .has-success .form-control:focus, .has-warning .form-control:focus, .navbar-collapse, .navbar-form, .navbar-form-custom .form-control:focus, .navbar-form-custom .form-control:hover, .open .btn.dropdown-toggle, .panel, .popover, .progress, .progress-bar {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control{
|
||||||
|
border-radius: 1px!important;
|
||||||
|
padding: 6px 12px!important;
|
||||||
|
height: 34px!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control:focus{
|
||||||
|
border-color: #1ab394 !important;
|
||||||
|
}
|
||||||
|
|
@ -1 +1 @@
|
||||||
html{height:100%}body.signin{height:auto;background:url(../img/login-background.jpg) no-repeat center fixed;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;color:rgba(255,255,255,.95)}.signinpanel{width:750px;margin:10% auto 0}.signinpanel .logopanel{float:none;width:auto;padding:0;background:0}.signinpanel .signin-info ul{list-style:none;padding:0;margin:20px 0}.signinpanel .form-control{display:block;margin-top:15px}.signinpanel .uname{background:#fff url(../img/user.png) no-repeat 95% center;color:#333}.signinpanel .pword{background:#fff url(../img/locked.png) no-repeat 95% center;color:#333}.signinpanel .code{background:#fff no-repeat 95% center;color:#333;margin:0 0 15px 0}.signinpanel .btn{margin-top:15px}.signinpanel form{background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.3);-moz-box-shadow:0 3px 0 rgba(12,12,12,.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,.03);box-shadow:0 3px 0 rgba(12,12,12,.03);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:30px}.signup-footer{border-top:solid 1px rgba(255,255,255,.3);margin:20px 0;padding-top:15px}@media screen and (max-width:768px){.signinpanel,.signuppanel{margin:0 auto;width:420px!important;padding:20px}.signinpanel form{margin-top:20px}.signup-footer,.signuppanel .form-control{margin-bottom:10px}.signup-footer .pull-left,.signup-footer .pull-right{float:none!important;text-align:center}.signinpanel .signin-info ul{display:none}}@media screen and (max-width:320px){.signinpanel,.signuppanel{margin:0 20px;width:auto}}.checkbox-custom{position:relative;padding:0 15px 0 25px;margin-bottom:7px;display:inline-block}.checkbox-custom input[type="checkbox"]{opacity:0;position:absolute;cursor:pointer;z-index:2;margin:-6px 0 0 0;top:50%;left:3px}.checkbox-custom label:before{content:'';position:absolute;top:50%;left:0;margin-top:-9px;width:18px;height:17px;display:inline-block;border-radius:2px;border:1px solid #bbb;background:#fff}.checkbox-custom input[type="checkbox"]:checked+label:after{position:absolute;display:inline-block;font-family:'Glyphicons Halflings';content:"\e013";top:42%;left:3px;margin-top:-5px;font-size:11px;line-height:1;width:16px;height:16px;color:#333}.checkbox-custom label{cursor:pointer;line-height:1.2;font-weight:normal;margin-bottom:0;text-align:left}
|
html{height:100%}body.signin{height:auto;background:url(../img/login-background.jpg) no-repeat center fixed;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;color:rgba(255,255,255,.95)}.signinpanel{width:750px;margin:10% auto 0}.signinpanel .logopanel{float:none;width:auto;padding:0;background:0}.signinpanel .signin-info ul{list-style:none;padding:0;margin:20px 0}.signinpanel .form-control{display:block;margin-top:15px}.signinpanel .uname{background:#fff url(../img/user.png) no-repeat 95% center;color:#333}.signinpanel .pword{background:#fff url(../img/locked.png) no-repeat 95% center;color:#333}.signinpanel .code{background:#fff no-repeat 95% center;color:#333;margin:0 0 15px 0}.signinpanel .btn{margin-top:15px}.signinpanel form{background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.3);-moz-box-shadow:0 3px 0 rgba(12,12,12,.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,.03);box-shadow:0 3px 0 rgba(12,12,12,.03);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:30px}.signup-footer{border-top:solid 1px rgba(255,255,255,.3);margin:20px 0;padding-top:15px}@media screen and (max-width:768px){.signinpanel,.signuppanel{margin:0 auto;width:420px!important;padding:20px}.signinpanel form{margin-top:20px}.signup-footer,.signuppanel .form-control{margin-bottom:10px}.signup-footer .pull-left,.signup-footer .pull-right{float:none!important;text-align:center}.signinpanel .signin-info ul{display:none}}@media screen and (max-width:320px){.signinpanel,.signuppanel{margin:0 20px;width:auto}}.checkbox-custom{position:relative;padding:0 15px 0 25px;margin-bottom:7px;display:inline-block}.checkbox-custom input[type="checkbox"]{opacity:0;position:absolute;cursor:pointer;z-index:2;margin:-6px 0 0 0;top:50%;left:3px}.checkbox-custom label:before{content:'';position:absolute;top:50%;left:0;margin-top:-9px;width:18px;height:17px;display:inline-block;border-radius:2px;border:1px solid #bbb;background:#fff}.checkbox-custom input[type="checkbox"]:checked+label:after{position:absolute;display:inline-block;font-family:'Glyphicons Halflings';content:"\e013";top:42%;left:3px;margin-top:-5px;font-size:11px;line-height:1;width:16px;height:16px;color:#333}.checkbox-custom label{cursor:pointer;line-height:1.2;font-weight:normal;margin-bottom:0;text-align:left}.form-control,.form-control:focus,.has-error .form-control:focus,.has-success .form-control:focus,.has-warning .form-control:focus,.navbar-collapse,.navbar-form,.navbar-form-custom .form-control:focus,.navbar-form-custom .form-control:hover,.open .btn.dropdown-toggle,.panel,.popover,.progress,.progress-bar{box-shadow:none}.form-control{border-radius:1px!important;padding:6px 12px!important;height:34px!important}.form-control:focus{border-color:#1ab394!important}
|
||||||
|
|
@ -4,6 +4,14 @@
|
||||||
* NAME - blue/green/purple/red/yellow
|
* NAME - blue/green/purple/red/yellow
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
.nav-tabs {
|
||||||
|
border-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar .navbar-toolbar>li>a {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
/** 蓝色主题 skin-blue **/
|
/** 蓝色主题 skin-blue **/
|
||||||
.navbar, .skin-blue .navbar {
|
.navbar, .skin-blue .navbar {
|
||||||
background-color: #3c8dbc
|
background-color: #3c8dbc
|
||||||
|
|
@ -93,7 +101,7 @@
|
||||||
background: #1a2226
|
background: #1a2226
|
||||||
}
|
}
|
||||||
|
|
||||||
.skin-blue .nav>li.active {
|
.skin-blue .nav:not(.navbar-toolbar)>li.active {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background: #293846;
|
background: #293846;
|
||||||
border-left: 3px solid #3c8dbc;
|
border-left: 3px solid #3c8dbc;
|
||||||
|
|
@ -103,6 +111,13 @@
|
||||||
border-left: none;
|
border-left: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.skin-blue .dropdown-menu > .active > a, .skin-blue .dropdown-menu > .active > a:hover, .skin-blue .dropdown-menu > .active > a:focus {
|
||||||
|
color: #fff !important;
|
||||||
|
text-decoration: none;
|
||||||
|
outline: 0;
|
||||||
|
background-color: #3c8dbc;
|
||||||
|
}
|
||||||
|
|
||||||
.skin-blue .sidebar a {
|
.skin-blue .sidebar a {
|
||||||
color: #b8c7ce
|
color: #b8c7ce
|
||||||
}
|
}
|
||||||
|
|
@ -268,7 +283,7 @@
|
||||||
background: #1a2226;
|
background: #1a2226;
|
||||||
}
|
}
|
||||||
|
|
||||||
.skin-green .nav>li.active {
|
.skin-green .nav:not(.navbar-toolbar)>li.active {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background: #293846;
|
background: #293846;
|
||||||
border-left: 3px solid #00a65a;
|
border-left: 3px solid #00a65a;
|
||||||
|
|
@ -278,6 +293,13 @@
|
||||||
border-left: none;
|
border-left: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.skin-green .dropdown-menu > .active > a, .skin-green .dropdown-menu > .active > a:hover, .skin-green .dropdown-menu > .active > a:focus {
|
||||||
|
color: #fff !important;
|
||||||
|
text-decoration: none;
|
||||||
|
outline: 0;
|
||||||
|
background-color: #00a65a;
|
||||||
|
}
|
||||||
|
|
||||||
.skin-green .sidebar a {
|
.skin-green .sidebar a {
|
||||||
color: #b8c7ce
|
color: #b8c7ce
|
||||||
}
|
}
|
||||||
|
|
@ -415,7 +437,7 @@
|
||||||
background: #1a2226
|
background: #1a2226
|
||||||
}
|
}
|
||||||
|
|
||||||
.skin-red .nav>li.active {
|
.skin-red .nav:not(.navbar-toolbar)>li.active {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
border-left: 3px solid #dd4b39;
|
border-left: 3px solid #dd4b39;
|
||||||
background: #293846;
|
background: #293846;
|
||||||
|
|
@ -425,6 +447,13 @@
|
||||||
border-left: none;
|
border-left: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.skin-red .dropdown-menu > .active > a, .skin-red .dropdown-menu > .active > a:hover, .skin-red .dropdown-menu > .active > a:focus {
|
||||||
|
color: #fff !important;
|
||||||
|
text-decoration: none;
|
||||||
|
outline: 0;
|
||||||
|
background-color: #dd4b39;
|
||||||
|
}
|
||||||
|
|
||||||
.skin-red .content-tabs {
|
.skin-red .content-tabs {
|
||||||
border-bottom: 1px solid #e5e5e5;
|
border-bottom: 1px solid #e5e5e5;
|
||||||
}
|
}
|
||||||
|
|
@ -566,7 +595,7 @@
|
||||||
background: #1a2226
|
background: #1a2226
|
||||||
}
|
}
|
||||||
|
|
||||||
.skin-yellow .nav>li.active {
|
.skin-yellow .nav:not(.navbar-toolbar)>li.active {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background: #293846;
|
background: #293846;
|
||||||
border-left: 3px solid #f39c12;
|
border-left: 3px solid #f39c12;
|
||||||
|
|
@ -576,6 +605,13 @@
|
||||||
border-left: none;
|
border-left: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.skin-yellow .dropdown-menu > .active > a, .skin-yellow .dropdown-menu > .active > a:hover, .skin-yellow .dropdown-menu > .active > a:focus {
|
||||||
|
color: #fff !important;
|
||||||
|
text-decoration: none;
|
||||||
|
outline: 0;
|
||||||
|
background-color: #f39c12;
|
||||||
|
}
|
||||||
|
|
||||||
.skin-yellow .content-tabs {
|
.skin-yellow .content-tabs {
|
||||||
border-bottom: 1px solid #e5e5e5;
|
border-bottom: 1px solid #e5e5e5;
|
||||||
}
|
}
|
||||||
|
|
@ -717,7 +753,7 @@
|
||||||
background: #1a2226
|
background: #1a2226
|
||||||
}
|
}
|
||||||
|
|
||||||
.skin-purple .nav>li.active {
|
.skin-purple .nav:not(.navbar-toolbar)>li.active {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background: #293846;
|
background: #293846;
|
||||||
border-left: 3px solid #605ca8;
|
border-left: 3px solid #605ca8;
|
||||||
|
|
@ -727,6 +763,13 @@
|
||||||
border-left: none;
|
border-left: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.skin-purple .dropdown-menu > .active > a, .skin-purple .dropdown-menu > .active > a:hover, .skin-purple .dropdown-menu > .active > a:focus {
|
||||||
|
color: #fff !important;
|
||||||
|
text-decoration: none;
|
||||||
|
outline: 0;
|
||||||
|
background-color: #605ca8;
|
||||||
|
}
|
||||||
|
|
||||||
.skin-purple .content-tabs {
|
.skin-purple .content-tabs {
|
||||||
border-bottom: 1px solid #e5e5e5;
|
border-bottom: 1px solid #e5e5e5;
|
||||||
}
|
}
|
||||||
|
|
@ -790,7 +833,7 @@
|
||||||
color: #fff
|
color: #fff
|
||||||
}
|
}
|
||||||
|
|
||||||
.theme-dark .nav>li.active {
|
.theme-dark .nav:not(.navbar-toolbar)>li.active {
|
||||||
background: #293846;
|
background: #293846;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -812,7 +855,7 @@
|
||||||
color: #555
|
color: #555
|
||||||
}
|
}
|
||||||
|
|
||||||
.theme-light .nav>li.active{
|
.theme-light .nav:not(.navbar-toolbar)>li.active{
|
||||||
background: #f9fafc;
|
background: #f9fafc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -903,7 +946,7 @@
|
||||||
color: #a3b1cc
|
color: #a3b1cc
|
||||||
}
|
}
|
||||||
|
|
||||||
.theme-blue .nav>li.active{
|
.theme-blue .nav:not(.navbar-toolbar)>li.active{
|
||||||
background-color: rgba(15,41,80,1);
|
background-color: rgba(15,41,80,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -927,6 +970,7 @@
|
||||||
.theme-blue.skin-blue .navbar-default .nav>li.selected>a,
|
.theme-blue.skin-blue .navbar-default .nav>li.selected>a,
|
||||||
.theme-blue.skin-blue .navbar-default .nav>li.selected>a:focus {
|
.theme-blue.skin-blue .navbar-default .nav>li.selected>a:focus {
|
||||||
background-color: #1890ff;
|
background-color: #1890ff;
|
||||||
|
color: rgba(255,255,255,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.theme-blue.skin-green .navbar-default .nav>li.active>a {
|
.theme-blue.skin-green .navbar-default .nav>li.active>a {
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ a:focus {
|
||||||
/*white-space: nowrap;*/
|
/*white-space: nowrap;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav.navbar-right>li>a {
|
.nav.navbar-right>li>a, .nav.navbar-left>li>a {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
|
|
@ -57,7 +57,7 @@ a:focus {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav.navbar-right>li>a>.label {
|
.nav.navbar-right>li>a>.label, .nav.navbar-left>li>a>.label {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 9px;
|
top: 9px;
|
||||||
right: 5px;
|
right: 5px;
|
||||||
|
|
@ -66,7 +66,7 @@ a:focus {
|
||||||
padding: 2px 4px;
|
padding: 2px 4px;
|
||||||
line-height: .9;
|
line-height: .9;
|
||||||
}
|
}
|
||||||
.nav.navbar-right>li>a:hover {
|
.nav.navbar-right>li>a:hover, .nav.navbar-left>li>a:hover {
|
||||||
background-color: #367fa9;
|
background-color: #367fa9;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
@ -280,6 +280,8 @@ body.body-small .navbar-top-links li:last-child {
|
||||||
|
|
||||||
.nav-second-level li, .nav-third-level li {
|
.nav-second-level li, .nav-third-level li {
|
||||||
border-bottom: none !important;
|
border-bottom: none !important;
|
||||||
|
padding-left: 2px;
|
||||||
|
padding-right: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-second-level li a {
|
.nav-second-level li a {
|
||||||
|
|
@ -288,7 +290,7 @@ body.body-small .navbar-top-links li:last-child {
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-third-level li a {
|
.nav-third-level li a {
|
||||||
padding-left: 62px;
|
padding-left: 70px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-second-level li:last-child {
|
.nav-second-level li:last-child {
|
||||||
|
|
@ -307,6 +309,10 @@ body.mini-navbar .navbar-default .nav>li>.nav-second-level li a {
|
||||||
border-radius: 0 2px 2px 0;
|
border-radius: 0 2px 2px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.mini-navbar .navbar-default .nav>li>.nav-third-level li a {
|
||||||
|
padding-left: 31px;
|
||||||
|
}
|
||||||
|
|
||||||
.fixed-nav .slimScrollDiv #side-menu {
|
.fixed-nav .slimScrollDiv #side-menu {
|
||||||
padding-bottom: 60px;
|
padding-bottom: 60px;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
@ -479,7 +485,6 @@ body.body-small.fixed-sidebar.mini-navbar .navbar-static-side {
|
||||||
padding: 10px 10px 10px 10px;
|
padding: 10px 10px 10px 10px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background-color: #243747;
|
background-color: #243747;
|
||||||
border-bottom: dashed 1px #fff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level {
|
.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level {
|
||||||
|
|
@ -495,6 +500,15 @@ body.body-small.fixed-sidebar.mini-navbar .navbar-static-side {
|
||||||
min-width: 140px;
|
min-width: 140px;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fixed-sidebar.mini-navbar .nav li.active:hover>.nav-second-level, .fixed-sidebar.mini-navbar .nav li.active:hover>a> span.nav-label {
|
||||||
|
left: 67px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-sidebar.mini-navbar .nav .nav-second-level a> span, .fixed-sidebar.mini-navbar .nav .nav-third-level a> span {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
/*伸缩菜单结束*/
|
/*伸缩菜单结束*/
|
||||||
|
|
||||||
body.fixed-sidebar.mini-navbar .navbar-default .nav>li>.nav-second-level li a {
|
body.fixed-sidebar.mini-navbar .navbar-default .nav>li>.nav-second-level li a {
|
||||||
|
|
@ -763,15 +777,15 @@ body.canvas-menu.mini-navbar nav.navbar-static-side {
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-default {
|
.btn-default {
|
||||||
background-color: #c2c2c2;
|
background-color: #f4f4f4;
|
||||||
border-color: #c2c2c2;
|
border-color: #ddd;
|
||||||
color: #FFFFFF;
|
color: #444;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
|
.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
|
||||||
background-color: #bababa;
|
background-color: #e7e7e7;
|
||||||
border-color: #bababa;
|
border-color: #e7e7e7;
|
||||||
color: #FFFFFF;
|
color: #444;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
|
.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
|
||||||
|
|
@ -865,7 +879,7 @@ body.canvas-menu.mini-navbar nav.navbar-static-side {
|
||||||
color: #cacaca;
|
color: #cacaca;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-control, .form-control:focus, .has-error .form-control:focus, .has-success .form-control:focus, .has-warning .form-control:focus, .navbar-collapse, .navbar-form, .navbar-form-custom .form-control:focus, .navbar-form-custom .form-control:hover, .open .btn.dropdown-toggle, .panel, .popover, .progress, .progress-bar {
|
.form-control, .has-error .form-control:focus, .has-success .form-control:focus, .has-warning .form-control:focus, .navbar-collapse, .navbar-form, .navbar-form-custom .form-control:focus, .navbar-form-custom .form-control:hover, .open .btn.dropdown-toggle, .panel, .popover, .progress, .progress-bar {
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1161,6 +1175,8 @@ button.dim:active:before {
|
||||||
/* TOOLTIPS */
|
/* TOOLTIPS */
|
||||||
.tooltip-inner {
|
.tooltip-inner {
|
||||||
background-color: #2F4050;
|
background-color: #2F4050;
|
||||||
|
word-break: break-all;
|
||||||
|
overflow-wrap: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tooltip.top .tooltip-arrow {
|
.tooltip.top .tooltip-arrow {
|
||||||
|
|
@ -1818,18 +1834,23 @@ table.dataTable thead .sorting:after {
|
||||||
.form-control, .single-line {
|
.form-control, .single-line {
|
||||||
background: #FFFFFF none;
|
background: #FFFFFF none;
|
||||||
border: 1px solid #e5e6e7;
|
border: 1px solid #e5e6e7;
|
||||||
border-radius: 1px;
|
border-radius: 4px;
|
||||||
color: inherit;
|
color: inherit;
|
||||||
display: block;
|
display: block;
|
||||||
padding: 6px 12px;
|
padding: 3px 6px 4px;
|
||||||
-webkit-transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;
|
-webkit-transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;
|
||||||
transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;
|
transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: 31px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.form-control.kv-fileinput-caption {
|
||||||
|
height: 34px!important;
|
||||||
|
}
|
||||||
|
|
||||||
.form-control:focus, .single-line:focus {
|
.form-control:focus, .single-line:focus {
|
||||||
border-color: #1ab394 !important;
|
border-color: #3c8dbc !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.has-success .form-control {
|
.has-success .form-control {
|
||||||
|
|
@ -1858,8 +1879,8 @@ table.dataTable thead .sorting:after {
|
||||||
|
|
||||||
.input-group-addon {
|
.input-group-addon {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border: 1px solid #E5E6E7;
|
border: 1px solid #e5e6e7;
|
||||||
border-radius: 1px;
|
border-radius: 4px;
|
||||||
color: inherit;
|
color: inherit;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
|
|
@ -3249,7 +3270,7 @@ body.body-small .footer.fixed {
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 39px;
|
height: 39px;
|
||||||
background: #fafafa;
|
background: #fafafa;
|
||||||
line-height: 38px;
|
line-height: 39px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content-tabs .roll-nav, .page-tabs-list {
|
.content-tabs .roll-nav, .page-tabs-list {
|
||||||
|
|
@ -4916,13 +4937,14 @@ dd.project-people {
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Chat view */
|
/* Chat view */
|
||||||
.message-input {
|
.message-input {
|
||||||
height: 90px !important;
|
height: 90px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-avatar {
|
.chat-avatar {
|
||||||
white: 36px;
|
width: 36px;
|
||||||
height: 36px;
|
height: 36px;
|
||||||
float: left;
|
float: left;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
|
|
@ -4950,8 +4972,9 @@ dd.project-people {
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 992px) {
|
@media (max-width: 992px) {
|
||||||
.chat-users, .chat-statistic {
|
.chat-users,
|
||||||
margin-left: 0px;
|
.chat-statistic {
|
||||||
|
margin-left: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4971,12 +4994,12 @@ dd.project-people {
|
||||||
margin-top: 1px;
|
margin-top: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-discussion .chat-message:nth-child(2n+1) .message-avatar {
|
.chat-discussion .chat-message.left .message-avatar {
|
||||||
float: left;
|
float: left;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-discussion .chat-message:nth-child(2n) .message-avatar {
|
.chat-discussion .chat-message.right .message-avatar {
|
||||||
float: right;
|
float: right;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
@ -4991,20 +5014,20 @@ dd.project-people {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-discussion .chat-message:nth-child(2n+1) .message-date {
|
.chat-discussion .chat-message.left .message-date {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-discussion .chat-message:nth-child(2n) .message-date {
|
.chat-discussion .chat-message.right .message-date {
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-discussion .chat-message:nth-child(2n+1) .message {
|
.chat-discussion .chat-message.left .message {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
margin-left: 55px;
|
margin-left: 55px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-discussion .chat-message:nth-child(2n) .message {
|
.chat-discussion .chat-message.right .message {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
margin-right: 55px;
|
margin-right: 55px;
|
||||||
}
|
}
|
||||||
|
|
@ -5033,6 +5056,7 @@ dd.project-people {
|
||||||
.chat-message-form .form-group {
|
.chat-message-form .form-group {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* jsTree */
|
/* jsTree */
|
||||||
.jstree-open>.jstree-anchor>.fa-folder:before {
|
.jstree-open>.jstree-anchor>.fa-folder:before {
|
||||||
content: "\f07c";
|
content: "\f07c";
|
||||||
|
|
@ -6865,7 +6889,7 @@ body.rtls .top-navigation .footer.fixed, body.rtls.top-navigation .footer.fixed
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-header {
|
.navbar-header {
|
||||||
width: 10%;
|
/* width: 10%; */
|
||||||
height: 50px;
|
height: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6939,7 +6963,7 @@ body.rtls .top-navigation .footer.fixed, body.rtls.top-navigation .footer.fixed
|
||||||
background: #f5f5f5;
|
background: #f5f5f5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav .logo {
|
nav .logo {
|
||||||
background-color: #367fa9;
|
background-color: #367fa9;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
border-bottom: 0 solid transparent;
|
border-bottom: 0 solid transparent;
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ user.password.not.valid=* 5-50个字符
|
||||||
user.email.not.valid=邮箱格式错误
|
user.email.not.valid=邮箱格式错误
|
||||||
user.mobile.phone.number.not.valid=手机号格式错误
|
user.mobile.phone.number.not.valid=手机号格式错误
|
||||||
user.login.success=登录成功
|
user.login.success=登录成功
|
||||||
|
user.register.success=注册成功
|
||||||
user.notfound=请重新登录
|
user.notfound=请重新登录
|
||||||
user.forcelogout=管理员强制退出,请重新登录
|
user.forcelogout=管理员强制退出,请重新登录
|
||||||
user.unknown.error=未知错误,请重新登录
|
user.unknown.error=未知错误,请重新登录
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 4.0 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
||||||
|
(function(c,a,e){var b,d="resizeTabs",f={navSelector:".nav-tabs",itemSelector:">li",dropdownSelector:">.dropdown",dropdownItemSelector:"li",tabParentSelector:"",tabSelector:".tab-pane",activeClassName:"active",noNavClassName:".no-menu",fnCallback:""};b=function(j,i){var h=this.$tabs=e(j),k=this.options=e.extend(true,{},f,i),g=this.$nav=h.find(k.navSelector),l=this.$dropdown=g.find(k.dropdownSelector);this.$items=g.find(k.itemSelector).filter(function(){return !e(this).is(l)});this.$dropdownItems=l.find(k.dropdownItemSelector);if(k.tabParentSelector!==""){this.$tabPanel=e(k.tabParentSelector).find(k.tabSelector)}else{this.$tabPanel=h.find(k.tabSelector)}this.init()};b.prototype={init:function(){var j=this.itemsLenth=this.$items.length,h;if(j===0){throw"There should be some tags here "}if(this.$dropdown.length===0){this.flag=true;this.$nav.append('<li class="dropdown" role="presentation">'+'<a class="dropdown-toggle" data-toggle="dropdown" href="#" aria-expanded="false">'+'<i class="glyphicon glyphicon-align-justify"></i> <b class="caret"></b></a><ul class="dropdown-menu" role="menu"></ul></li>');this.$dropdown=this.$nav.find(this.options.dropdownSelector);this.$dropdown.css("opacity",0);h=this.$dropdown.width();h=h===0?90:h;this.$dropdown.addClass("hidden").css("opacity",1)}else{h=this.$dropdown.width()}this.breakpoints=[];for(var g=0;g<j+1;g++){var k=this.$items.eq(g).width(),l=0;switch(g){case 0:l=k+h;break;case j-1:l=this.breakpoints[g-1]+k-h;break;case j:l=this.breakpoints[g-1]+h;break;default:l=this.breakpoints[g-1]+k}this.breakpoints.push(l)}if(typeof this.options.fnCallback==="function"){this.options.fnCallback(this.$tabs)}this.bind();this.layout()},layout:function(){if(this.breakpoints.length<=0){return}var l=this.$tabs.width()-500,j=0,h=this,g=this.options.activeClassName,m=this.$tabPanel.filter("."+g).index(),k=function(p){var o=p;if(p===h.itemsLenth){o=p-1}for(;o<h.itemsLenth;o++){if(h.flag){h.$dropdown.find("ul").append(h.$items.eq(o).prop("outerHTML"))}else{h.$dropdown.find("ul>li"+h.options.noNavClassName+":first").before(h.$items.eq(o).prop("outerHTML"))}h.$items.eq(o).hide()}},n=function(p){for(var o=0;o<h.itemsLenth+1;o++){if(o<p){h.$items.eq(o).show()}else{k(p);h.$dropdown.find("ul>li").show();break}}h.$dropdownItems=h.$dropdown.find(h.options.dropdownItemSelector)};for(;j<this.breakpoints.length;j++){if(this.breakpoints[j]>l){break}}this.$items.removeClass(g);this.$dropdownItems.removeClass(g);this.$dropdown.removeClass(g);if(j===this.breakpoints.length){if(this.flag){this.$dropdown.addClass("hidden")}else{this.$dropdown.find("ul>li:not(li"+this.options.noNavClassName+")").remove()}this.$items.show();if(m!=-1){this.$items.eq(m-1).addClass(g)}}else{this.$dropdown.removeClass("hidden");if(this.flag){this.$dropdown.find("ul>li").remove()}else{this.$dropdown.find("ul>li:not(li"+this.options.noNavClassName+")").remove()}n(j);if(m<j){if(m!=-1){this.$items.eq(m-1).addClass(g)}}else{this.$dropdown.addClass(g);this.$dropdownItems.eq(m-j).addClass(g)}}},throttle:function(h,g){var k=h,j,i=true;return function(){var m=arguments,l=this;if(i){k.apply(l,m);i=false}if(j){return false}j=setInterval(function(){clearInterval(j);j=null;k.apply(l,m)},g||500)}},bind:function(){var g=this;e(c).resize(function(){g.throttle(function(){g.layout()},1000)()})}};e.fn[d]=function(g){if(typeof g==="string"){var i=g,h=Array.prototype.slice.call(arguments,1);if(/^_/.test(i)){console.error("No such method : "+g)}else{return this.each(function(){var j=e.data(this,d);if(j&&typeof j[i]==="function"){j[i].apply(j,h)}})}}else{return this.each(function(){if(!e.data(this,d)){e.data(this,d,new b(this,g))}else{e.data(this,d).init()}})}}})(window,document,jQuery);$("#navMenu").resizeTabs({tabParentSelector:"#side-menu"});
|
||||||
|
|
@ -322,12 +322,18 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 表单验证 样式布局 **/
|
/** 表单验证 样式布局 **/
|
||||||
|
.control-label.is-required:before {
|
||||||
|
content: '* ';
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
label.error {
|
label.error {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 18px;
|
right: 18px;
|
||||||
top: 10px;
|
top: 6px;
|
||||||
color: #ef392b;
|
color: #ef392b;
|
||||||
font-size: 12px
|
font-size: 12px;
|
||||||
|
z-index:99;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-group label.error {
|
.input-group label.error {
|
||||||
|
|
@ -335,12 +341,16 @@ label.error {
|
||||||
right: 42px
|
right: 42px
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.input-group input.error + label.error + .input-group-addon>i {
|
||||||
|
color: #ed5565;
|
||||||
|
}
|
||||||
|
|
||||||
.input-group.date label.error {
|
.input-group.date label.error {
|
||||||
z-index:99;
|
z-index:99;
|
||||||
right: 3px
|
right: 3px
|
||||||
}
|
}
|
||||||
|
|
||||||
.Validform_error,input.error,select.error {
|
.Validform_error,input.error,textarea.error,select.error {
|
||||||
background-color: #fbe2e2;
|
background-color: #fbe2e2;
|
||||||
border-color: #c66161;
|
border-color: #c66161;
|
||||||
color: #c00
|
color: #c00
|
||||||
|
|
@ -638,10 +648,10 @@ label {
|
||||||
margin: 5px 15px 5px 0px;
|
margin: 5px 15px 5px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select-list li p{
|
.select-list li p, .select-list li label:not(.radio-box){
|
||||||
float: left;
|
float: left;
|
||||||
width: 65px;
|
width: 65px;
|
||||||
margin: 5px 5px 5px 0px;
|
margin: 5px 0px 0px 0px;
|
||||||
text-align:right;
|
text-align:right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -675,11 +685,11 @@ label {
|
||||||
|
|
||||||
.bootstrap-select.form-control .btn-default {
|
.bootstrap-select.form-control .btn-default {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
padding: 6px 12px;
|
padding: 4px 6px 4px;
|
||||||
border-radius: 1px;
|
border-radius: 4px;
|
||||||
border: 1px solid #e5e6e7;
|
border: 1px solid #e5e6e7;
|
||||||
outline: none;
|
outline: none;
|
||||||
height: 34px;
|
height: 31px;
|
||||||
background: #FFFFFF none
|
background: #FFFFFF none
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -807,16 +817,34 @@ label {
|
||||||
min-height: 75%;
|
min-height: 75%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table-striped .bootstrap-table {
|
.table-striped .bootstrap-table, .table-striped .table-bordered {
|
||||||
border: 0px!important;
|
border: 0px!important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table-striped .table, .table-striped .table, .table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td {
|
.table-bordered .table>thead>tr>th, .table-bordered .table>tbody>tr>th {
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 13px
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-striped table>thead>tr>th, .table-striped table>tbody>tr>th, .table-striped table>tfoot>tr>th, .table-striped table>thead>tr>td, .table-striped table>tbody>tr>td, .table-striped table>tfoot>tr>td {
|
||||||
border-bottom: 1px solid #e7eaec!important;
|
border-bottom: 1px solid #e7eaec!important;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
border: 0px;
|
border: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.table-bordered table>thead>tr>th:first-child, .table-bordered table>tbody>tr>td:first-child {
|
||||||
|
border-left: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-bordered table>thead>tr>th:last-child, .table-bordered table>tbody>tr>td:last-child {
|
||||||
|
border-right: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-bordered table>thead>tr>th, .table-bordered table>tbody>tr>td {
|
||||||
|
border-top: 1px solid #ddd!important;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
.fixed-table-footer {
|
.fixed-table-footer {
|
||||||
border-top: 0px solid #ddd;
|
border-top: 0px solid #ddd;
|
||||||
}
|
}
|
||||||
|
|
@ -828,20 +856,14 @@ label {
|
||||||
.table-striped .table>thead>tr>th, .table-striped .table>tbody>tr>th {
|
.table-striped .table>thead>tr>th, .table-striped .table>tbody>tr>th {
|
||||||
border-bottom: 1px solid #ccc!important;
|
border-bottom: 1px solid #ccc!important;
|
||||||
border-top: 0px!important;
|
border-top: 0px!important;
|
||||||
}
|
|
||||||
|
|
||||||
.table-striped .table>thead:first-child>tr:first-child>th {
|
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-size: 13px
|
font-size: 13px
|
||||||
}
|
}
|
||||||
|
|
||||||
.table-striped table thead {
|
.table-striped table thead {
|
||||||
background-color: #eff3f8;
|
background-color: #eff3f8;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table-bordered td,.table-bordered th {
|
|
||||||
border: 1px solid #ddd!important
|
|
||||||
}
|
|
||||||
|
|
||||||
.fixed-table-container thead th >.both{
|
.fixed-table-container thead th >.both{
|
||||||
display: inline-block
|
display: inline-block
|
||||||
}
|
}
|
||||||
|
|
@ -851,39 +873,35 @@ label {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 表格冻结列样式 **/
|
/** 表格冻结列样式 **/
|
||||||
.left-fixed-table-columns, .left-fixed-body-columns {
|
.fixed-columns, .fixed-columns-right {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
height: 100%;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
display: none;
|
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
overflow: hidden;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.left-fixed-table-columns .table, .left-fixed-body-columns .table {
|
.fixed-columns {
|
||||||
border-right: 1px solid #ddd;
|
left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.left-fixed-table-columns .table.table-no-bordered, .left-fixed-body-columns .table.table-no-bordered {
|
.fixed-columns .fixed-table-body {
|
||||||
border-right: 1px solid transparent;
|
overflow: hidden !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.left-fixed-body-columns table {
|
.fixed-columns-right {
|
||||||
position: absolute;
|
right: 0;
|
||||||
animation: none;
|
}
|
||||||
|
|
||||||
|
.fixed-columns-right .fixed-table-body {
|
||||||
|
overflow-x: hidden !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bootstrap-table .table-hover > tbody > tr.hover > td {
|
.bootstrap-table .table-hover > tbody > tr.hover > td {
|
||||||
background-color: #f5f5f5;
|
background-color: #f5f5f5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.right-fixed-table-columns{
|
|
||||||
position: absolute;
|
|
||||||
right:63px;
|
|
||||||
border-left:1px solid #ddd;
|
|
||||||
display: none;
|
|
||||||
z-index:100;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 表格树样式 **/
|
/** 表格树样式 **/
|
||||||
.bootstrap-tree-table .treetable-indent {width:16px; height: 16px; display: inline-block; position: relative;}
|
.bootstrap-tree-table .treetable-indent {width:16px; height: 16px; display: inline-block; position: relative;}
|
||||||
.bootstrap-tree-table .treetable-expander {width:16px; height: 16px; display: inline-block; position: relative; cursor: pointer;}
|
.bootstrap-tree-table .treetable-expander {width:16px; height: 16px; display: inline-block; position: relative; cursor: pointer;}
|
||||||
|
|
@ -893,7 +911,7 @@ label {
|
||||||
.bootstrap-tree-table .treetable-table thead, .treetable-table tbody tr {display:table;width:100%;table-layout:fixed;}
|
.bootstrap-tree-table .treetable-table thead, .treetable-table tbody tr {display:table;width:100%;table-layout:fixed;}
|
||||||
.bootstrap-tree-table .treetable-thead th{line-height:24px;border: 0 !important;border-radius: 4px;border-left:0px solid #e7eaec !important;border-bottom:1px solid #ccc!important;text-align: left;}
|
.bootstrap-tree-table .treetable-thead th{line-height:24px;border: 0 !important;border-radius: 4px;border-left:0px solid #e7eaec !important;border-bottom:1px solid #ccc!important;text-align: left;}
|
||||||
.bootstrap-tree-table .treetable-thead tr :first-child{border-left:0 !important}
|
.bootstrap-tree-table .treetable-thead tr :first-child{border-left:0 !important}
|
||||||
.bootstrap-tree-table .treetable-tbody td{overflow:hidden;border: 0 !important;border-left:0px solid #e7eaec !important;border-bottom:1px solid #e7eaec!important;white-space: nowrap; text-overflow: ellipsis;}
|
.bootstrap-tree-table .treetable-tbody td{border: 0 !important;border-left:0px solid #e7eaec !important;border-bottom:1px solid #e7eaec!important;white-space: nowrap; text-overflow: ellipsis;}
|
||||||
.bootstrap-tree-table .treetable-tbody tr :first-child{border-left:0 !important}
|
.bootstrap-tree-table .treetable-tbody tr :first-child{border-left:0 !important}
|
||||||
.bootstrap-tree-table .treetable-bars .tool-left, .bootstrap-tree-table .treetable-bars .tool-right{margin-top: 10px; margin-bottom: 10px;}
|
.bootstrap-tree-table .treetable-bars .tool-left, .bootstrap-tree-table .treetable-bars .tool-right{margin-top: 10px; margin-bottom: 10px;}
|
||||||
.bootstrap-tree-table .treetable-bars .tool-left{float: left;}
|
.bootstrap-tree-table .treetable-bars .tool-left{float: left;}
|
||||||
|
|
@ -988,7 +1006,7 @@ label {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 表格选中样式 **/
|
/** 表格选中样式 **/
|
||||||
.fixed-table-container .selected {
|
.bootstrap-table .fixed-table-container .table tbody tr.selected td {
|
||||||
background-color: #E8F7FD;
|
background-color: #E8F7FD;
|
||||||
color: #1890ff;
|
color: #1890ff;
|
||||||
}
|
}
|
||||||
|
|
@ -998,13 +1016,98 @@ label {
|
||||||
background-color: #F5F5F5;
|
background-color: #F5F5F5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 气泡弹出框样式 **/
|
||||||
|
.popover {
|
||||||
|
font-size: 13px;
|
||||||
|
max-width: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popover-title {
|
||||||
|
padding: 8px 14px;
|
||||||
|
margin: 0 !important;
|
||||||
|
font-size: 14px;
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
border-bottom: 1px solid #ebebeb;
|
||||||
|
border-radius: 5px 5px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popover-content {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 向上滚动样式 **/
|
||||||
|
#scroll-up {
|
||||||
|
border-width: 0;
|
||||||
|
position: fixed;
|
||||||
|
right: 2px;
|
||||||
|
z-index: 99;
|
||||||
|
-webkit-transition-duration: .3s;
|
||||||
|
transition-duration: .3s;
|
||||||
|
opacity: 0;
|
||||||
|
filter: alpha(opacity=0);
|
||||||
|
bottom: -24px;
|
||||||
|
visibility: hidden;
|
||||||
|
background-color: #aaa;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 14px;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scroll-up.display {
|
||||||
|
opacity: .7;
|
||||||
|
filter: alpha(opacity=70);
|
||||||
|
bottom: 2px;
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 设置菜单样式 */
|
||||||
|
.menu-content {
|
||||||
|
padding: 10px 10px 10px 25px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-content > .tab-pane {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-content > .active {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.height-full {
|
||||||
|
height: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 设置滚动条样式 */
|
||||||
::-webkit-scrollbar {
|
::-webkit-scrollbar {
|
||||||
width: 6px;
|
width:10px!important;
|
||||||
height: 10px;
|
height:10px!important;
|
||||||
background-color: #F5F5F5;
|
-webkit-appearance:none;
|
||||||
|
background:#f1f1f1
|
||||||
}
|
}
|
||||||
|
|
||||||
::-webkit-scrollbar-thumb {
|
::-webkit-scrollbar-thumb {
|
||||||
|
height:5px;
|
||||||
|
border:1px solid transparent;
|
||||||
|
border-top:0;
|
||||||
|
border-bottom:0;
|
||||||
border-radius:6px;
|
border-radius:6px;
|
||||||
background-color: #999;
|
background-color:#ccc;
|
||||||
|
background-clip:padding-box
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 设置placeholder样式 */
|
||||||
|
::-webkit-input-placeholder {
|
||||||
|
color: #b3b3b3!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
:-moz-placeholder {
|
||||||
|
color: #b3b3b3!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-moz-placeholder {
|
||||||
|
color: #b3b3b3!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
:-ms-input-placeholder {
|
||||||
|
color: #b3b3b3!important;
|
||||||
}
|
}
|
||||||
|
|
@ -7,33 +7,37 @@ layer.config({
|
||||||
skin: 'layer-ext-moon'
|
skin: 'layer-ext-moon'
|
||||||
});
|
});
|
||||||
|
|
||||||
var currentMenuId = null;
|
var isMobile = false;
|
||||||
|
var sidebarHeight = isMobile ? '100%' : '96%';
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
// MetsiMenu
|
// MetsiMenu
|
||||||
$('#side-menu').metisMenu();
|
$('#side-menu').metisMenu();
|
||||||
|
|
||||||
// 固定菜单栏
|
// 固定菜单栏
|
||||||
$(function() {
|
|
||||||
$('.sidebar-collapse').slimScroll({
|
$('.sidebar-collapse').slimScroll({
|
||||||
height: '100%',
|
height: sidebarHeight,
|
||||||
railOpacity: 0.9,
|
railOpacity: 0.9,
|
||||||
alwaysVisible: false
|
alwaysVisible: false
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
// 菜单切换
|
// 菜单切换
|
||||||
$('.navbar-minimalize').click(function() {
|
$('.navbar-minimalize').click(function() {
|
||||||
|
if (isMobile) {
|
||||||
|
$("body").toggleClass("canvas-menu");
|
||||||
|
} else {
|
||||||
$("body").toggleClass("mini-navbar");
|
$("body").toggleClass("mini-navbar");
|
||||||
|
}
|
||||||
SmoothlyMenu();
|
SmoothlyMenu();
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#side-menu>li').click(function() {
|
$('#side-menu>li').click(function() {
|
||||||
if ($('body').hasClass('mini-navbar')) {
|
if ($('body').hasClass('canvas-menu mini-navbar')) {
|
||||||
NavToggle();
|
NavToggle();
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
$('#side-menu>li li a').click(function() {
|
$('#side-menu>li li a:not(:has(span))').click(function() {
|
||||||
if ($(window).width() < 769) {
|
if ($(window).width() < 769) {
|
||||||
NavToggle();
|
NavToggle();
|
||||||
}
|
}
|
||||||
|
|
@ -48,35 +52,71 @@ $(function() {
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$(window).bind("load resize",
|
$(window).bind("load resize", function() {
|
||||||
function() {
|
isMobile = $.common.isMobile() || $(window).width() < 769;
|
||||||
if ($(this).width() < 769) {
|
if (isMobile) {
|
||||||
$('body').addClass('mini-navbar');
|
$('body').addClass('canvas-menu');
|
||||||
|
$("body").removeClass("mini-navbar");
|
||||||
|
$("nav .logo").addClass("hide");
|
||||||
|
$(".slimScrollDiv").css({ "overflow": "hidden" });
|
||||||
|
$('.navbar-static-side').fadeOut();
|
||||||
|
} else {
|
||||||
|
if($('body').hasClass('canvas-menu')) {
|
||||||
|
$('body').addClass('fixed-sidebar');
|
||||||
|
$('body').removeClass('canvas-menu');
|
||||||
|
$("body").removeClass("mini-navbar");
|
||||||
|
$("nav .logo").removeClass("hide");
|
||||||
|
$(".slimScrollDiv").css({ "overflow": "visible" });
|
||||||
$('.navbar-static-side').fadeIn();
|
$('.navbar-static-side').fadeIn();
|
||||||
$(".sidebar-collapse .logo").addClass("hide");
|
}
|
||||||
$(".slimScrollDiv").css({ "overflow":"hidden" })
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function syncMenuTab(dataId) {
|
||||||
|
if(isLinkage) {
|
||||||
|
var $dataObj = $('a[href$="' + decodeURI(dataId) + '"]');
|
||||||
|
if ($dataObj.attr("class") != null && !$dataObj.hasClass("noactive")) {
|
||||||
|
$('.nav ul').removeClass("in");
|
||||||
|
$dataObj.parents("ul").addClass("in")
|
||||||
|
$dataObj.parents("li").addClass("active").siblings().removeClass("active").find('li').removeClass("active");
|
||||||
|
$dataObj.parents("ul").css('height', 'auto').height();
|
||||||
|
$dataObj.click();
|
||||||
|
// 顶部菜单同步处理
|
||||||
|
var tabStr = $dataObj.parents(".tab-pane").attr("id");
|
||||||
|
if ($.common.isNotEmpty(tabStr)) {
|
||||||
|
var sepIndex = tabStr.lastIndexOf('_');
|
||||||
|
var menuId = tabStr.substring(sepIndex + 1, tabStr.length);
|
||||||
|
$("#tab_" + menuId + " a").click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function NavToggle() {
|
function NavToggle() {
|
||||||
$('.navbar-minimalize').trigger('click');
|
$('.navbar-minimalize').trigger('click');
|
||||||
}
|
}
|
||||||
|
|
||||||
function SmoothlyMenu() {
|
function fixedSidebar() {
|
||||||
if (!$('body').hasClass('mini-navbar')) {
|
|
||||||
$('#side-menu').hide();
|
$('#side-menu').hide();
|
||||||
$(".sidebar-collapse .logo").removeClass("hide");
|
$("nav .logo").addClass("hide");
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
$('#side-menu').fadeIn(500);
|
$('#side-menu').fadeIn(500);
|
||||||
},
|
},
|
||||||
100);
|
100);
|
||||||
} else if ($('body').hasClass('fixed-sidebar')) {
|
}
|
||||||
$('#side-menu').hide();
|
|
||||||
$(".sidebar-collapse .logo").addClass("hide");
|
function SmoothlyMenu() {
|
||||||
setTimeout(function() {
|
if (isMobile && !$('body').hasClass('canvas-menu')) {
|
||||||
$('#side-menu').fadeIn(500);
|
$('.navbar-static-side').fadeIn();
|
||||||
},
|
fixedSidebar();
|
||||||
300);
|
} else if (!isMobile &&!$('body').hasClass('mini-navbar')) {
|
||||||
|
fixedSidebar();
|
||||||
|
$("nav .logo").removeClass("hide");
|
||||||
|
} else if (isMobile && $('body').hasClass('fixed-sidebar')) {
|
||||||
|
$('.navbar-static-side').fadeOut();
|
||||||
|
fixedSidebar();
|
||||||
|
} else if (!isMobile && $('body').hasClass('fixed-sidebar')) {
|
||||||
|
fixedSidebar();
|
||||||
} else {
|
} else {
|
||||||
$('#side-menu').removeAttr('style');
|
$('#side-menu').removeAttr('style');
|
||||||
}
|
}
|
||||||
|
|
@ -99,6 +139,7 @@ $(function() {
|
||||||
function setActiveTab(element) {
|
function setActiveTab(element) {
|
||||||
if (!$(element).hasClass('active')) {
|
if (!$(element).hasClass('active')) {
|
||||||
var currentId = $(element).data('id');
|
var currentId = $(element).data('id');
|
||||||
|
syncMenuTab(currentId);
|
||||||
// 显示tab对应的内容区
|
// 显示tab对应的内容区
|
||||||
$('.RuoYi_iframe').each(function() {
|
$('.RuoYi_iframe').each(function() {
|
||||||
if ($(this).data('id') == currentId) {
|
if ($(this).data('id') == currentId) {
|
||||||
|
|
@ -215,14 +256,22 @@ $(function() {
|
||||||
|
|
||||||
function menuItem() {
|
function menuItem() {
|
||||||
// 获取标识数据
|
// 获取标识数据
|
||||||
var dataUrl = $(this).attr('href');
|
var dataUrl = $(this).attr('href'),
|
||||||
dataIndex = $(this).data('index');
|
dataIndex = $(this).data('index'),
|
||||||
menuName = $.trim($(this).text());
|
menuName = $.trim($(this).text()),
|
||||||
currentMenuId = $(this).attr('id');
|
|
||||||
flag = true;
|
flag = true;
|
||||||
|
|
||||||
|
var $dataObj = $('a[href$="' + decodeURI(dataUrl) + '"]');
|
||||||
|
if (!$dataObj.hasClass("noactive")) {
|
||||||
|
$('.tab-pane li').removeClass("active");
|
||||||
|
$('.nav ul').removeClass("in");
|
||||||
|
$dataObj.parents("ul").addClass("in")
|
||||||
|
$dataObj.parents("li").addClass("active").siblings().removeClass("active").find('li').removeClass("active");
|
||||||
|
$dataObj.parents("ul").css('height', 'auto').height();
|
||||||
$(".nav ul li, .nav li").removeClass("selected");
|
$(".nav ul li, .nav li").removeClass("selected");
|
||||||
$(this).parent("li").addClass("selected");
|
$(this).parent("li").addClass("selected");
|
||||||
setIframeUrl($(this).attr("href"));
|
}
|
||||||
|
setIframeUrl(dataUrl);
|
||||||
if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false;
|
if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false;
|
||||||
|
|
||||||
// 选项卡菜单已存在
|
// 选项卡菜单已存在
|
||||||
|
|
@ -245,7 +294,7 @@ $(function() {
|
||||||
});
|
});
|
||||||
// 选项卡菜单不存在
|
// 选项卡菜单不存在
|
||||||
if (flag) {
|
if (flag) {
|
||||||
var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '" id="'+ currentMenuId +'">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
|
var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
|
||||||
$('.menuTab').removeClass('active');
|
$('.menuTab').removeClass('active');
|
||||||
|
|
||||||
// 添加选项卡对应的iframe
|
// 添加选项卡对应的iframe
|
||||||
|
|
@ -287,9 +336,7 @@ $(function() {
|
||||||
// 当前元素后面有同辈元素,使后面的一个元素处于活动状态
|
// 当前元素后面有同辈元素,使后面的一个元素处于活动状态
|
||||||
if ($(this).parents('.menuTab').next('.menuTab').size()) {
|
if ($(this).parents('.menuTab').next('.menuTab').size()) {
|
||||||
|
|
||||||
var toShow = $(this).parents('.menuTab').next('.menuTab:eq(0)');
|
var activeId = $(this).parents('.menuTab').next('.menuTab:eq(0)').data('id');
|
||||||
var activeId = toShow.data('id');
|
|
||||||
currentMenuId = toShow.attr('id');
|
|
||||||
$(this).parents('.menuTab').next('.menuTab:eq(0)').addClass('active');
|
$(this).parents('.menuTab').next('.menuTab:eq(0)').addClass('active');
|
||||||
|
|
||||||
$('.mainContent .RuoYi_iframe').each(function() {
|
$('.mainContent .RuoYi_iframe').each(function() {
|
||||||
|
|
@ -321,9 +368,7 @@ $(function() {
|
||||||
|
|
||||||
// 当前元素后面没有同辈元素,使当前元素的上一个元素处于活动状态
|
// 当前元素后面没有同辈元素,使当前元素的上一个元素处于活动状态
|
||||||
if ($(this).parents('.menuTab').prev('.menuTab').size()) {
|
if ($(this).parents('.menuTab').prev('.menuTab').size()) {
|
||||||
var toShow = $(this).parents('.menuTab').prev('.menuTab:last');
|
var activeId = $(this).parents('.menuTab').prev('.menuTab:last').data('id');
|
||||||
var activeId = toShow.data('id');
|
|
||||||
currentMenuId = toShow.attr('id');
|
|
||||||
$(this).parents('.menuTab').prev('.menuTab:last').addClass('active');
|
$(this).parents('.menuTab').prev('.menuTab:last').addClass('active');
|
||||||
$('.mainContent .RuoYi_iframe').each(function() {
|
$('.mainContent .RuoYi_iframe').each(function() {
|
||||||
if ($(this).data('id') == activeId) {
|
if ($(this).data('id') == activeId) {
|
||||||
|
|
@ -368,6 +413,7 @@ $(function() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
scrollToTab($('.menuTab.active'));
|
scrollToTab($('.menuTab.active'));
|
||||||
|
syncMenuTab($('.page-tabs-content').find('.active').attr('data-id'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -383,7 +429,7 @@ $(function() {
|
||||||
function activeTab() {
|
function activeTab() {
|
||||||
if (!$(this).hasClass('active')) {
|
if (!$(this).hasClass('active')) {
|
||||||
var currentId = $(this).data('id');
|
var currentId = $(this).data('id');
|
||||||
currentMenuId = $(this).attr('id');
|
syncMenuTab(currentId);
|
||||||
// 显示tab对应的内容区
|
// 显示tab对应的内容区
|
||||||
$('.mainContent .RuoYi_iframe').each(function() {
|
$('.mainContent .RuoYi_iframe').each(function() {
|
||||||
if ($(this).data('id') == currentId) {
|
if ($(this).data('id') == currentId) {
|
||||||
|
|
@ -439,6 +485,7 @@ $(function() {
|
||||||
$(this).addClass("active");
|
$(this).addClass("active");
|
||||||
});
|
});
|
||||||
$('.page-tabs-content').css("margin-left", "0");
|
$('.page-tabs-content').css("margin-left", "0");
|
||||||
|
syncMenuTab($('.page-tabs-content').find('.active').attr('data-id'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,11 @@ $(function() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 回到顶部绑定
|
||||||
|
if ($.fn.toTop !== undefined) {
|
||||||
|
$('#scroll-up').toTop();
|
||||||
|
}
|
||||||
|
|
||||||
// select2复选框事件绑定
|
// select2复选框事件绑定
|
||||||
if ($.fn.select2 !== undefined) {
|
if ($.fn.select2 !== undefined) {
|
||||||
$.fn.select2.defaults.set( "theme", "bootstrap" );
|
$.fn.select2.defaults.set( "theme", "bootstrap" );
|
||||||
|
|
@ -32,6 +37,30 @@ $(function() {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 气泡弹出框特效(移到元素时)
|
||||||
|
$(document).on("mouseenter", '.table [data-toggle="popover"]', function() {
|
||||||
|
var _this = this;
|
||||||
|
$(this).popover("show");
|
||||||
|
$(".popover").on("mouseleave", function() {
|
||||||
|
$(_this).popover('hide');
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
|
// 气泡弹出框特效(离开元素时)
|
||||||
|
$(document).on("mouseleave", '.table [data-toggle="popover"]', function() {
|
||||||
|
var _this = this;
|
||||||
|
setTimeout(function() {
|
||||||
|
if (!$(".popover:hover").length) $(_this).popover("hide");
|
||||||
|
}, 100);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 取消回车自动提交表单
|
||||||
|
$(document).on("keypress", ":input:not(textarea):not([type=submit])", function(event) {
|
||||||
|
if (event.keyCode == 13) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// laydate 时间控件绑定
|
// laydate 时间控件绑定
|
||||||
if ($(".select-time").length > 0) {
|
if ($(".select-time").length > 0) {
|
||||||
layui.use('laydate', function() {
|
layui.use('laydate', function() {
|
||||||
|
|
@ -66,14 +95,15 @@ $(function() {
|
||||||
startDate.config.max.month = date.month - 1;
|
startDate.config.max.month = date.month - 1;
|
||||||
startDate.config.max.date = date.date;
|
startDate.config.max.date = date.date;
|
||||||
} else {
|
} else {
|
||||||
startDate.config.max.year = '';
|
startDate.config.max.year = '2099';
|
||||||
startDate.config.max.month = '';
|
startDate.config.max.month = '12';
|
||||||
startDate.config.max.date = '';
|
startDate.config.max.date = '31';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// laydate time-input 时间控件绑定
|
// laydate time-input 时间控件绑定
|
||||||
if ($(".time-input").length > 0) {
|
if ($(".time-input").length > 0) {
|
||||||
layui.use('laydate', function () {
|
layui.use('laydate', function () {
|
||||||
|
|
@ -121,6 +151,7 @@ $(function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// tree 关键字搜索绑定
|
// tree 关键字搜索绑定
|
||||||
if ($("#keyword").length > 0) {
|
if ($("#keyword").length > 0) {
|
||||||
$("#keyword").bind("focus", function focusKey(e) {
|
$("#keyword").bind("focus", function focusKey(e) {
|
||||||
|
|
@ -134,6 +165,7 @@ $(function() {
|
||||||
$.tree.searchNode(e);
|
$.tree.searchNode(e);
|
||||||
}).bind("input propertychange", $.tree.searchNode);
|
}).bind("input propertychange", $.tree.searchNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
// tree表格树 展开/折叠
|
// tree表格树 展开/折叠
|
||||||
var expandFlag;
|
var expandFlag;
|
||||||
$("#expandAllBtn").click(function() {
|
$("#expandAllBtn").click(function() {
|
||||||
|
|
@ -146,6 +178,7 @@ $(function() {
|
||||||
}
|
}
|
||||||
expandFlag = expandFlag ? false: true;
|
expandFlag = expandFlag ? false: true;
|
||||||
})
|
})
|
||||||
|
|
||||||
// 按下ESC按钮关闭弹层
|
// 按下ESC按钮关闭弹层
|
||||||
$('body', document).on('keyup', function(e) {
|
$('body', document).on('keyup', function(e) {
|
||||||
if (e.which === 27) {
|
if (e.which === 27) {
|
||||||
|
|
@ -154,6 +187,49 @@ $(function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
(function ($) {
|
||||||
|
'use strict';
|
||||||
|
$.fn.toTop = function(opt) {
|
||||||
|
var elem = this;
|
||||||
|
var win = $(window);
|
||||||
|
var doc = $('html, body');
|
||||||
|
var options = $.extend({
|
||||||
|
autohide: true,
|
||||||
|
offset: 50,
|
||||||
|
speed: 500,
|
||||||
|
position: true,
|
||||||
|
right: 15,
|
||||||
|
bottom: 5
|
||||||
|
}, opt);
|
||||||
|
elem.css({
|
||||||
|
'cursor': 'pointer'
|
||||||
|
});
|
||||||
|
if (options.autohide) {
|
||||||
|
elem.css('display', 'none');
|
||||||
|
}
|
||||||
|
if (options.position) {
|
||||||
|
elem.css({
|
||||||
|
'position': 'fixed',
|
||||||
|
'right': options.right,
|
||||||
|
'bottom': options.bottom,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
elem.click(function() {
|
||||||
|
doc.animate({
|
||||||
|
scrollTop: 0
|
||||||
|
}, options.speed);
|
||||||
|
});
|
||||||
|
win.scroll(function() {
|
||||||
|
var scrolling = win.scrollTop();
|
||||||
|
if (options.autohide) {
|
||||||
|
if (scrolling > options.offset) {
|
||||||
|
elem.fadeIn(options.speed);
|
||||||
|
} else elem.fadeOut(options.speed);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
})(jQuery);
|
||||||
|
|
||||||
/** 刷新选项卡 */
|
/** 刷新选项卡 */
|
||||||
var refreshItem = function(){
|
var refreshItem = function(){
|
||||||
var topWindow = $(window.parent.document);
|
var topWindow = $(window.parent.document);
|
||||||
|
|
@ -199,6 +275,7 @@ function createMenuItem(dataUrl, menuName) {
|
||||||
if ($(this).data('id') == dataUrl) {
|
if ($(this).data('id') == dataUrl) {
|
||||||
if (!$(this).hasClass('active')) {
|
if (!$(this).hasClass('active')) {
|
||||||
$(this).addClass('active').siblings('.menuTab').removeClass('active');
|
$(this).addClass('active').siblings('.menuTab').removeClass('active');
|
||||||
|
scrollToTab(this);
|
||||||
$('.page-tabs-content').animate({ marginLeft: ""}, "fast");
|
$('.page-tabs-content').animate({ marginLeft: ""}, "fast");
|
||||||
// 显示tab对应的内容区
|
// 显示tab对应的内容区
|
||||||
$('.mainContent .RuoYi_iframe', topWindow).each(function() {
|
$('.mainContent .RuoYi_iframe', topWindow).each(function() {
|
||||||
|
|
@ -214,7 +291,7 @@ function createMenuItem(dataUrl, menuName) {
|
||||||
});
|
});
|
||||||
// 选项卡菜单不存在
|
// 选项卡菜单不存在
|
||||||
if (flag) {
|
if (flag) {
|
||||||
var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '" data-panel="' + panelUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
|
var str = '<a href="javascript:;" class="active menuTab noactive" data-id="' + dataUrl + '" data-panel="' + panelUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
|
||||||
$('.menuTab', topWindow).removeClass('active');
|
$('.menuTab', topWindow).removeClass('active');
|
||||||
|
|
||||||
// 添加选项卡对应的iframe
|
// 添加选项卡对应的iframe
|
||||||
|
|
@ -228,10 +305,74 @@ function createMenuItem(dataUrl, menuName) {
|
||||||
|
|
||||||
// 添加选项卡
|
// 添加选项卡
|
||||||
$('.menuTabs .page-tabs-content', topWindow).append(str);
|
$('.menuTabs .page-tabs-content', topWindow).append(str);
|
||||||
|
scrollToTab($('.menuTab.active', topWindow));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 滚动到指定选项卡
|
||||||
|
function scrollToTab(element) {
|
||||||
|
var topWindow = $(window.parent.document);
|
||||||
|
var marginLeftVal = calSumWidth($(element).prevAll()),
|
||||||
|
marginRightVal = calSumWidth($(element).nextAll());
|
||||||
|
// 可视区域非tab宽度
|
||||||
|
var tabOuterWidth = calSumWidth($(".content-tabs", topWindow).children().not(".menuTabs"));
|
||||||
|
//可视区域tab宽度
|
||||||
|
var visibleWidth = $(".content-tabs", topWindow).outerWidth(true) - tabOuterWidth;
|
||||||
|
//实际滚动宽度
|
||||||
|
var scrollVal = 0;
|
||||||
|
if ($(".page-tabs-content", topWindow).outerWidth() < visibleWidth) {
|
||||||
|
scrollVal = 0;
|
||||||
|
} else if (marginRightVal <= (visibleWidth - $(element).outerWidth(true) - $(element).next().outerWidth(true))) {
|
||||||
|
if ((visibleWidth - $(element).next().outerWidth(true)) > marginRightVal) {
|
||||||
|
scrollVal = marginLeftVal;
|
||||||
|
var tabElement = element;
|
||||||
|
while ((scrollVal - $(tabElement).outerWidth()) > ($(".page-tabs-content", topWindow).outerWidth() - visibleWidth)) {
|
||||||
|
scrollVal -= $(tabElement).prev().outerWidth();
|
||||||
|
tabElement = $(tabElement).prev();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (marginLeftVal > (visibleWidth - $(element).outerWidth(true) - $(element).prev().outerWidth(true))) {
|
||||||
|
scrollVal = marginLeftVal - $(element).prev().outerWidth(true);
|
||||||
|
}
|
||||||
|
$('.page-tabs-content', topWindow).animate({ marginLeft: 0 - scrollVal + 'px' }, "fast");
|
||||||
|
}
|
||||||
|
|
||||||
|
//计算元素集合的总宽度
|
||||||
|
function calSumWidth(elements) {
|
||||||
|
var width = 0;
|
||||||
|
$(elements).each(function() {
|
||||||
|
width += $(this).outerWidth(true);
|
||||||
|
});
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 密码规则范围验证 */
|
||||||
|
function checkpwd(chrtype, password) {
|
||||||
|
if (chrtype == 1) {
|
||||||
|
if(!$.common.numValid(password)){
|
||||||
|
$.modal.alertWarning("密码只能为0-9数字");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (chrtype == 2) {
|
||||||
|
if(!$.common.enValid(password)){
|
||||||
|
$.modal.alertWarning("密码只能为a-z和A-Z字母");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (chrtype == 3) {
|
||||||
|
if(!$.common.enNumValid(password)){
|
||||||
|
$.modal.alertWarning("密码必须包含字母以及数字");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (chrtype == 4) {
|
||||||
|
if(!$.common.charValid(password)){
|
||||||
|
$.modal.alertWarning("密码必须包含字母、数字、以及特殊符号-、_");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// 日志打印封装处理
|
// 日志打印封装处理
|
||||||
var log = {
|
var log = {
|
||||||
log: function(msg) {
|
log: function(msg) {
|
||||||
|
|
@ -264,6 +405,42 @@ var storage = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 主子表操作封装处理
|
||||||
|
var sub = {
|
||||||
|
editColumn: function() {
|
||||||
|
var count = $("#" + table.options.id).bootstrapTable('getData').length;
|
||||||
|
var params = new Array();
|
||||||
|
for (var dataIndex = 0; dataIndex <= count; dataIndex++) {
|
||||||
|
var columns = $('#' + table.options.id + ' tr[data-index="' + dataIndex + '"] td');
|
||||||
|
var obj = new Object();
|
||||||
|
for (var i = 0; i < columns.length; i++) {
|
||||||
|
var inputValue = $(columns[i]).find('input');
|
||||||
|
var selectValue = $(columns[i]).find('select');
|
||||||
|
var key = table.options.columns[i].field;
|
||||||
|
if ($.common.isNotEmpty(inputValue.val())) {
|
||||||
|
obj[key] = inputValue.val();
|
||||||
|
} else if ($.common.isNotEmpty(selectValue.val())) {
|
||||||
|
obj[key] = selectValue.val();
|
||||||
|
} else {
|
||||||
|
obj[key] = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
params.push({ index: dataIndex, row: obj });
|
||||||
|
}
|
||||||
|
$("#" + table.options.id).bootstrapTable("updateRow", params);
|
||||||
|
},
|
||||||
|
delColumn: function(column) {
|
||||||
|
sub.editColumn();
|
||||||
|
var subColumn = $.common.isEmpty(column) ? "index" : column;
|
||||||
|
var ids = $.table.selectColumns(subColumn);
|
||||||
|
if (ids.length == 0) {
|
||||||
|
$.modal.alertWarning("请至少选择一条记录");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$("#" + table.options.id).bootstrapTable('remove', { field: subColumn, values: ids });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/** 设置全局ajax处理 */
|
/** 设置全局ajax处理 */
|
||||||
$.ajaxSetup({
|
$.ajaxSetup({
|
||||||
complete: function(XMLHttpRequest, textStatus) {
|
complete: function(XMLHttpRequest, textStatus) {
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ var table = {
|
||||||
// 设置实例配置
|
// 设置实例配置
|
||||||
set: function(id) {
|
set: function(id) {
|
||||||
if($.common.getLength(table.config) > 1) {
|
if($.common.getLength(table.config) > 1) {
|
||||||
var tableId = $.common.isEmpty(id) ? $(event.currentTarget).parents(".bootstrap-table").find(".table").attr("id") : id;
|
var tableId = $.common.isEmpty(id) ? $(event.currentTarget).parents(".bootstrap-table").find("table.table").attr("id") : id;
|
||||||
if ($.common.isNotEmpty(tableId)) {
|
if ($.common.isNotEmpty(tableId)) {
|
||||||
table.options = table.get(tableId);
|
table.options = table.get(tableId);
|
||||||
}
|
}
|
||||||
|
|
@ -38,14 +38,18 @@ var table = {
|
||||||
var defaults = {
|
var defaults = {
|
||||||
id: "bootstrap-table",
|
id: "bootstrap-table",
|
||||||
type: 0, // 0 代表bootstrapTable 1代表bootstrapTreeTable
|
type: 0, // 0 代表bootstrapTable 1代表bootstrapTreeTable
|
||||||
|
method: 'post',
|
||||||
height: undefined,
|
height: undefined,
|
||||||
sidePagination: "server",
|
sidePagination: "server",
|
||||||
sortName: "",
|
sortName: "",
|
||||||
sortOrder: "asc",
|
sortOrder: "asc",
|
||||||
pagination: true,
|
pagination: true,
|
||||||
|
paginationLoop: false,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
|
pageNumber: 1,
|
||||||
pageList: [10, 25, 50],
|
pageList: [10, 25, 50],
|
||||||
toolbar: "toolbar",
|
toolbar: "toolbar",
|
||||||
|
loadingFontSize: 13,
|
||||||
striped: false,
|
striped: false,
|
||||||
escape: false,
|
escape: false,
|
||||||
firstLoad: true,
|
firstLoad: true,
|
||||||
|
|
@ -58,12 +62,13 @@ var table = {
|
||||||
showToggle: true,
|
showToggle: true,
|
||||||
showExport: false,
|
showExport: false,
|
||||||
clickToSelect: false,
|
clickToSelect: false,
|
||||||
|
singleSelect: false,
|
||||||
mobileResponsive: true,
|
mobileResponsive: true,
|
||||||
|
maintainSelected: false,
|
||||||
rememberSelected: false,
|
rememberSelected: false,
|
||||||
fixedColumns: false,
|
fixedColumns: false,
|
||||||
fixedNumber: 0,
|
fixedNumber: 0,
|
||||||
rightFixedColumns: false,
|
fixedRightNumber: 0,
|
||||||
rightFixedNumber: 0,
|
|
||||||
queryParams: $.table.queryParams,
|
queryParams: $.table.queryParams,
|
||||||
rowStyle: {},
|
rowStyle: {},
|
||||||
};
|
};
|
||||||
|
|
@ -75,7 +80,7 @@ var table = {
|
||||||
id: options.id,
|
id: options.id,
|
||||||
url: options.url, // 请求后台的URL(*)
|
url: options.url, // 请求后台的URL(*)
|
||||||
contentType: "application/x-www-form-urlencoded", // 编码类型
|
contentType: "application/x-www-form-urlencoded", // 编码类型
|
||||||
method: 'post', // 请求方式(*)
|
method: options.method, // 请求方式(*)
|
||||||
cache: false, // 是否使用缓存
|
cache: false, // 是否使用缓存
|
||||||
height: options.height, // 表格的高度
|
height: options.height, // 表格的高度
|
||||||
striped: options.striped, // 是否显示行间隔色
|
striped: options.striped, // 是否显示行间隔色
|
||||||
|
|
@ -84,6 +89,7 @@ var table = {
|
||||||
sortName: options.sortName, // 排序列名称
|
sortName: options.sortName, // 排序列名称
|
||||||
sortOrder: options.sortOrder, // 排序方式 asc 或者 desc
|
sortOrder: options.sortOrder, // 排序方式 asc 或者 desc
|
||||||
pagination: options.pagination, // 是否显示分页(*)
|
pagination: options.pagination, // 是否显示分页(*)
|
||||||
|
paginationLoop: options.paginationLoop, // 是否启用分页条无限循环的功能
|
||||||
pageNumber: 1, // 初始化加载第一页,默认第一页
|
pageNumber: 1, // 初始化加载第一页,默认第一页
|
||||||
pageSize: options.pageSize, // 每页的记录行数(*)
|
pageSize: options.pageSize, // 每页的记录行数(*)
|
||||||
pageList: options.pageList, // 可供选择的每页的行数(*)
|
pageList: options.pageList, // 可供选择的每页的行数(*)
|
||||||
|
|
@ -92,6 +98,7 @@ var table = {
|
||||||
showFooter: options.showFooter, // 是否显示表尾
|
showFooter: options.showFooter, // 是否显示表尾
|
||||||
iconSize: 'outline', // 图标大小:undefined默认的按钮尺寸 xs超小按钮sm小按钮lg大按钮
|
iconSize: 'outline', // 图标大小:undefined默认的按钮尺寸 xs超小按钮sm小按钮lg大按钮
|
||||||
toolbar: '#' + options.toolbar, // 指定工作栏
|
toolbar: '#' + options.toolbar, // 指定工作栏
|
||||||
|
loadingFontSize: options.loadingFontSize, // 自定义加载文本的字体大小
|
||||||
sidePagination: options.sidePagination, // server启用服务端分页client客户端分页
|
sidePagination: options.sidePagination, // server启用服务端分页client客户端分页
|
||||||
search: options.search, // 是否显示搜索框功能
|
search: options.search, // 是否显示搜索框功能
|
||||||
searchText: options.searchText, // 搜索框初始显示的内容,默认为空
|
searchText: options.searchText, // 搜索框初始显示的内容,默认为空
|
||||||
|
|
@ -101,9 +108,13 @@ var table = {
|
||||||
showColumns: options.showColumns, // 是否显示隐藏某列下拉框
|
showColumns: options.showColumns, // 是否显示隐藏某列下拉框
|
||||||
showToggle: options.showToggle, // 是否显示详细视图和列表视图的切换按钮
|
showToggle: options.showToggle, // 是否显示详细视图和列表视图的切换按钮
|
||||||
showExport: options.showExport, // 是否支持导出文件
|
showExport: options.showExport, // 是否支持导出文件
|
||||||
|
showHeader: options.showHeader, // 是否显示表头
|
||||||
|
showFullscreen: options.showFullscreen, // 是否显示全屏按钮
|
||||||
uniqueId: options.uniqueId, // 唯 一的标识符
|
uniqueId: options.uniqueId, // 唯 一的标识符
|
||||||
clickToSelect: options.clickToSelect, // 是否启用点击选中行
|
clickToSelect: options.clickToSelect, // 是否启用点击选中行
|
||||||
|
singleSelect: options.singleSelect, // 是否单选checkbox
|
||||||
mobileResponsive: options.mobileResponsive, // 是否支持移动端适配
|
mobileResponsive: options.mobileResponsive, // 是否支持移动端适配
|
||||||
|
cardView: options.cardView, // 是否启用显示卡片视图
|
||||||
detailView: options.detailView, // 是否启用显示细节视图
|
detailView: options.detailView, // 是否启用显示细节视图
|
||||||
onClickRow: options.onClickRow, // 点击某行触发的事件
|
onClickRow: options.onClickRow, // 点击某行触发的事件
|
||||||
onDblClickRow: options.onDblClickRow, // 双击某行触发的事件
|
onDblClickRow: options.onDblClickRow, // 双击某行触发的事件
|
||||||
|
|
@ -111,15 +122,18 @@ var table = {
|
||||||
onDblClickCell: options.onDblClickCell, // 双击某格触发的事件
|
onDblClickCell: options.onDblClickCell, // 双击某格触发的事件
|
||||||
onEditableSave: options.onEditableSave, // 行内编辑保存的事件
|
onEditableSave: options.onEditableSave, // 行内编辑保存的事件
|
||||||
onExpandRow: options.onExpandRow, // 点击详细视图的事件
|
onExpandRow: options.onExpandRow, // 点击详细视图的事件
|
||||||
|
maintainSelected: options.maintainSelected, // 前端翻页时保留所选行
|
||||||
rememberSelected: options.rememberSelected, // 启用翻页记住前面的选择
|
rememberSelected: options.rememberSelected, // 启用翻页记住前面的选择
|
||||||
fixedColumns: options.fixedColumns, // 是否启用冻结列(左侧)
|
fixedColumns: options.fixedColumns, // 是否启用冻结列(左侧)
|
||||||
fixedNumber: options.fixedNumber, // 列冻结的个数(左侧)
|
fixedNumber: options.fixedNumber, // 列冻结的个数(左侧)
|
||||||
rightFixedColumns: options.rightFixedColumns, // 是否启用冻结列(右侧)
|
fixedRightNumber: options.fixedRightNumber, // 列冻结的个数(右侧)
|
||||||
rightFixedNumber: options.rightFixedNumber, // 列冻结的个数(右侧)
|
|
||||||
onReorderRow: options.onReorderRow, // 当拖拽结束后处理函数
|
onReorderRow: options.onReorderRow, // 当拖拽结束后处理函数
|
||||||
queryParams: options.queryParams, // 传递参数(*)
|
queryParams: options.queryParams, // 传递参数(*)
|
||||||
rowStyle: options.rowStyle, // 通过自定义函数设置行样式
|
rowStyle: options.rowStyle, // 通过自定义函数设置行样式
|
||||||
|
footerStyle: options.footerStyle, // 通过自定义函数设置页脚样式
|
||||||
|
headerStyle: options.headerStyle, // 通过自定义函数设置标题样式
|
||||||
columns: options.columns, // 显示列信息(*)
|
columns: options.columns, // 显示列信息(*)
|
||||||
|
data: options.data, // 被加载的数据
|
||||||
responseHandler: $.table.responseHandler, // 在加载服务器发送来的数据之前处理函数
|
responseHandler: $.table.responseHandler, // 在加载服务器发送来的数据之前处理函数
|
||||||
onLoadSuccess: $.table.onLoadSuccess, // 当所有数据被加载时触发处理函数
|
onLoadSuccess: $.table.onLoadSuccess, // 当所有数据被加载时触发处理函数
|
||||||
exportOptions: options.exportOptions, // 前端导出忽略列索引
|
exportOptions: options.exportOptions, // 前端导出忽略列索引
|
||||||
|
|
@ -150,8 +164,8 @@ var table = {
|
||||||
},
|
},
|
||||||
// 请求获取数据后处理回调函数
|
// 请求获取数据后处理回调函数
|
||||||
responseHandler: function(res) {
|
responseHandler: function(res) {
|
||||||
if (typeof table.options.responseHandler == "function") {
|
if (typeof table.get(this.id).responseHandler == "function") {
|
||||||
table.options.responseHandler(res);
|
table.get(this.id).responseHandler(res);
|
||||||
}
|
}
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
if ($.common.isNotEmpty(table.options.sidePagination) && table.options.sidePagination == 'client') {
|
if ($.common.isNotEmpty(table.options.sidePagination) && table.options.sidePagination == 'client') {
|
||||||
|
|
@ -178,9 +192,15 @@ var table = {
|
||||||
$(optionsIds).on(TABLE_EVENTS, function () {
|
$(optionsIds).on(TABLE_EVENTS, function () {
|
||||||
table.set($(this).attr("id"));
|
table.set($(this).attr("id"));
|
||||||
});
|
});
|
||||||
|
// 在表格体渲染完成,并在 DOM 中可见后触发(事件)
|
||||||
|
$(optionsIds).on("post-body.bs.table", function (e, args) {
|
||||||
|
// 浮动提示框特效
|
||||||
|
$(".table [data-toggle='tooltip']").tooltip();
|
||||||
|
});
|
||||||
// 选中、取消、全部选中、全部取消(事件)
|
// 选中、取消、全部选中、全部取消(事件)
|
||||||
$(optionsIds).on("check.bs.table check-all.bs.table uncheck.bs.table uncheck-all.bs.table", function (e, rows) {
|
$(optionsIds).on("check.bs.table check-all.bs.table uncheck.bs.table uncheck-all.bs.table", function (e, rowsAfter, rowsBefore) {
|
||||||
// 复选框分页保留保存选中数组
|
// 复选框分页保留保存选中数组
|
||||||
|
var rows = $.common.equals("uncheck-all", e.type) ? rowsBefore : rowsAfter;
|
||||||
var rowIds = $.table.affectedRowIds(rows);
|
var rowIds = $.table.affectedRowIds(rows);
|
||||||
if ($.common.isNotEmpty(table.options.rememberSelected) && table.options.rememberSelected) {
|
if ($.common.isNotEmpty(table.options.rememberSelected) && table.options.rememberSelected) {
|
||||||
func = $.inArray(e.type, ['check', 'check-all']) > -1 ? 'union' : 'difference';
|
func = $.inArray(e.type, ['check', 'check-all']) > -1 ? 'union' : 'difference';
|
||||||
|
|
@ -213,9 +233,14 @@ var table = {
|
||||||
$(optionsIds).off("click").on("click", '.img-circle', function() {
|
$(optionsIds).off("click").on("click", '.img-circle', function() {
|
||||||
var src = $(this).attr('src');
|
var src = $(this).attr('src');
|
||||||
var target = $(this).data('target');
|
var target = $(this).data('target');
|
||||||
|
if($.common.equals("self", target)) {
|
||||||
var height = $(this).data('height');
|
var height = $(this).data('height');
|
||||||
var width = $(this).data('width');
|
var width = $(this).data('width');
|
||||||
if($.common.equals("self", target)) {
|
// 如果是移动端,就使用自适应大小弹窗
|
||||||
|
if ($.common.isMobile()) {
|
||||||
|
width = 'auto';
|
||||||
|
height = 'auto';
|
||||||
|
}
|
||||||
layer.open({
|
layer.open({
|
||||||
title: false,
|
title: false,
|
||||||
type: 1,
|
type: 1,
|
||||||
|
|
@ -250,8 +275,6 @@ var table = {
|
||||||
if (typeof table.options.onLoadSuccess == "function") {
|
if (typeof table.options.onLoadSuccess == "function") {
|
||||||
table.options.onLoadSuccess(data);
|
table.options.onLoadSuccess(data);
|
||||||
}
|
}
|
||||||
// 浮动提示框特效
|
|
||||||
$("[data-toggle='tooltip']").tooltip();
|
|
||||||
},
|
},
|
||||||
// 表格销毁
|
// 表格销毁
|
||||||
destroy: function (tableId) {
|
destroy: function (tableId) {
|
||||||
|
|
@ -262,8 +285,8 @@ var table = {
|
||||||
serialNumber: function (index, tableId) {
|
serialNumber: function (index, tableId) {
|
||||||
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
|
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
|
||||||
var tableParams = $("#" + currentId).bootstrapTable('getOptions');
|
var tableParams = $("#" + currentId).bootstrapTable('getOptions');
|
||||||
var pageSize = tableParams.pageSize;
|
var pageSize = $.common.isNotEmpty(tableParams.pageSize) ? tableParams.pageSize: table.options.pageSize;
|
||||||
var pageNumber = tableParams.pageNumber;
|
var pageNumber = $.common.isNotEmpty(tableParams.pageNumber) ? tableParams.pageNumber: table.options.pageNumber;
|
||||||
return pageSize * (pageNumber - 1) + index + 1;
|
return pageSize * (pageNumber - 1) + index + 1;
|
||||||
},
|
},
|
||||||
// 列超出指定长度浮动提示 target(copy单击复制文本 open弹窗打开文本)
|
// 列超出指定长度浮动提示 target(copy单击复制文本 open弹窗打开文本)
|
||||||
|
|
@ -277,7 +300,7 @@ var table = {
|
||||||
_value = _value.replace(/\'/g,"'");
|
_value = _value.replace(/\'/g,"'");
|
||||||
_value = _value.replace(/\"/g,""");
|
_value = _value.replace(/\"/g,""");
|
||||||
var actions = [];
|
var actions = [];
|
||||||
actions.push($.common.sprintf('<input id="tooltip-show" style="opacity: 0;position: absolute;z-index:-1" type="text" value="%s"/>', _value));
|
actions.push($.common.sprintf('<input style="opacity: 0;position: absolute;width:5px;z-index:-1" type="text" value="%s"/>', _value));
|
||||||
actions.push($.common.sprintf('<a href="###" class="tooltip-show" data-toggle="tooltip" data-target="%s" title="%s">%s</a>', _target, _value, _text));
|
actions.push($.common.sprintf('<a href="###" class="tooltip-show" data-toggle="tooltip" data-target="%s" title="%s">%s</a>', _target, _value, _text));
|
||||||
return actions.join('');
|
return actions.join('');
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -314,24 +337,10 @@ var table = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 搜索-默认第一个form
|
// 搜索-默认第一个form
|
||||||
search: function(formId, tableId, data) {
|
search: function(formId, tableId) {
|
||||||
table.set(tableId);
|
table.set(tableId);
|
||||||
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
|
table.options.formId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
|
||||||
var params = $.common.isEmpty(tableId) ? $("#" + table.options.id).bootstrapTable('getOptions') : $("#" + tableId).bootstrapTable('getOptions');
|
var params = $.common.isEmpty(tableId) ? $("#" + table.options.id).bootstrapTable('getOptions') : $("#" + tableId).bootstrapTable('getOptions');
|
||||||
params.queryParams = function(params) {
|
|
||||||
var search = $.common.formToJSON(currentId);
|
|
||||||
if($.common.isNotEmpty(data)){
|
|
||||||
$.each(data, function(key) {
|
|
||||||
search[key] = data[key];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
search.pageSize = params.limit;
|
|
||||||
search.pageNum = params.offset / params.limit + 1;
|
|
||||||
search.searchValue = params.search;
|
|
||||||
search.orderByColumn = params.sort;
|
|
||||||
search.isAsc = params.order;
|
|
||||||
return search;
|
|
||||||
}
|
|
||||||
if($.common.isNotEmpty(tableId)){
|
if($.common.isNotEmpty(tableId)){
|
||||||
$("#" + tableId).bootstrapTable('refresh', params);
|
$("#" + tableId).bootstrapTable('refresh', params);
|
||||||
} else{
|
} else{
|
||||||
|
|
@ -343,8 +352,12 @@ var table = {
|
||||||
table.set();
|
table.set();
|
||||||
$.modal.confirm("确定导出所有" + table.options.modalName + "吗?", function() {
|
$.modal.confirm("确定导出所有" + table.options.modalName + "吗?", function() {
|
||||||
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
|
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
|
||||||
|
var params = $("#" + table.options.id).bootstrapTable('getOptions');
|
||||||
|
var dataParam = $("#" + currentId).serializeArray();
|
||||||
|
dataParam.push({ "name": "orderByColumn", "value": params.sortName });
|
||||||
|
dataParam.push({ "name": "isAsc", "value": params.sortOrder });
|
||||||
$.modal.loading("正在导出数据,请稍后...");
|
$.modal.loading("正在导出数据,请稍后...");
|
||||||
$.post(table.options.exportUrl, $("#" + currentId).serializeArray(), function(result) {
|
$.post(table.options.exportUrl, dataParam, function(result) {
|
||||||
if (result.code == web_status.SUCCESS) {
|
if (result.code == web_status.SUCCESS) {
|
||||||
window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
|
window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
|
||||||
} else if (result.code == web_status.WARNING) {
|
} else if (result.code == web_status.WARNING) {
|
||||||
|
|
@ -393,9 +406,7 @@ var table = {
|
||||||
}
|
}
|
||||||
var index = layer.load(2, {shade: false});
|
var index = layer.load(2, {shade: false});
|
||||||
$.modal.disable();
|
$.modal.disable();
|
||||||
var formData = new FormData();
|
var formData = new FormData(layero.find('form')[0]);
|
||||||
formData.append("file", $('#file')[0].files[0]);
|
|
||||||
formData.append("updateSupport", $("input[name='updateSupport']").is(':checked'));
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: table.options.importUrl,
|
url: table.options.importUrl,
|
||||||
data: formData,
|
data: formData,
|
||||||
|
|
@ -432,13 +443,13 @@ var table = {
|
||||||
// 查询表格指定列值
|
// 查询表格指定列值
|
||||||
selectColumns: function(column) {
|
selectColumns: function(column) {
|
||||||
var rows = $.map($("#" + table.options.id).bootstrapTable('getSelections'), function (row) {
|
var rows = $.map($("#" + table.options.id).bootstrapTable('getSelections'), function (row) {
|
||||||
return row[column];
|
return $.common.getItemField(row, column);
|
||||||
});
|
});
|
||||||
if ($.common.isNotEmpty(table.options.rememberSelected) && table.options.rememberSelected) {
|
if ($.common.isNotEmpty(table.options.rememberSelected) && table.options.rememberSelected) {
|
||||||
var selectedRows = table.rememberSelecteds[table.options.id];
|
var selectedRows = table.rememberSelecteds[table.options.id];
|
||||||
if($.common.isNotEmpty(selectedRows)) {
|
if($.common.isNotEmpty(selectedRows)) {
|
||||||
rows = $.map(table.rememberSelecteds[table.options.id], function (row) {
|
rows = $.map(table.rememberSelecteds[table.options.id], function (row) {
|
||||||
return row[column];
|
return $.common.getItemField(row, column);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -450,7 +461,7 @@ var table = {
|
||||||
var rowIds;
|
var rowIds;
|
||||||
if ($.isArray(rows)) {
|
if ($.isArray(rows)) {
|
||||||
rowIds = $.map(rows, function(row) {
|
rowIds = $.map(rows, function(row) {
|
||||||
return row[column];
|
return $.common.getItemField(row, column);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
rowIds = [rows[column]];
|
rowIds = [rows[column]];
|
||||||
|
|
@ -460,13 +471,13 @@ var table = {
|
||||||
// 查询表格首列值
|
// 查询表格首列值
|
||||||
selectFirstColumns: function() {
|
selectFirstColumns: function() {
|
||||||
var rows = $.map($("#" + table.options.id).bootstrapTable('getSelections'), function (row) {
|
var rows = $.map($("#" + table.options.id).bootstrapTable('getSelections'), function (row) {
|
||||||
return row[table.options.columns[1].field];
|
return $.common.getItemField(row, table.options.columns[1].field);
|
||||||
});
|
});
|
||||||
if ($.common.isNotEmpty(table.options.rememberSelected) && table.options.rememberSelected) {
|
if ($.common.isNotEmpty(table.options.rememberSelected) && table.options.rememberSelected) {
|
||||||
var selectedRows = table.rememberSelecteds[table.options.id];
|
var selectedRows = table.rememberSelecteds[table.options.id];
|
||||||
if($.common.isNotEmpty(selectedRows)) {
|
if($.common.isNotEmpty(selectedRows)) {
|
||||||
rows = $.map(selectedRows, function (row) {
|
rows = $.map(selectedRows, function (row) {
|
||||||
return row[table.options.columns[1].field];
|
return $.common.getItemField(row, table.options.columns[1].field);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -484,6 +495,21 @@ var table = {
|
||||||
});
|
});
|
||||||
return actions.join('');
|
return actions.join('');
|
||||||
},
|
},
|
||||||
|
// 回显数据字典(字符串数组)
|
||||||
|
selectDictLabels: function(datas, value, separator) {
|
||||||
|
var currentSeparator = $.common.isEmpty(separator) ? "," : separator;
|
||||||
|
var actions = [];
|
||||||
|
$.each(value.split(currentSeparator), function(i, val) {
|
||||||
|
$.each(datas, function(index, dict) {
|
||||||
|
if (dict.dictValue == ('' + val)) {
|
||||||
|
var listClass = $.common.equals("default", dict.listClass) || $.common.isEmpty(dict.listClass) ? "" : "badge badge-" + dict.listClass;
|
||||||
|
actions.push($.common.sprintf("<span class='%s'>%s </span>", listClass, dict.dictLabel));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return actions.join('');
|
||||||
|
},
|
||||||
// 显示表格指定列
|
// 显示表格指定列
|
||||||
showColumn: function(column, tableId) {
|
showColumn: function(column, tableId) {
|
||||||
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
|
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
|
||||||
|
|
@ -493,6 +519,16 @@ var table = {
|
||||||
hideColumn: function(column, tableId) {
|
hideColumn: function(column, tableId) {
|
||||||
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
|
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
|
||||||
$("#" + currentId).bootstrapTable('hideColumn', column);
|
$("#" + currentId).bootstrapTable('hideColumn', column);
|
||||||
|
},
|
||||||
|
// 显示所有表格列
|
||||||
|
showAllColumns: function(tableId) {
|
||||||
|
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
|
||||||
|
$("#" + currentId).bootstrapTable('showAllColumns');
|
||||||
|
},
|
||||||
|
// 隐藏所有表格列
|
||||||
|
hideAllColumns: function(tableId) {
|
||||||
|
var currentId = $.common.isEmpty(tableId) ? table.options.id : tableId;
|
||||||
|
$("#" + currentId).bootstrapTable('hideAllColumns');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 表格树封装处理
|
// 表格树封装处理
|
||||||
|
|
@ -517,6 +553,7 @@ var table = {
|
||||||
var options = $.extend(defaults, options);
|
var options = $.extend(defaults, options);
|
||||||
table.options = options;
|
table.options = options;
|
||||||
table.config[options.id] = options;
|
table.config[options.id] = options;
|
||||||
|
$.table.initEvent();
|
||||||
$.bttTable = $('#' + options.id).bootstrapTreeTable({
|
$.bttTable = $('#' + options.id).bootstrapTreeTable({
|
||||||
code: options.code, // 用于设置父子关系
|
code: options.code, // 用于设置父子关系
|
||||||
parentCode: options.parentCode, // 用于设置父子关系
|
parentCode: options.parentCode, // 用于设置父子关系
|
||||||
|
|
@ -528,7 +565,7 @@ var table = {
|
||||||
height: options.height, // 表格树的高度
|
height: options.height, // 表格树的高度
|
||||||
expandColumn: options.expandColumn, // 在哪一列上面显示展开按钮
|
expandColumn: options.expandColumn, // 在哪一列上面显示展开按钮
|
||||||
striped: options.striped, // 是否显示行间隔色
|
striped: options.striped, // 是否显示行间隔色
|
||||||
bordered: true, // 是否显示边框
|
bordered: false, // 是否显示边框
|
||||||
toolbar: '#' + options.toolbar, // 指定工作栏
|
toolbar: '#' + options.toolbar, // 指定工作栏
|
||||||
showSearch: options.showSearch, // 是否显示检索信息
|
showSearch: options.showSearch, // 是否显示检索信息
|
||||||
showRefresh: options.showRefresh, // 是否显示刷新按钮
|
showRefresh: options.showRefresh, // 是否显示刷新按钮
|
||||||
|
|
@ -536,7 +573,8 @@ var table = {
|
||||||
expandAll: options.expandAll, // 是否全部展开
|
expandAll: options.expandAll, // 是否全部展开
|
||||||
expandFirst: options.expandFirst, // 是否默认第一级展开--expandAll为false时生效
|
expandFirst: options.expandFirst, // 是否默认第一级展开--expandAll为false时生效
|
||||||
columns: options.columns, // 显示列信息(*)
|
columns: options.columns, // 显示列信息(*)
|
||||||
responseHandler: $.treeTable.responseHandler // 当所有数据被加载时触发处理函数
|
responseHandler: $.treeTable.responseHandler, // 在加载服务器发送来的数据之前处理函数
|
||||||
|
onLoadSuccess: $.table.onLoadSuccess // 当所有数据被加载时触发处理函数
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
// 条件查询
|
// 条件查询
|
||||||
|
|
@ -552,17 +590,20 @@ var table = {
|
||||||
// 查询表格树指定列值
|
// 查询表格树指定列值
|
||||||
selectColumns: function(column) {
|
selectColumns: function(column) {
|
||||||
var rows = $.map($.bttTable.bootstrapTreeTable('getSelections'), function (row) {
|
var rows = $.map($.bttTable.bootstrapTreeTable('getSelections'), function (row) {
|
||||||
return row[column];
|
return $.common.getItemField(row, column);
|
||||||
});
|
});
|
||||||
return $.common.uniqueFn(rows);
|
return $.common.uniqueFn(rows);
|
||||||
},
|
},
|
||||||
// 请求获取数据后处理回调函数,校验异常状态提醒
|
// 请求获取数据后处理回调函数,校验异常状态提醒
|
||||||
responseHandler: function(data) {
|
responseHandler: function(res) {
|
||||||
if (data.code != undefined && data.code != 0) {
|
if (typeof table.options.responseHandler == "function") {
|
||||||
$.modal.alertWarning(data.msg);
|
table.options.responseHandler(res);
|
||||||
|
}
|
||||||
|
if (res.code != undefined && res.code != 0) {
|
||||||
|
$.modal.alertWarning(res.msg);
|
||||||
return [];
|
return [];
|
||||||
} else {
|
} else {
|
||||||
return data;
|
return res;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -579,6 +620,12 @@ var table = {
|
||||||
} else{
|
} else{
|
||||||
$("#" + tableId).bootstrapTable('refresh');
|
$("#" + tableId).bootstrapTable('refresh');
|
||||||
}
|
}
|
||||||
|
} else if (table.options.type == table_type.bootstrapTreeTable) {
|
||||||
|
if($.common.isEmpty(tableId)){
|
||||||
|
$("#" + table.options.id).bootstrapTreeTable('refresh', []);
|
||||||
|
} else{
|
||||||
|
$("#" + tableId).bootstrapTreeTable('refresh', []);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 获取选中复选框项
|
// 获取选中复选框项
|
||||||
|
|
@ -697,7 +744,7 @@ var table = {
|
||||||
// 弹出层指定宽度
|
// 弹出层指定宽度
|
||||||
open: function (title, url, width, height, callback) {
|
open: function (title, url, width, height, callback) {
|
||||||
//如果是移动端,就使用自适应大小弹窗
|
//如果是移动端,就使用自适应大小弹窗
|
||||||
if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {
|
if ($.common.isMobile()) {
|
||||||
width = 'auto';
|
width = 'auto';
|
||||||
height = 'auto';
|
height = 'auto';
|
||||||
}
|
}
|
||||||
|
|
@ -749,9 +796,18 @@ var table = {
|
||||||
options.callBack(index, layero);
|
options.callBack(index, layero);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
layer.open({
|
var btnCallback = {};
|
||||||
|
if(options.btn instanceof Array){
|
||||||
|
for (var i = 1, len = options.btn.length; i < len; i++) {
|
||||||
|
var btn = options["btn" + (i + 1)];
|
||||||
|
if (btn) {
|
||||||
|
btnCallback["btn" + (i + 1)] = btn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var index = layer.open($.extend({
|
||||||
type: 2,
|
type: 2,
|
||||||
maxmin: true,
|
maxmin: $.common.isEmpty(options.maxmin) ? true : options.maxmin,
|
||||||
shade: 0.3,
|
shade: 0.3,
|
||||||
title: _title,
|
title: _title,
|
||||||
fix: false,
|
fix: false,
|
||||||
|
|
@ -764,12 +820,15 @@ var table = {
|
||||||
cancel: function () {
|
cancel: function () {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
}, btnCallback));
|
||||||
|
if ($.common.isNotEmpty(options.full) && options.full === true) {
|
||||||
|
layer.full(index);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
// 弹出层全屏
|
// 弹出层全屏
|
||||||
openFull: function (title, url, width, height) {
|
openFull: function (title, url, width, height) {
|
||||||
//如果是移动端,就使用自适应大小弹窗
|
//如果是移动端,就使用自适应大小弹窗
|
||||||
if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {
|
if ($.common.isMobile()) {
|
||||||
width = 'auto';
|
width = 'auto';
|
||||||
height = 'auto';
|
height = 'auto';
|
||||||
}
|
}
|
||||||
|
|
@ -882,7 +941,7 @@ var table = {
|
||||||
var _width = $.common.isEmpty(width) ? "800" : width;
|
var _width = $.common.isEmpty(width) ? "800" : width;
|
||||||
var _height = $.common.isEmpty(height) ? ($(window).height() - 50) : height;
|
var _height = $.common.isEmpty(height) ? ($(window).height() - 50) : height;
|
||||||
//如果是移动端,就使用自适应大小弹窗
|
//如果是移动端,就使用自适应大小弹窗
|
||||||
if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {
|
if ($.common.isMobile()) {
|
||||||
_width = 'auto';
|
_width = 'auto';
|
||||||
_height = 'auto';
|
_height = 'auto';
|
||||||
}
|
}
|
||||||
|
|
@ -997,10 +1056,19 @@ var table = {
|
||||||
var url = "/404.html";
|
var url = "/404.html";
|
||||||
if ($.common.isNotEmpty(id)) {
|
if ($.common.isNotEmpty(id)) {
|
||||||
url = table.options.updateUrl.replace("{id}", id);
|
url = table.options.updateUrl.replace("{id}", id);
|
||||||
|
} else {
|
||||||
|
if(table.options.type == table_type.bootstrapTreeTable) {
|
||||||
|
var row = $("#" + table.options.id).bootstrapTreeTable('getSelections')[0];
|
||||||
|
if ($.common.isEmpty(row)) {
|
||||||
|
$.modal.alertWarning("请至少选择一条记录");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
url = table.options.updateUrl.replace("{id}", row[table.options.uniqueId]);
|
||||||
} else {
|
} else {
|
||||||
var row = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
|
var row = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
|
||||||
url = table.options.updateUrl.replace("{id}", row);
|
url = table.options.updateUrl.replace("{id}", row);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
$.modal.openFull("修改" + table.options.modalName, url);
|
$.modal.openFull("修改" + table.options.modalName, url);
|
||||||
},
|
},
|
||||||
// 修改访问地址
|
// 修改访问地址
|
||||||
|
|
@ -1091,6 +1159,8 @@ var table = {
|
||||||
} else if (result.code == web_status.SUCCESS && table.options.type == table_type.bootstrapTreeTable) {
|
} else if (result.code == web_status.SUCCESS && table.options.type == table_type.bootstrapTreeTable) {
|
||||||
$.modal.msgSuccess(result.msg);
|
$.modal.msgSuccess(result.msg);
|
||||||
$.treeTable.refresh();
|
$.treeTable.refresh();
|
||||||
|
} else if (result.code == web_status.SUCCESS && $.common.isEmpty(table.options.type)) {
|
||||||
|
$.modal.msgSuccess(result.msg)
|
||||||
} else if (result.code == web_status.WARNING) {
|
} else if (result.code == web_status.WARNING) {
|
||||||
$.modal.alertWarning(result.msg)
|
$.modal.alertWarning(result.msg)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1218,9 +1288,11 @@ var table = {
|
||||||
var treeId = $("#treeId").val();
|
var treeId = $("#treeId").val();
|
||||||
tree = $.fn.zTree.init($("#" + options.id), setting, data);
|
tree = $.fn.zTree.init($("#" + options.id), setting, data);
|
||||||
$._tree = tree;
|
$._tree = tree;
|
||||||
var nodes = tree.getNodesByParam("level", options.expandLevel - 1);
|
for (var i = 0; i < options.expandLevel; i++) {
|
||||||
for (var i = 0; i < nodes.length; i++) {
|
var nodes = tree.getNodesByParam("level", i);
|
||||||
tree.expandNode(nodes[i], true, false, false);
|
for (var j = 0; j < nodes.length; j++) {
|
||||||
|
tree.expandNode(nodes[j], true, false, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var node = tree.getNodesByParam("id", treeId, null)[0];
|
var node = tree.getNodesByParam("id", treeId, null)[0];
|
||||||
$.tree.selectByIdName(treeId, node);
|
$.tree.selectByIdName(treeId, node);
|
||||||
|
|
@ -1413,10 +1485,22 @@ var table = {
|
||||||
flag = false;
|
flag = false;
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
return arg;
|
return arg == null ? '' : arg;
|
||||||
});
|
});
|
||||||
return flag ? str : '';
|
return flag ? str : '';
|
||||||
},
|
},
|
||||||
|
// 获取节点数据,支持多层级访问
|
||||||
|
getItemField: function (item, field) {
|
||||||
|
var value = item;
|
||||||
|
if (typeof field !== 'string' || item.hasOwnProperty(field)) {
|
||||||
|
return item[field];
|
||||||
|
}
|
||||||
|
var props = field.split('.');
|
||||||
|
for (var p in props) {
|
||||||
|
value = value && value[props[p]];
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
},
|
||||||
// 指定随机数返回
|
// 指定随机数返回
|
||||||
random: function (min, max) {
|
random: function (min, max) {
|
||||||
return Math.floor((Math.random() * max) + min);
|
return Math.floor((Math.random() * max) + min);
|
||||||
|
|
@ -1462,6 +1546,20 @@ var table = {
|
||||||
});
|
});
|
||||||
return json;
|
return json;
|
||||||
},
|
},
|
||||||
|
// 数据字典转下拉框
|
||||||
|
dictToSelect: function(datas, value, name) {
|
||||||
|
var actions = [];
|
||||||
|
actions.push($.common.sprintf("<select class='form-control' name='%s'>", name));
|
||||||
|
$.each(datas, function(index, dict) {
|
||||||
|
actions.push($.common.sprintf("<option value='%s'", dict.dictValue));
|
||||||
|
if (dict.dictValue == ('' + value)) {
|
||||||
|
actions.push(' selected');
|
||||||
|
}
|
||||||
|
actions.push($.common.sprintf(">%s</option>", dict.dictLabel));
|
||||||
|
});
|
||||||
|
actions.push('</select>');
|
||||||
|
return actions.join('');
|
||||||
|
},
|
||||||
// 获取obj对象长度
|
// 获取obj对象长度
|
||||||
getLength: function(obj) {
|
getLength: function(obj) {
|
||||||
var count = 0;
|
var count = 0;
|
||||||
|
|
@ -1471,7 +1569,31 @@ var table = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
},
|
||||||
|
// 判断移动端
|
||||||
|
isMobile: function () {
|
||||||
|
return navigator.userAgent.match(/(Android|iPhone|SymbianOS|Windows Phone|iPad|iPod)/i);
|
||||||
|
},
|
||||||
|
// 数字正则表达式,只能为0-9数字
|
||||||
|
numValid : function(text){
|
||||||
|
var patten = new RegExp(/^[0-9]+$/);
|
||||||
|
return patten.test(text);
|
||||||
|
},
|
||||||
|
// 英文正则表达式,只能为a-z和A-Z字母
|
||||||
|
enValid : function(text){
|
||||||
|
var patten = new RegExp(/^[a-zA-Z]+$/);
|
||||||
|
return patten.test(text);
|
||||||
|
},
|
||||||
|
// 英文、数字正则表达式,必须包含(字母,数字)
|
||||||
|
enNumValid : function(text){
|
||||||
|
var patten = new RegExp(/^(?=.*[a-zA-Z]+)(?=.*[0-9]+)[a-zA-Z0-9]+$/);
|
||||||
|
return patten.test(text);
|
||||||
|
},
|
||||||
|
// 英文、数字、特殊字符正则表达式,必须包含(字母,数字,特殊字符-_)
|
||||||
|
charValid : function(text){
|
||||||
|
var patten = new RegExp(/^(?=.*[A-Za-z])(?=.*\d)(?=.*[-_])[A-Za-z\d-_]{6,}$/);
|
||||||
|
return patten.test(text);
|
||||||
|
},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
})(jQuery);
|
})(jQuery);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,82 @@
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
validateRule();
|
||||||
|
$('.imgcode').click(function() {
|
||||||
|
var url = ctx + "captcha/captchaImage?type=" + captchaType + "&s=" + Math.random();
|
||||||
|
$(".imgcode").attr("src", url);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$.validator.setDefaults({
|
||||||
|
submitHandler: function() {
|
||||||
|
register();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function register() {
|
||||||
|
$.modal.loading($("#btnSubmit").data("loading"));
|
||||||
|
var username = $.common.trim($("input[name='username']").val());
|
||||||
|
var password = $.common.trim($("input[name='password']").val());
|
||||||
|
var validateCode = $("input[name='validateCode']").val();
|
||||||
|
$.ajax({
|
||||||
|
type: "post",
|
||||||
|
url: ctx + "register",
|
||||||
|
data: {
|
||||||
|
"loginName": username,
|
||||||
|
"password": password,
|
||||||
|
"validateCode": validateCode
|
||||||
|
},
|
||||||
|
success: function(r) {
|
||||||
|
if (r.code == 0) {
|
||||||
|
layer.alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", {
|
||||||
|
icon: 1,
|
||||||
|
title: "系统提示"
|
||||||
|
},
|
||||||
|
function(index) {
|
||||||
|
//关闭弹窗
|
||||||
|
layer.close(index);
|
||||||
|
location.href = ctx + 'login';
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
$.modal.closeLoading();
|
||||||
|
$('.imgcode').click();
|
||||||
|
$(".code").val("");
|
||||||
|
$.modal.msg(r.msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateRule() {
|
||||||
|
var icon = "<i class='fa fa-times-circle'></i> ";
|
||||||
|
$("#registerForm").validate({
|
||||||
|
rules: {
|
||||||
|
username: {
|
||||||
|
required: true,
|
||||||
|
minlength: 2
|
||||||
|
},
|
||||||
|
password: {
|
||||||
|
required: true,
|
||||||
|
minlength: 5
|
||||||
|
},
|
||||||
|
confirmPassword: {
|
||||||
|
required: true,
|
||||||
|
equalTo: "[name='password']"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
messages: {
|
||||||
|
username: {
|
||||||
|
required: icon + "请输入您的用户名",
|
||||||
|
minlength: icon + "用户名不能小于2个字符"
|
||||||
|
},
|
||||||
|
password: {
|
||||||
|
required: icon + "请输入您的密码",
|
||||||
|
minlength: icon + "密码不能小于5个字符",
|
||||||
|
},
|
||||||
|
confirmPassword: {
|
||||||
|
required: icon + "请再次输入您的密码",
|
||||||
|
equalTo: icon + "两次密码输入不一致"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -14,13 +14,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="form_basic.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="form_basic.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="form_basic.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -54,7 +54,7 @@
|
||||||
<h4>还不是会员?</h4>
|
<h4>还不是会员?</h4>
|
||||||
<p>您可以注册一个新账户</p>
|
<p>您可以注册一个新账户</p>
|
||||||
<p class="text-center">
|
<p class="text-center">
|
||||||
<a href="form_basic.html"><i class="fa fa-sign-in big-icon"></i></a>
|
<a href="#"><i class="fa fa-sign-in big-icon"></i></a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -69,13 +69,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="form_basic.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="form_basic.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="form_basic.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -119,13 +119,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="form_basic.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="form_basic.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="form_basic.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -160,13 +160,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="form_basic.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="form_basic.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="form_basic.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -176,7 +176,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="ibox-content">
|
<div class="ibox-content">
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<a data-toggle="modal" class="btn btn-primary" href="form_basic.html#modal-form">打开登录窗口</a>
|
<a data-toggle="modal" class="btn btn-primary" href="#modal-form">打开登录窗口</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -191,13 +191,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="form_basic.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="form_basic.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="form_basic.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -463,14 +463,14 @@
|
||||||
<button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">操作 <span class="caret"></span>
|
<button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">操作 <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="form_basic.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="form_basic.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="form_basic.html#">选项3</a>
|
<li><a href="#">选项3</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="form_basic.html#">选项4</a>
|
<li><a href="#">选项4</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -483,14 +483,14 @@
|
||||||
<button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">操作 <span class="caret"></span>
|
<button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">操作 <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu pull-right">
|
<ul class="dropdown-menu pull-right">
|
||||||
<li><a href="form_basic.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="form_basic.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="form_basic.html#">选项3</a>
|
<li><a href="#">选项3</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="form_basic.html#">选项4</a>
|
<li><a href="#">选项4</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -508,14 +508,14 @@
|
||||||
<button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button"><span class="caret"></span>
|
<button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button"><span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="form_basic.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="form_basic.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="form_basic.html#">选项3</a>
|
<li><a href="#">选项3</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="form_basic.html#">选项4</a>
|
<li><a href="#">选项4</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -580,7 +580,7 @@
|
||||||
<h4>还不是会员?</h4>
|
<h4>还不是会员?</h4>
|
||||||
<p>您可以注册一个账户</p>
|
<p>您可以注册一个账户</p>
|
||||||
<p class="text-center">
|
<p class="text-center">
|
||||||
<a href="form_basic.html"><i class="fa fa-sign-in big-icon"></i></a>
|
<a href="#"><i class="fa fa-sign-in big-icon"></i></a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -13,13 +13,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="buttons.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -56,13 +56,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="buttons.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -99,13 +99,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="buttons.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -143,13 +143,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="buttons.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -217,13 +217,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="buttons.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -241,14 +241,14 @@
|
||||||
<button data-toggle="dropdown" class="btn btn-primary dropdown-toggle">操作 <span class="caret"></span>
|
<button data-toggle="dropdown" class="btn btn-primary dropdown-toggle">操作 <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="buttons.html#">置顶</a>
|
<li><a href="#">置顶</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#" class="font-bold">修改</a>
|
<li><a href="#" class="font-bold">修改</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">禁用</a>
|
<li><a href="#">禁用</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="buttons.html#">删除</a>
|
<li><a href="#">删除</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -256,14 +256,14 @@
|
||||||
<button data-toggle="dropdown" class="btn btn-warning dropdown-toggle">操作 <span class="caret"></span>
|
<button data-toggle="dropdown" class="btn btn-warning dropdown-toggle">操作 <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="buttons.html#">置顶</a>
|
<li><a href="#">置顶</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">修改</a>
|
<li><a href="#">修改</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">禁用</a>
|
<li><a href="#">禁用</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="buttons.html#">删除</a>
|
<li><a href="#">删除</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -271,14 +271,14 @@
|
||||||
<button data-toggle="dropdown" class="btn btn-default dropdown-toggle">操作 <span class="caret"></span>
|
<button data-toggle="dropdown" class="btn btn-default dropdown-toggle">操作 <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="buttons.html#">置顶</a>
|
<li><a href="#">置顶</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#" class="font-bold">修改</a>
|
<li><a href="#" class="font-bold">修改</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">禁用</a>
|
<li><a href="#">禁用</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="buttons.html#">删除</a>
|
<li><a href="#">删除</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -288,14 +288,14 @@
|
||||||
<button data-toggle="dropdown" class="btn btn-primary btn-sm dropdown-toggle">操作 <span class="caret"></span>
|
<button data-toggle="dropdown" class="btn btn-primary btn-sm dropdown-toggle">操作 <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="buttons.html#">置顶</a>
|
<li><a href="#">置顶</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#" class="font-bold">修改</a>
|
<li><a href="#" class="font-bold">修改</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">禁用</a>
|
<li><a href="#">禁用</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="buttons.html#">删除</a>
|
<li><a href="#">删除</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -303,14 +303,14 @@
|
||||||
<button data-toggle="dropdown" class="btn btn-warning btn-sm dropdown-toggle">操作 <span class="caret"></span>
|
<button data-toggle="dropdown" class="btn btn-warning btn-sm dropdown-toggle">操作 <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="buttons.html#">置顶</a>
|
<li><a href="#">置顶</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#" class="font-bold">修改</a>
|
<li><a href="#" class="font-bold">修改</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">禁用</a>
|
<li><a href="#">禁用</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="buttons.html#">删除</a>
|
<li><a href="#">删除</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -318,14 +318,14 @@
|
||||||
<button data-toggle="dropdown" class="btn btn-default btn-sm dropdown-toggle">操作 <span class="caret"></span>
|
<button data-toggle="dropdown" class="btn btn-default btn-sm dropdown-toggle">操作 <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="buttons.html#">置顶</a>
|
<li><a href="#">置顶</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#" class="font-bold">修改</a>
|
<li><a href="#" class="font-bold">修改</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">禁用</a>
|
<li><a href="#">禁用</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="buttons.html#">删除</a>
|
<li><a href="#">删除</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -334,14 +334,14 @@
|
||||||
<button data-toggle="dropdown" class="btn btn-primary btn-xs dropdown-toggle">操作 <span class="caret"></span>
|
<button data-toggle="dropdown" class="btn btn-primary btn-xs dropdown-toggle">操作 <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="buttons.html#">置顶</a>
|
<li><a href="#">置顶</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#" class="font-bold">修改</a>
|
<li><a href="#" class="font-bold">修改</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">禁用</a>
|
<li><a href="#">禁用</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="buttons.html#">删除</a>
|
<li><a href="#">删除</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -349,14 +349,14 @@
|
||||||
<button data-toggle="dropdown" class="btn btn-warning btn-xs dropdown-toggle">操作 <span class="caret"></span>
|
<button data-toggle="dropdown" class="btn btn-warning btn-xs dropdown-toggle">操作 <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="buttons.html#">置顶</a>
|
<li><a href="#">置顶</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#" class="font-bold">修改</a>
|
<li><a href="#" class="font-bold">修改</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">禁用</a>
|
<li><a href="#">禁用</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="buttons.html#">删除</a>
|
<li><a href="#">删除</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -364,14 +364,14 @@
|
||||||
<button data-toggle="dropdown" class="btn btn-default btn-xs dropdown-toggle">操作 <span class="caret"></span>
|
<button data-toggle="dropdown" class="btn btn-default btn-xs dropdown-toggle">操作 <span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="buttons.html#">置顶</a>
|
<li><a href="#">置顶</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#" class="font-bold">修改</a>
|
<li><a href="#" class="font-bold">修改</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">禁用</a>
|
<li><a href="#">禁用</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="buttons.html#">删除</a>
|
<li><a href="#">删除</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -386,13 +386,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="buttons.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -431,13 +431,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="buttons.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -513,13 +513,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="buttons.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -576,13 +576,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="buttons.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="buttons.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="buttons.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -597,16 +597,16 @@
|
||||||
|
|
||||||
<h3 class="font-bold">按钮组</h3>
|
<h3 class="font-bold">按钮组</h3>
|
||||||
<p>
|
<p>
|
||||||
<a class="btn btn-default btn-rounded" href="buttons.html#">默认</a>
|
<a class="btn btn-default btn-rounded" href="#">默认</a>
|
||||||
<a class="btn btn-primary btn-rounded" href="buttons.html#">主要</a>
|
<a class="btn btn-primary btn-rounded" href="#">主要</a>
|
||||||
<a class="btn btn-success btn-rounded" href="buttons.html#">成果</a>
|
<a class="btn btn-success btn-rounded" href="#">成果</a>
|
||||||
<a class="btn btn-info btn-rounded" href="buttons.html#">信息</a>
|
<a class="btn btn-info btn-rounded" href="#">信息</a>
|
||||||
<a class="btn btn-warning btn-rounded" href="buttons.html#">警告</a>
|
<a class="btn btn-warning btn-rounded" href="#">警告</a>
|
||||||
<a class="btn btn-danger btn-rounded" href="buttons.html#">危险</a>
|
<a class="btn btn-danger btn-rounded" href="#">危险</a>
|
||||||
<a class="btn btn-danger btn-rounded btn-outline" href="buttons.html#">危险</a>
|
<a class="btn btn-danger btn-rounded btn-outline" href="#">危险</a>
|
||||||
<br/>
|
<br/>
|
||||||
<br/>
|
<br/>
|
||||||
<a class="btn btn-primary btn-rounded btn-block" href="buttons.html#"><i class="fa fa-info-circle"></i> 圆角块级带图标按钮</a>
|
<a class="btn btn-primary btn-rounded btn-block" href="#"><i class="fa fa-info-circle"></i> 圆角块级带图标按钮</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,161 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh">
|
||||||
|
<head>
|
||||||
|
<th:block th:include="include :: header('多级联动下拉')" />
|
||||||
|
</head>
|
||||||
|
<body class="gray-bg">
|
||||||
|
<div class="wrapper wrapper-content animated fadeInRight">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<div class="ibox float-e-margins">
|
||||||
|
<div class="ibox-title">
|
||||||
|
<h5>多级联动下拉<small>https://github.com/ciaoca/cxSelect</small></h5>
|
||||||
|
</div>
|
||||||
|
<div class="ibox-content">
|
||||||
|
<p>简单联动示例。</p>
|
||||||
|
<div id="element" class="row">
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<select class="type form-control m-b" data-first-title="请选择">
|
||||||
|
<option value="">请选择</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<select class="router form-control m-b" data-first-title="请选择">
|
||||||
|
<option value="">请选择</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<p>国内省市区联动。</p>
|
||||||
|
<div id="element1" class="row">
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<select class="province form-control m-b" data-first-title="选择省">
|
||||||
|
<option value="">请选择</option>
|
||||||
|
<option value="广东省" selected>广东省</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<select class="city form-control m-b" data-first-title="选择市">
|
||||||
|
<option value="">请选择</option>
|
||||||
|
<option value="深圳市" selected>深圳市</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<select class="area form-control m-b" data-first-title="选择地区">
|
||||||
|
<option value="">请选择</option>
|
||||||
|
<option value="南山区" selected>南山区</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<p>自定义选项。</p>
|
||||||
|
<div id="element2" class="row">
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<select class="first form-control m-b"></select>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<select class="second form-control m-b"></select>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<select class="third form-control m-b"></select>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<select class="fourth form-control m-b"></select>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<select class="fifth form-control m-b"></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="font-noraml">相关参数详细信息</label>
|
||||||
|
<div><a href="http://doc.ruoyi.vip/ruoyi/document/zjwd.html#jquery-cxselect" target="_blank">http://doc.ruoyi.vip/ruoyi/document/zjwd.html#jquery-cxselect</a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<th:block th:include="include :: footer" />
|
||||||
|
<th:block th:include="include :: jquery-cxselect-js" />
|
||||||
|
<script th:inline="javascript">
|
||||||
|
// 直接返回获取
|
||||||
|
var data = [[${data}]];
|
||||||
|
$('#element').cxSelect({
|
||||||
|
selects: ['type', 'router'],
|
||||||
|
jsonValue: 'v',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
|
||||||
|
// 通过默认url获取
|
||||||
|
var urlChina = 'cityData';
|
||||||
|
$.cxSelect.defaults.url = urlChina;
|
||||||
|
$('#element1').cxSelect({
|
||||||
|
selects: ['province', 'city', 'area'],
|
||||||
|
nodata: 'none'
|
||||||
|
});
|
||||||
|
|
||||||
|
// 固定值获取
|
||||||
|
$('#element2').cxSelect({
|
||||||
|
selects: ['first', 'second', 'third', 'fourth', 'fifth'],
|
||||||
|
required: true,
|
||||||
|
jsonValue: 'v',
|
||||||
|
data: [
|
||||||
|
{'v': '1', 'n': '第一级 >', 's': [
|
||||||
|
{'v': '2', 'n': '第二级 >', 's': [
|
||||||
|
{'v': '3', 'n': '第三级 >', 's': [
|
||||||
|
{'v': '4', 'n': '第四级 >', 's': [
|
||||||
|
{'v': '5', 'n': '第五级 >', 's': [
|
||||||
|
{'v': '6', 'n': '第六级 >'}
|
||||||
|
]}
|
||||||
|
]}
|
||||||
|
]}
|
||||||
|
]}
|
||||||
|
]},
|
||||||
|
{'v': 'test number', 'n': '测试数字', 's': [
|
||||||
|
{'v': 'text', 'n': '文本类型', 's': [
|
||||||
|
{'v': '4', 'n': '4'},
|
||||||
|
{'v': '5', 'n': '5'},
|
||||||
|
{'v': '6', 'n': '6'},
|
||||||
|
{'v': '7', 'n': '7'},
|
||||||
|
{'v': '8', 'n': '8'},
|
||||||
|
{'v': '9', 'n': '9'},
|
||||||
|
{'v': '10', 'n': '10'}
|
||||||
|
]},
|
||||||
|
{'v': 'number', 'n': '数值类型', 's': [
|
||||||
|
{'v': 11, 'n': 11},
|
||||||
|
{'v': 12, 'n': 12},
|
||||||
|
{'v': 13, 'n': 13},
|
||||||
|
{'v': 14, 'n': 14},
|
||||||
|
{'v': 15, 'n': 15},
|
||||||
|
{'v': 16, 'n': 16},
|
||||||
|
{'v': 17, 'n': 17}
|
||||||
|
]}
|
||||||
|
]},
|
||||||
|
{'v': 'test boolean','n': '测试 Boolean 类型', 's': [
|
||||||
|
{'v': true ,'n': true},
|
||||||
|
{'v': false ,'n': false}
|
||||||
|
]},
|
||||||
|
{v: 'test quotes', n: '测试属性不加引号', s: [
|
||||||
|
{v: 'quotes', n: '引号'}
|
||||||
|
]},
|
||||||
|
{v: 'test other', n: '测试奇怪的值', s: [
|
||||||
|
{v: '[]', n: '数组(空)'},
|
||||||
|
{v: [1,2,3], n: '数组(数值)'},
|
||||||
|
{v: ['a','b','c'], n: '数组(文字)'},
|
||||||
|
{v: new Date(), n: '日期'},
|
||||||
|
{v: new RegExp('\\d+'), n: '正则对象'},
|
||||||
|
{v: /\d+/, n: '正则直接量'},
|
||||||
|
{v: {}, n: '对象'},
|
||||||
|
{v: document.getElementById('custom_data'), n: 'DOM'},
|
||||||
|
{v: null, n: 'Null'},
|
||||||
|
{n: '未设置 value'}
|
||||||
|
]},
|
||||||
|
{'v': '' , 'n': '无子级'}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -14,13 +14,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="grid_options.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="grid_options.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -124,13 +124,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="grid_options.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="grid_options.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -183,13 +183,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="grid_options.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="grid_options.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -227,13 +227,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="grid_options.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="grid_options.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -270,13 +270,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="grid_options.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="grid_options.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -285,7 +285,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ibox-content">
|
<div class="ibox-content">
|
||||||
<p>在等宽的4网格中,网格不等高会碰到问题,为了解决这个问题,可使用<code>.clearfix</code>。<a href="grid_options.html#responsive-utilities">响应实用工具类</a>
|
<p>在等宽的4网格中,网格不等高会碰到问题,为了解决这个问题,可使用<code>.clearfix</code>。<a href="#responsive-utilities">响应实用工具类</a>
|
||||||
</p>
|
</p>
|
||||||
<div class="row show-grid">
|
<div class="row show-grid">
|
||||||
<div class="col-xs-6 col-sm-3">
|
<div class="col-xs-6 col-sm-3">
|
||||||
|
|
@ -315,13 +315,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="grid_options.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="grid_options.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -358,13 +358,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="grid_options.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="grid_options.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -401,13 +401,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="grid_options.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="grid_options.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="grid_options.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh">
|
||||||
|
<head>
|
||||||
|
<th:block th:include="include :: header('局部刷新')" />
|
||||||
|
</head>
|
||||||
|
<body class="gray-bg">
|
||||||
|
<div class="wrapper wrapper-content animated fadeInRight">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<div class="ibox">
|
||||||
|
<div class="ibox-content">
|
||||||
|
<h3>任务列表</h3>
|
||||||
|
<p class="small">
|
||||||
|
<i class="fa fa-hand-o-up"></i>
|
||||||
|
点击刷新按钮刷新数据到列表中
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="input-group">
|
||||||
|
<input id="task-name" type="text" placeholder="任务名称" class="input input-sm form-control">
|
||||||
|
<span class="input-group-btn">
|
||||||
|
<button type="button" class="btn btn-sm btn-white" onclick="refresh()">
|
||||||
|
<i class="fa fa-refresh"></i>
|
||||||
|
刷新
|
||||||
|
</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div id="tasklist">
|
||||||
|
<ul class="sortable-list connectList agile-list" th:fragment="fragment-tasklist">
|
||||||
|
<li th:if="${tasks != null}" th:each="item : ${tasks}" class="warning-element">
|
||||||
|
[[${item.name}]]
|
||||||
|
<div class="agile-detail">
|
||||||
|
<a href="#" class="pull-right btn btn-xs btn-white">[[${item.type}]]</a>
|
||||||
|
<i class="fa fa-clock-o"></i>
|
||||||
|
[[${item.date}]]
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<th:block th:include="include :: footer" />
|
||||||
|
<script>
|
||||||
|
function refresh(){
|
||||||
|
$.ajax({
|
||||||
|
type: "post",
|
||||||
|
url: ctx + "demo/form/localrefresh/task",
|
||||||
|
data: {
|
||||||
|
"taskName": $("#task-name").val(),
|
||||||
|
"fragment":'fragment-tasklist'
|
||||||
|
},
|
||||||
|
success: function(data) {
|
||||||
|
$("#tasklist").html(data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
<h2>若依后台管理系统</h2>
|
<h2>若依后台管理系统</h2>
|
||||||
<p>ruoyi是一个完全响应式,基于Bootstrap3.3.6最新版本开发的扁平化主题,她采用了主流的左右两栏式布局,使用了Html5+CSS3等现代技术,她提供了诸多的强大的可以重新组合的UI组件,并集成了最新的jQuery版本(v2.1.1),当然,也集成了很多功能强大,用途广泛的就jQuery插件,她可以用于所有的Web应用程序,如<b>网站管理后台</b>,<b>网站会员中心</b>,<b>CMS</b>,<b>CRM</b>,<b>OA</b>等等,当然,您也可以对她进行深度定制,以做出更强系统。</p>
|
<p>ruoyi是一个完全响应式,基于Bootstrap3.3.6最新版本开发的扁平化主题,她采用了主流的左右两栏式布局,使用了Html5+CSS3等现代技术,她提供了诸多的强大的可以重新组合的UI组件,并集成了最新的jQuery版本(v2.1.1),当然,也集成了很多功能强大,用途广泛的就jQuery插件,她可以用于所有的Web应用程序,如<b>网站管理后台</b>,<b>网站会员中心</b>,<b>CMS</b>,<b>CRM</b>,<b>OA</b>等等,当然,您也可以对她进行深度定制,以做出更强系统。</p>
|
||||||
<p>
|
<p>
|
||||||
<b>当前版本:</b>v4.1.0
|
<b>当前版本:</b>v4.4.0
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<span class="label label-warning">免费开源</span>
|
<span class="label label-warning">免费开源</span>
|
||||||
|
|
@ -56,7 +56,7 @@
|
||||||
<h3>你好,若依 </h3>
|
<h3>你好,若依 </h3>
|
||||||
<p>H+是一个完全响应式,基于Bootstrap3.3.6最新版本开发的扁平化主题,她采用了主流的左右两栏式布局,使用了Html5+CSS3等现代技术,她提供了诸多的强大的可以重新组合的UI组件,并集成了最新的jQuery版本(v2.1.1),当然,也集成了很多功能强大,用途广泛的就jQuery插件,她可以用于所有的Web应用程序,如<b>网站管理后台</b>,<b>网站会员中心</b>,<b>CMS</b>,<b>CRM</b>,<b>OA</b>等等,当然,您也可以对她进行深度定制,以做出更强系统。</p>
|
<p>H+是一个完全响应式,基于Bootstrap3.3.6最新版本开发的扁平化主题,她采用了主流的左右两栏式布局,使用了Html5+CSS3等现代技术,她提供了诸多的强大的可以重新组合的UI组件,并集成了最新的jQuery版本(v2.1.1),当然,也集成了很多功能强大,用途广泛的就jQuery插件,她可以用于所有的Web应用程序,如<b>网站管理后台</b>,<b>网站会员中心</b>,<b>CMS</b>,<b>CRM</b>,<b>OA</b>等等,当然,您也可以对她进行深度定制,以做出更强系统。</p>
|
||||||
<p>
|
<p>
|
||||||
<b>当前版本:</b>v4.1.0
|
<b>当前版本:</b>v4.4.0
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<span class="label label-warning">开源免费</span>
|
<span class="label label-warning">开源免费</span>
|
||||||
|
|
|
||||||
|
|
@ -14,13 +14,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="tabs_panels.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="tabs_panels.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="tabs_panels.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -76,13 +76,13 @@
|
||||||
<div class="panel-options">
|
<div class="panel-options">
|
||||||
|
|
||||||
<ul class="nav nav-tabs">
|
<ul class="nav nav-tabs">
|
||||||
<li class="active"><a data-toggle="tab" href="tabs_panels.html#tab-4"><i class="fa fa-laptop"></i></a>
|
<li class="active"><a data-toggle="tab" href="#tab-4"><i class="fa fa-laptop"></i></a>
|
||||||
</li>
|
</li>
|
||||||
<li class=""><a data-toggle="tab" href="tabs_panels.html#tab-5"><i class="fa fa-desktop"></i></a>
|
<li class=""><a data-toggle="tab" href="#tab-5"><i class="fa fa-desktop"></i></a>
|
||||||
</li>
|
</li>
|
||||||
<li class=""><a data-toggle="tab" href="tabs_panels.html#tab-6"><i class="fa fa-signal"></i></a>
|
<li class=""><a data-toggle="tab" href="#tab-6"><i class="fa fa-signal"></i></a>
|
||||||
</li>
|
</li>
|
||||||
<li class=""><a data-toggle="tab" href="tabs_panels.html#tab-7"><i class="fa fa-bar-chart-o"></i></a>
|
<li class=""><a data-toggle="tab" href="#tab-7"><i class="fa fa-bar-chart-o"></i></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -273,13 +273,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="tabs_panels.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="tabs_panels.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="tabs_panels.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -293,7 +293,7 @@
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h5 class="panel-title">
|
<h5 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion" href="tabs_panels.html#collapseOne">标题 #1</a>
|
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">标题 #1</a>
|
||||||
</h5>
|
</h5>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapseOne" class="panel-collapse collapse in">
|
<div id="collapseOne" class="panel-collapse collapse in">
|
||||||
|
|
@ -305,7 +305,7 @@
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion" href="tabs_panels.html#collapseTwo">标题 #2</a>
|
<a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">标题 #2</a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapseTwo" class="panel-collapse collapse">
|
<div id="collapseTwo" class="panel-collapse collapse">
|
||||||
|
|
@ -317,7 +317,7 @@
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h4 class="panel-title">
|
<h4 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#accordion" href="tabs_panels.html#collapseThree">标题 #3</a>
|
<a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">标题 #3</a>
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div id="collapseThree" class="panel-collapse collapse">
|
<div id="collapseThree" class="panel-collapse collapse">
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="icons.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="icons.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="icons.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="icons.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="icons.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="icons.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label"><span style="color: red; ">*</span>用户名称:</label>
|
<label class="col-sm-4 control-label is-required">用户名称:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input name="userName" placeholder="请输入用户名称" class="form-control" type="text">
|
<input name="userName" placeholder="请输入用户名称" class="form-control" type="text">
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label"><span style="color: red; ">*</span>归属部门:</label>
|
<label class="col-sm-4 control-label is-required">归属部门:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input name="deptName" type="text" placeholder="请选择归属部门" class="form-control">
|
<input name="deptName" type="text" placeholder="请选择归属部门" class="form-control">
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label"><span style="color: red; ">*</span>手机号码:</label>
|
<label class="col-sm-4 control-label is-required">手机号码:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input name="phonenumber" placeholder="请输入手机号码" class="form-control" type="text">
|
<input name="phonenumber" placeholder="请输入手机号码" class="form-control" type="text">
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -38,7 +38,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label"><span style="color: red; ">*</span>邮箱:</label>
|
<label class="col-sm-4 control-label is-required">邮箱:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input name="email" class="form-control" type="text" placeholder="请输入邮箱">
|
<input name="email" class="form-control" type="text" placeholder="请输入邮箱">
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label"><span style="color: red; ">*</span>登录账号:</label>
|
<label class="col-sm-4 control-label is-required">登录账号:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input name="loginName" placeholder="请输入登录账号" class="form-control" type="text">
|
<input name="loginName" placeholder="请输入登录账号" class="form-control" type="text">
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -56,7 +56,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label"><span style="color: red; ">*</span>登录密码:</label>
|
<label class="col-sm-4 control-label is-required">登录密码:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input name="password" placeholder="请输入登录密码" class="form-control" type="password">
|
<input name="password" placeholder="请输入登录密码" class="form-control" type="password">
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -23,13 +23,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="graph_flot.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="graph_flot.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -50,13 +50,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="graph_flot.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="graph_flot.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -80,13 +80,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="graph_flot.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="graph_flot.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -107,13 +107,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="graph_flot.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="graph_flot.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -134,13 +134,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="graph_flot.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="graph_flot.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -161,13 +161,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="graph_flot.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="graph_flot.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -188,13 +188,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="graph_flot.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="graph_flot.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -215,13 +215,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="graph_flot.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="graph_flot.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -245,13 +245,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_flot.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="graph_flot.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="graph_flot.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
|
||||||
|
|
@ -98,13 +98,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_sparkline.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="graph_sparkline.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="graph_sparkline.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -125,13 +125,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_sparkline.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="graph_sparkline.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="graph_sparkline.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
@ -152,13 +152,13 @@
|
||||||
<a class="collapse-link">
|
<a class="collapse-link">
|
||||||
<i class="fa fa-chevron-up"></i>
|
<i class="fa fa-chevron-up"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="dropdown-toggle" data-toggle="dropdown" href="graph_sparkline.html#">
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
<i class="fa fa-wrench"></i>
|
<i class="fa fa-wrench"></i>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-user">
|
<ul class="dropdown-menu dropdown-user">
|
||||||
<li><a href="graph_sparkline.html#">选项1</a>
|
<li><a href="#">选项1</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="graph_sparkline.html#">选项2</a>
|
<li><a href="#">选项2</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a class="close-link">
|
<a class="close-link">
|
||||||
|
|
|
||||||
|
|
@ -77,12 +77,12 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
initChildTable = function(index, row, $detail) {
|
initChildTable = function(index, row, $detail) {
|
||||||
var cur_table = $detail.html('<table style="table-layout:fixed"></table>').find('table');
|
var childTable = $detail.html('<table style="table-layout:fixed"></table>').find('table');
|
||||||
$(cur_table).bootstrapTable({
|
$(childTable).bootstrapTable({
|
||||||
url: prefix + "/list",
|
url: prefix + "/list",
|
||||||
method: 'post',
|
method: 'post',
|
||||||
sidePagination: "server",
|
sidePagination: "server",
|
||||||
contentType: "application/x-www-form-urlencoded", // 编码类型
|
contentType: "application/x-www-form-urlencoded",
|
||||||
queryParams : {
|
queryParams : {
|
||||||
userName: '测试8'
|
userName: '测试8'
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||||
|
<head>
|
||||||
|
<th:block th:include="include :: header('加载data数据')" />
|
||||||
|
</head>
|
||||||
|
<body class="gray-bg">
|
||||||
|
<div class="container-div">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12 select-table table-striped">
|
||||||
|
<table id="bootstrap-table"></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div th:include="include :: footer"></div>
|
||||||
|
<script th:inline="javascript">
|
||||||
|
var datas = [[${@dict.getType('sys_normal_disable')}]];
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
var options = {
|
||||||
|
data: [[${users}]],
|
||||||
|
sidePagination: "client",
|
||||||
|
showSearch: false,
|
||||||
|
showRefresh: false,
|
||||||
|
showToggle: false,
|
||||||
|
showColumns: false,
|
||||||
|
columns: [{
|
||||||
|
checkbox: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userId',
|
||||||
|
title : '用户ID'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userCode',
|
||||||
|
title : '用户编号'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userName',
|
||||||
|
title : '用户姓名'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userPhone',
|
||||||
|
title : '用户手机'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userEmail',
|
||||||
|
title : '用户邮箱'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userBalance',
|
||||||
|
title : '用户余额'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: '用户状态',
|
||||||
|
align: 'center',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return $.table.selectDictLabel(datas, value);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
align: 'center',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var actions = [];
|
||||||
|
actions.push('<a class="btn btn-success btn-xs" href="#"><i class="fa fa-edit"></i>编辑</a> ');
|
||||||
|
actions.push('<a class="btn btn-danger btn-xs" href="#"><i class="fa fa-remove"></i>删除</a>');
|
||||||
|
return actions.join('');
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
$.table.init(options);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -108,7 +108,7 @@
|
||||||
$.table.init(options);
|
$.table.init(options);
|
||||||
});
|
});
|
||||||
|
|
||||||
function onEditableSave (field, row, oldValue, $el) {
|
function onEditableSave (field, row, rowIndex, oldValue, $el) {
|
||||||
alert("字段名:" + field + ",当前值:" + row[field] + ",旧值:" + oldValue);
|
alert("字段名:" + field + ",当前值:" + row[field] + ",旧值:" + oldValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div th:include="include :: footer"></div>
|
<div th:include="include :: footer"></div>
|
||||||
|
<th:block th:include="include :: bootstrap-table-export-js" />
|
||||||
<script th:inline="javascript">
|
<script th:inline="javascript">
|
||||||
var prefix = ctx + "demo/table";
|
var prefix = ctx + "demo/table";
|
||||||
var datas = [[${@dict.getType('sys_normal_disable')}]];
|
var datas = [[${@dict.getType('sys_normal_disable')}]];
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div th:include="include :: footer"></div>
|
<div th:include="include :: footer"></div>
|
||||||
|
<th:block th:include="include :: bootstrap-table-fixed-columns-js" />
|
||||||
<script th:inline="javascript">
|
<script th:inline="javascript">
|
||||||
var prefix = ctx + "demo/table";
|
var prefix = ctx + "demo/table";
|
||||||
var datas = [[${@dict.getType('sys_normal_disable')}]];
|
var datas = [[${@dict.getType('sys_normal_disable')}]];
|
||||||
|
|
@ -36,6 +37,7 @@
|
||||||
showColumns: false,
|
showColumns: false,
|
||||||
fixedColumns: true,
|
fixedColumns: true,
|
||||||
fixedNumber: 3,
|
fixedNumber: 3,
|
||||||
|
fixedRightNumber: 3,
|
||||||
columns: [{
|
columns: [{
|
||||||
checkbox: true
|
checkbox: true
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@
|
||||||
showRefresh: false,
|
showRefresh: false,
|
||||||
showToggle: false,
|
showToggle: false,
|
||||||
showColumns: false,
|
showColumns: false,
|
||||||
|
footerStyle: footerStyle,
|
||||||
columns: [{
|
columns: [{
|
||||||
checkbox: true
|
checkbox: true
|
||||||
},
|
},
|
||||||
|
|
@ -78,6 +79,17 @@
|
||||||
};
|
};
|
||||||
$.table.init(options);
|
$.table.init(options);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function footerStyle(column) {
|
||||||
|
return {
|
||||||
|
// userBalance: {
|
||||||
|
// classes: 'class'
|
||||||
|
// },
|
||||||
|
userBalance: {
|
||||||
|
css: { color: 'red', 'font-weight': 'normal' }
|
||||||
|
}
|
||||||
|
}[column.field]
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -0,0 +1,91 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||||
|
<head>
|
||||||
|
<th:block th:include="include :: header('表格标题格式化')" />
|
||||||
|
</head>
|
||||||
|
<body class="gray-bg">
|
||||||
|
<div class="container-div">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12 select-table table-striped">
|
||||||
|
<table id="bootstrap-table"></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div th:include="include :: footer"></div>
|
||||||
|
<script th:inline="javascript">
|
||||||
|
var prefix = ctx + "demo/table";
|
||||||
|
var datas = [[${@dict.getType('sys_normal_disable')}]];
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
var options = {
|
||||||
|
url: prefix + "/list",
|
||||||
|
showSearch: false,
|
||||||
|
showRefresh: false,
|
||||||
|
showToggle: false,
|
||||||
|
showColumns: false,
|
||||||
|
headerStyle: headerStyle,
|
||||||
|
columns: [{
|
||||||
|
checkbox: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userId',
|
||||||
|
title : '用户ID'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userCode',
|
||||||
|
title : '用户编号'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userName',
|
||||||
|
title : '用户姓名'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userPhone',
|
||||||
|
title : '用户手机'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userEmail',
|
||||||
|
title : '用户邮箱'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userBalance',
|
||||||
|
title : '用户余额'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'status',
|
||||||
|
title: '用户状态',
|
||||||
|
align: 'center',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return $.table.selectDictLabel(datas, value);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
align: 'center',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var actions = [];
|
||||||
|
actions.push('<a class="btn btn-success btn-xs" href="#"><i class="fa fa-edit"></i>编辑</a> ');
|
||||||
|
actions.push('<a class="btn btn-danger btn-xs" href="#"><i class="fa fa-remove"></i>删除</a>');
|
||||||
|
return actions.join('');
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
$.table.init(options);
|
||||||
|
});
|
||||||
|
|
||||||
|
function headerStyle(column) {
|
||||||
|
return {
|
||||||
|
userId: {
|
||||||
|
classes: 'uppercase'
|
||||||
|
},
|
||||||
|
userName: {
|
||||||
|
css: { background: 'yellow' }
|
||||||
|
},
|
||||||
|
userBalance: {
|
||||||
|
css: { color: 'red' }
|
||||||
|
}
|
||||||
|
} [column.field]
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -35,7 +35,7 @@
|
||||||
<i class="fa fa-remove"></i> 删除
|
<i class="fa fa-remove"></i> 删除
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-12 select-table table-striped">
|
<div class="col-xs-12 select-table table-striped">
|
||||||
<table id="bootstrap-table1"></table>
|
<table id="bootstrap-table1"></table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -73,7 +73,7 @@
|
||||||
<i class="fa fa-remove"></i> 删除
|
<i class="fa fa-remove"></i> 删除
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-12 select-table table-striped">
|
<div class="col-xs-12 select-table table-striped">
|
||||||
<table id="bootstrap-table2"></table>
|
<table id="bootstrap-table2"></table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,83 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||||
|
<head>
|
||||||
|
<th:block th:include="include :: header('表格打印配置')" />
|
||||||
|
</head>
|
||||||
|
<body class="gray-bg">
|
||||||
|
<div class="container-div">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12 select-table table-striped">
|
||||||
|
<!-- data-show-print设置为true为显示工具栏上的“打印”按钮。
|
||||||
|
data-print-as-filtered-and-sorted-on-ui为true时-在用户界面上按排序和过滤条件打印表格。请注意,如果设置为true以及用于过滤和排序的显式预定义打印选项(printFilter,printSortOrder,printSortColumn),则它们将应用于已由UI控件过滤和排序的数据。对于在UI上按过滤和排序方式打印数据-请勿设置以下3个选项:printFilter,printSortOrder,printSortColumn
|
||||||
|
data-print-page-builder 接收html <table>元素作为字符串参数,返回html字符串进行打印。用于样式和添加页眉或页脚。
|
||||||
|
data-print-sort-column 设置列字段名称以对打印表进行排序
|
||||||
|
data-print-sort-order 有效值:“ asc”,“ desc”。仅当设置了printSortColumn时相关
|
||||||
|
data-print-filter 设置值以按此列过滤打印的数据。
|
||||||
|
data-print-formatter 函数(值,行,索引)-返回字符串。格式化打印表中此列的单元格值。函数行为类似于“ formatter”列选项
|
||||||
|
printIgnore 设置为true可以在打印页面中隐藏此列。 -->
|
||||||
|
<table id="bootstrap-table" data-show-print="true"></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div th:include="include :: footer"></div>
|
||||||
|
<th:block th:include="include :: bootstrap-table-print-js" />
|
||||||
|
<script th:inline="javascript">
|
||||||
|
var prefix = ctx + "demo/table";
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
var options = {
|
||||||
|
url: prefix + "/list",
|
||||||
|
showSearch: false,
|
||||||
|
showRefresh: false,
|
||||||
|
showToggle: false,
|
||||||
|
showColumns: false,
|
||||||
|
columns: [{
|
||||||
|
checkbox: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userId',
|
||||||
|
title : '用户ID'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userCode',
|
||||||
|
title : '用户编号'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userName',
|
||||||
|
title : '用户姓名'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userPhone',
|
||||||
|
title : '用户手机'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userEmail',
|
||||||
|
title : '用户邮箱'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userBalance',
|
||||||
|
title : '用户余额'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
align: 'center',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var actions = [];
|
||||||
|
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;" onclick="remove(this)"><i class="fa fa-remove"></i>删除</a>');
|
||||||
|
return actions.join('');
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
$.table.init(options);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 假删除操作
|
||||||
|
function remove(obj) {
|
||||||
|
$.modal.confirm("确认要删除吗?", function() {
|
||||||
|
$(obj).parents("tr").remove();
|
||||||
|
$.modal.msgSuccess('已删除!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,79 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||||
|
<head>
|
||||||
|
<th:block th:include="include :: header('表格自动刷新')" />
|
||||||
|
</head>
|
||||||
|
<body class="gray-bg">
|
||||||
|
<div class="container-div">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12 select-table table-striped">
|
||||||
|
<!-- data-auto-refresh设置true为启用自动刷新插件
|
||||||
|
data-auto-refresh-interval为每次自动刷新发生的时间(以秒为单位)默认60。
|
||||||
|
data-auto-refresh-silent设置为true可以自动无提示刷新。默认: true
|
||||||
|
data-auto-refresh-status 设置true为启用自动刷新。这是表加载时自动刷新的状态。单击按钮切换此属性。这只是自动刷新的默认状态,因为用户始终可以通过单击按钮来更改它。 默认: true -->
|
||||||
|
<table id="bootstrap-table" data-auto-refresh="true" data-auto-refresh-interval="30"></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div th:include="include :: footer"></div>
|
||||||
|
<th:block th:include="include :: bootstrap-table-auto-refresh-js" />
|
||||||
|
<script th:inline="javascript">
|
||||||
|
var prefix = ctx + "demo/table";
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
var options = {
|
||||||
|
url: prefix + "/list",
|
||||||
|
showSearch: false,
|
||||||
|
showRefresh: false,
|
||||||
|
showToggle: false,
|
||||||
|
showColumns: false,
|
||||||
|
columns: [{
|
||||||
|
checkbox: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userId',
|
||||||
|
title : '用户ID'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userCode',
|
||||||
|
title : '用户编号'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userName',
|
||||||
|
title : '用户姓名'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userPhone',
|
||||||
|
title : '用户手机'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userEmail',
|
||||||
|
title : '用户邮箱'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field : 'userBalance',
|
||||||
|
title : '用户余额'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
align: 'center',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var actions = [];
|
||||||
|
actions.push('<a class="btn btn-danger btn-xs" href="javascript:;" onclick="remove(this)"><i class="fa fa-remove"></i>删除</a>');
|
||||||
|
return actions.join('');
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
$.table.init(options);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 假删除操作
|
||||||
|
function remove(obj) {
|
||||||
|
$.modal.confirm("确认要删除吗?", function() {
|
||||||
|
$(obj).parents("tr").remove();
|
||||||
|
$.modal.msgSuccess('已删除!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -62,6 +62,29 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-12 search-collapse">
|
||||||
|
<p class="select-title">多级联动下拉查询</p>
|
||||||
|
<form id="cxselect-form">
|
||||||
|
<div class="select-list">
|
||||||
|
<ul id="element">
|
||||||
|
<li>
|
||||||
|
商户编号:<input type="text" name="userId"/>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
充值类型:<select class="type"></select>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
充值路由:<select class="router"></select>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i> 搜索</a>
|
||||||
|
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('cxselect-form')"><i class="fa fa-refresh"></i> 重置</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-12 search-collapse">
|
<div class="col-sm-12 search-collapse">
|
||||||
<p class="select-title">下拉多选条件查询</p>
|
<p class="select-title">下拉多选条件查询</p>
|
||||||
<form id="select-form">
|
<form id="select-form">
|
||||||
|
|
@ -97,19 +120,19 @@
|
||||||
<div class="select-list">
|
<div class="select-list">
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<p style="width: 80px">商户编号:</p>
|
<label style="width: 80px">商户编号:</label>
|
||||||
<input type="text" name="userId"/>
|
<input type="text" name="userId"/>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p style="width: 80px">订单号:</p>
|
<label style="width: 80px">订单号:</label>
|
||||||
<input type="text" name="orderNo"/>
|
<input type="text" name="orderNo"/>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p style="width: 80px">日期:</p>
|
<label style="width: 80px">日期:</label>
|
||||||
<input type="text" class="time-input" placeholder="日期"/>
|
<input type="text" class="time-input" placeholder="日期"/>
|
||||||
</li>
|
</li>
|
||||||
<li class="select-selectpicker">
|
<li class="select-selectpicker">
|
||||||
<p style="width: 80px">状态:</p>
|
<label style="width: 80px">状态:</label>
|
||||||
<select class="selectpicker" data-none-selected-text="请选择" multiple>
|
<select class="selectpicker" data-none-selected-text="请选择" multiple>
|
||||||
<option value="">所有</option>
|
<option value="">所有</option>
|
||||||
<option value="0">初始</option>
|
<option value="0">初始</option>
|
||||||
|
|
@ -119,7 +142,7 @@
|
||||||
</select>
|
</select>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p style="width: 80px">供货商通道:</p>
|
<label style="width: 80px">供货商通道:</label>
|
||||||
<select>
|
<select>
|
||||||
<option value="">所有</option>
|
<option value="">所有</option>
|
||||||
<option value="0">腾讯</option>
|
<option value="0">腾讯</option>
|
||||||
|
|
@ -128,7 +151,7 @@
|
||||||
</select>
|
</select>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p style="width: 80px">来源:</p>
|
<label style="width: 80px">来源:</label>
|
||||||
<select>
|
<select>
|
||||||
<option value="">所有</option>
|
<option value="">所有</option>
|
||||||
<option value="0">手机</option>
|
<option value="0">手机</option>
|
||||||
|
|
@ -137,7 +160,7 @@
|
||||||
</select>
|
</select>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p style="width: 80px">运营商:</p>
|
<label style="width: 80px">运营商:</label>
|
||||||
<select>
|
<select>
|
||||||
<option value="">所有</option>
|
<option value="">所有</option>
|
||||||
<option value="0">移动</option>
|
<option value="0">移动</option>
|
||||||
|
|
@ -146,7 +169,7 @@
|
||||||
</select>
|
</select>
|
||||||
</li>
|
</li>
|
||||||
<li class="select-time">
|
<li class="select-time">
|
||||||
<p style="width: 80px">回调时间:</p>
|
<label style="width: 80px">回调时间:</label>
|
||||||
<input type="text" class="time-input" placeholder="开始时间"/>
|
<input type="text" class="time-input" placeholder="开始时间"/>
|
||||||
<span>-</span>
|
<span>-</span>
|
||||||
<input type="text" class="time-input" placeholder="结束时间"/>
|
<input type="text" class="time-input" placeholder="结束时间"/>
|
||||||
|
|
@ -164,5 +187,16 @@
|
||||||
</div>
|
</div>
|
||||||
<th:block th:include="include :: footer" />
|
<th:block th:include="include :: footer" />
|
||||||
<th:block th:include="include :: bootstrap-select-js" />
|
<th:block th:include="include :: bootstrap-select-js" />
|
||||||
|
<th:block th:include="include :: jquery-cxselect-js" />
|
||||||
|
|
||||||
|
<script th:inline="javascript">
|
||||||
|
// 直接返回获取
|
||||||
|
var data = [{"v":"taobao","n":"淘宝","s":[{"v":"tm","n":"天猫"},{"v":"jhs","n":"聚划算"}]},{"v":"jd","n":"京东","s":[{"v":"jdcs","n":"京东超市"},{"v":"jdsx","n":"京东生鲜"}]}];
|
||||||
|
$('#element').cxSelect({
|
||||||
|
selects: ['type', 'router'],
|
||||||
|
jsonValue: 'v',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,207 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||||
|
<head>
|
||||||
|
<th:block th:include="include :: header('主子表提交')" />
|
||||||
|
<th:block th:include="include :: datetimepicker-css" />
|
||||||
|
</head>
|
||||||
|
<body class="gray-bg">
|
||||||
|
<div class="main-content">
|
||||||
|
<form id="form-add" class="form-horizontal">
|
||||||
|
<input name="deptId" type="hidden" id="treeId"/>
|
||||||
|
<h4 class="form-header h4">客户信息</h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label is-required">客户名称:</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input name="name" placeholder="请输入客户名称" class="form-control" type="text" maxlength="30">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label is-required">用户性别:</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<select name="sex" class="form-control" th:with="type=${@dict.getType('sys_user_sex')}">
|
||||||
|
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label is-required">手机号码:</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input id="phonenumber" name="phonenumber" placeholder="请输入手机号码" class="form-control" type="text" maxlength="11">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label is-required">生日:</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<div class="input-group date">
|
||||||
|
<input name="birthday" class="form-control" placeholder="yyyy-MM-dd" type="text">
|
||||||
|
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-2 control-label">备注:</label>
|
||||||
|
<div class="col-xs-10">
|
||||||
|
<textarea name="remark" maxlength="500" class="form-control" rows="3"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<h4 class="form-header h4">商品数据</h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<button type="button" class="btn btn-white btn-sm" onclick="addColumn()"><i class="fa fa-plus"> 增加</i></button>
|
||||||
|
<button type="button" class="btn btn-white btn-sm" onclick="sub.delColumn()"><i class="fa fa-minus"> 删除</i></button>
|
||||||
|
<div class="col-sm-12 select-table table-striped">
|
||||||
|
<table id="bootstrap-table"></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-offset-5 col-sm-10">
|
||||||
|
<button type="button" class="btn btn-sm btn-primary" onclick="submitHandler()"><i class="fa fa-check"></i>保 存</button>
|
||||||
|
<button type="button" class="btn btn-sm btn-danger" onclick="closeItem()"><i class="fa fa-reply-all"></i>关 闭 </button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<th:block th:include="include :: footer" />
|
||||||
|
<th:block th:include="include :: datetimepicker-js" />
|
||||||
|
<script th:src="@{/js/jquery.tmpl.js}"></script>
|
||||||
|
<script th:inline="javascript">
|
||||||
|
$(function() {
|
||||||
|
var options = {
|
||||||
|
pagination: false,
|
||||||
|
showSearch: false,
|
||||||
|
showRefresh: false,
|
||||||
|
showToggle: false,
|
||||||
|
showColumns: false,
|
||||||
|
sidePagination: "client",
|
||||||
|
columns: [{
|
||||||
|
checkbox: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'index',
|
||||||
|
align: 'center',
|
||||||
|
title: "序号",
|
||||||
|
formatter: function (value, row, index) {
|
||||||
|
var columnIndex = $.common.sprintf("<input type='hidden' name='index' value='%s'>", $.table.serialNumber(index));
|
||||||
|
return columnIndex + $.table.serialNumber(index);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'name',
|
||||||
|
align: 'center',
|
||||||
|
title: '商品名称',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var html = $.common.sprintf("<input class='form-control' type='text' name='goods[%s].name' value='%s'>", index, value);
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'weight',
|
||||||
|
align: 'center',
|
||||||
|
title: '商品重量',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var html = $.common.sprintf("<input class='form-control' type='text' name='goods[%s].weight' value='%s'>", index, value);
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'date',
|
||||||
|
align: 'center',
|
||||||
|
title: '商品日期',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var html = $.common.sprintf("<input class='form-control' type='text' name='goods[%s].date' value='%s' placeholder='yyyy-MM-dd'>", index, value);
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'price',
|
||||||
|
align: 'center',
|
||||||
|
title: '商品价格',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var html = $.common.sprintf("<input class='form-control' type='text' name='goods[%s].price' value='%s'>", index, value);
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'type',
|
||||||
|
align: 'center',
|
||||||
|
title: '商品种类',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var data = [{ index: index, type: value }];
|
||||||
|
return $("#goodsTypeTpl").tmpl(data).html();
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
$.table.init(options);
|
||||||
|
});
|
||||||
|
|
||||||
|
/* 主子表-提交 */
|
||||||
|
function submitHandler(index, layero){
|
||||||
|
var data = $("#form-add").serializeArray();
|
||||||
|
$.operate.saveModal("/demo/operate/customer/add", data);
|
||||||
|
}
|
||||||
|
|
||||||
|
$("input[name='birthday']").datetimepicker({
|
||||||
|
format: "yyyy-mm-dd",
|
||||||
|
minView: "month",
|
||||||
|
autoclose: true
|
||||||
|
});
|
||||||
|
|
||||||
|
function bindDatetimepicker() {
|
||||||
|
$("input[name$='date']").datetimepicker({
|
||||||
|
format: "yyyy-mm-dd",
|
||||||
|
minView: "month",
|
||||||
|
autoclose: true,
|
||||||
|
pickerPosition:'top-right'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function addColumn() {
|
||||||
|
var count = $("#" + table.options.id).bootstrapTable('getData').length;
|
||||||
|
sub.editColumn();
|
||||||
|
|
||||||
|
$("#" + table.options.id).bootstrapTable('insertRow', {
|
||||||
|
index: count,
|
||||||
|
row: {
|
||||||
|
index: $.table.serialNumber(count),
|
||||||
|
name: "",
|
||||||
|
weight: "",
|
||||||
|
price: "",
|
||||||
|
date: "",
|
||||||
|
type: "",
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
bindDatetimepicker();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<!-- 商品类型 -->
|
||||||
|
<script id="goodsTypeTpl" type="text/x-jquery-tmpl">
|
||||||
|
<div>
|
||||||
|
<select class='form-control' name='goods[${index}].type'>
|
||||||
|
<option value="">所有</option>
|
||||||
|
<option value="0" {{if type==="0"}}selected{{/if}}>寒性</option>
|
||||||
|
<option value="1" {{if type==="1"}}selected{{/if}}>热性</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
<div class="error-desc">
|
<div class="error-desc">
|
||||||
对不起,您没有访问权限,请不要进行非法操作!您可以返回主页面
|
对不起,您没有访问权限,请不要进行非法操作!您可以返回主页面
|
||||||
<a th:href="javascript:index()" class="btn btn-outline btn-primary btn-xs">返回主页</a>
|
<a href="javascript:index()" class="btn btn-outline btn-primary btn-xs">返回主页</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script th:inline="javascript">
|
<script th:inline="javascript">
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
<head th:fragment=header(title)>
|
<head th:fragment=header(title)>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="keywords" content="">
|
<meta name="keywords" content="">
|
||||||
<meta name="description" content="">
|
<meta name="description" content="">
|
||||||
<title th:text="${title}"></title>
|
<title th:text="${title}"></title>
|
||||||
|
|
@ -9,38 +10,34 @@
|
||||||
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
|
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
|
||||||
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
|
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
|
||||||
<!-- bootstrap-table 表格插件样式 -->
|
<!-- bootstrap-table 表格插件样式 -->
|
||||||
<link th:href="@{/ajax/libs/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
|
<link th:href="@{/ajax/libs/bootstrap-table/bootstrap-table.min.css?v=20200727}" rel="stylesheet"/>
|
||||||
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
|
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
|
||||||
<link th:href="@{/css/style.css}" rel="stylesheet"/>
|
<link th:href="@{/css/style.css?v=20200903}" rel="stylesheet"/>
|
||||||
<link th:href="@{/ruoyi/css/ry-ui.css}" rel="stylesheet"/>
|
<link th:href="@{/ruoyi/css/ry-ui.css?v=4.4.0}" rel="stylesheet"/>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<!-- 通用JS -->
|
<!-- 通用JS -->
|
||||||
<div th:fragment="footer">
|
<div th:fragment="footer">
|
||||||
|
<a id="scroll-up" href="#" class="btn btn-sm display"><i class="fa fa-angle-double-up"></i></a>
|
||||||
<script th:src="@{/js/jquery.min.js}"></script>
|
<script th:src="@{/js/jquery.min.js}"></script>
|
||||||
<script th:src="@{/js/bootstrap.min.js}"></script>
|
<script th:src="@{/js/bootstrap.min.js}"></script>
|
||||||
<!-- bootstrap-table 表格插件 -->
|
<!-- bootstrap-table 表格插件 -->
|
||||||
<script th:src="@{/ajax/libs/bootstrap-table/bootstrap-table.min.js?v=20191219}"></script>
|
<script th:src="@{/ajax/libs/bootstrap-table/bootstrap-table.min.js?v=20200727}"></script>
|
||||||
<script th:src="@{/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}"></script>
|
<script th:src="@{/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js?v=20200727}"></script>
|
||||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js}"></script>
|
<script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js?v=20200727}"></script>
|
||||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js}"></script>
|
|
||||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/columns/bootstrap-table-fixed-columns.js}"></script>
|
|
||||||
<!-- jquery-validate 表单验证插件 -->
|
<!-- jquery-validate 表单验证插件 -->
|
||||||
<script th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script>
|
<script th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script>
|
||||||
<script th:src="@{/ajax/libs/validate/messages_zh.min.js}"></script>
|
<script th:src="@{/ajax/libs/validate/messages_zh.min.js}"></script>
|
||||||
<script th:src="@{/ajax/libs/validate/jquery.validate.extend.js}"></script>
|
<script th:src="@{/ajax/libs/validate/jquery.validate.extend.js}"></script>
|
||||||
<!-- jquery-validate 表单树插件 -->
|
<!-- jquery-validate 表单树插件 -->
|
||||||
<script th:src="@{/ajax/libs/bootstrap-treetable/bootstrap-treetable.js}"></script>
|
<script th:src="@{/ajax/libs/bootstrap-treetable/bootstrap-treetable.js}"></script>
|
||||||
<!-- jquery-export 表格导出插件 -->
|
|
||||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js}"></script>
|
|
||||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/export/tableExport.js}"></script>
|
|
||||||
<!-- 遮罩层 -->
|
<!-- 遮罩层 -->
|
||||||
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
|
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
|
||||||
<script th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script>
|
<script th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script>
|
||||||
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
|
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
|
||||||
<script th:src="@{/ajax/libs/layui/layui.js}"></script>
|
<script th:src="@{/ajax/libs/layui/layui.js}"></script>
|
||||||
<script th:src="@{/ruoyi/js/common.js?v=4.1.0}"></script>
|
<script th:src="@{/ruoyi/js/common.js?v=4.4.0}"></script>
|
||||||
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.1.0}"></script>
|
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.4.0}"></script>
|
||||||
<script th:inline="javascript"> var ctx = [[@{/}]]; </script>
|
<script th:inline="javascript"> var ctx = [[@{/}]]; </script>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -74,7 +71,7 @@
|
||||||
<link th:href="@{/ajax/libs/datapicker/bootstrap-datetimepicker.min.css}" rel="stylesheet"/>
|
<link th:href="@{/ajax/libs/datapicker/bootstrap-datetimepicker.min.css}" rel="stylesheet"/>
|
||||||
</div>
|
</div>
|
||||||
<div th:fragment="datetimepicker-js">
|
<div th:fragment="datetimepicker-js">
|
||||||
<script th:src="@{/ajax/libs//datapicker/bootstrap-datetimepicker.min.js}"></script>
|
<script th:src="@{/ajax/libs/datapicker/bootstrap-datetimepicker.min.js}"></script>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- ui布局插件 -->
|
<!-- ui布局插件 -->
|
||||||
|
|
@ -95,12 +92,12 @@
|
||||||
<script th:src="@{/ajax/libs/summernote/summernote-zh-CN.js}"></script>
|
<script th:src="@{/ajax/libs/summernote/summernote-zh-CN.js}"></script>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- cropbox图像裁剪插件 -->
|
<!-- cropper图像裁剪插件 -->
|
||||||
<div th:fragment="cropbox-css">
|
<div th:fragment="cropper-css">
|
||||||
<link th:href="@{/ajax/libs/cropbox/cropbox.css}" rel="stylesheet"/>
|
<link th:href="@{/ajax/libs/cropper/cropper.min.css}" rel="stylesheet"/>
|
||||||
</div>
|
</div>
|
||||||
<div th:fragment="cropbox-js">
|
<div th:fragment="cropper-js">
|
||||||
<script th:src="@{/ajax/libs/cropbox/cropbox.js}"></script>
|
<script th:src="@{/ajax/libs/cropper/cropper.min.js}"></script>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- jasny功能扩展插件 -->
|
<!-- jasny功能扩展插件 -->
|
||||||
|
|
@ -137,6 +134,11 @@
|
||||||
<script th:src="@{/ajax/libs/typeahead/bootstrap3-typeahead.min.js}"></script>
|
<script th:src="@{/ajax/libs/typeahead/bootstrap3-typeahead.min.js}"></script>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- 多级联动下拉 -->
|
||||||
|
<div th:fragment="jquery-cxselect-js">
|
||||||
|
<script th:src="@{/ajax/libs/cxselect/jquery.cxselect.min.js}"></script>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- jsonview格式化和语法高亮JSON格式数据查看插件 -->
|
<!-- jsonview格式化和语法高亮JSON格式数据查看插件 -->
|
||||||
<div th:fragment="jsonview-css">
|
<div th:fragment="jsonview-css">
|
||||||
<link th:href="@{/ajax/libs/jsonview/jquery.jsonview.css}" rel="stylesheet"/>
|
<link th:href="@{/ajax/libs/jsonview/jquery.jsonview.css}" rel="stylesheet"/>
|
||||||
|
|
@ -180,5 +182,26 @@
|
||||||
</div>
|
</div>
|
||||||
<div th:fragment="bootstrap-table-editable-js">
|
<div th:fragment="bootstrap-table-editable-js">
|
||||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/editable/bootstrap-editable.min.js}"></script>
|
<script th:src="@{/ajax/libs/bootstrap-table/extensions/editable/bootstrap-editable.min.js}"></script>
|
||||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.js}"></script>
|
<script th:src="@{/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.min.js?v=20200727}"></script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 表格导出插件 -->
|
||||||
|
<div th:fragment="bootstrap-table-export-js">
|
||||||
|
<script th:src="@{/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js}"></script>
|
||||||
|
<script th:src="@{/ajax/libs/bootstrap-table/extensions/export/tableExport.js}"></script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 表格冻结列插件 -->
|
||||||
|
<div th:fragment="bootstrap-table-fixed-columns-js">
|
||||||
|
<script th:src="@{/ajax/libs/bootstrap-table/extensions/columns/bootstrap-table-fixed-columns.min.js?v=20200727}"></script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 表格自动刷新插件 -->
|
||||||
|
<div th:fragment="bootstrap-table-auto-refresh-js">
|
||||||
|
<script th:src="@{/ajax/libs/bootstrap-table/extensions/auto-refresh/bootstrap-table-auto-refresh.min.js?v=20200729}"></script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 表格打印插件 -->
|
||||||
|
<div th:fragment="bootstrap-table-print-js">
|
||||||
|
<script th:src="@{/ajax/libs/bootstrap-table/extensions/print/bootstrap-table-print.min.js?v=20200729}"></script>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -0,0 +1,396 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta name="renderer" content="webkit">
|
||||||
|
<title>若依系统首页</title>
|
||||||
|
<!-- 避免IE使用兼容模式 -->
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<link th:href="@{favicon.ico}" rel="shortcut icon"/>
|
||||||
|
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
|
||||||
|
<link th:href="@{/css/jquery.contextMenu.min.css}" rel="stylesheet"/>
|
||||||
|
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
|
||||||
|
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
|
||||||
|
<link th:href="@{/css/style.css}" rel="stylesheet"/>
|
||||||
|
<link th:href="@{/css/skins.css?v=20200902}" rel="stylesheet"/>
|
||||||
|
<link th:href="@{/ruoyi/css/ry-ui.css?v=4.4.0}" rel="stylesheet"/>
|
||||||
|
</head>
|
||||||
|
<body class="fixed-sidebar full-height-layout gray-bg" style="overflow: hidden">
|
||||||
|
<div id="wrapper">
|
||||||
|
|
||||||
|
<!--左侧导航开始-->
|
||||||
|
<nav class="navbar-default navbar-static-side" role="navigation">
|
||||||
|
<div class="nav-close">
|
||||||
|
<i class="fa fa-times-circle"></i>
|
||||||
|
</div>
|
||||||
|
<a th:href="@{/index}">
|
||||||
|
<li class="logo hidden-xs">
|
||||||
|
<span class="logo-lg">RuoYi</span>
|
||||||
|
</li>
|
||||||
|
</a>
|
||||||
|
<div class="sidebar-collapse tab-content" id="side-menu">
|
||||||
|
<div class="user-panel">
|
||||||
|
<a class="menuItem noactive" title="个人中心" th:href="@{/system/user/profile}">
|
||||||
|
<div class="hide" th:text="个人中心"></div>
|
||||||
|
<div class="pull-left image">
|
||||||
|
<img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="img-circle" alt="User Image">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
<div class="pull-left info">
|
||||||
|
<p>[[${user.loginName}]]</p>
|
||||||
|
<a href="#"><i class="fa fa-circle text-success"></i> 在线</a>
|
||||||
|
<a th:href="@{logout}" style="padding-left:5px;"><i class="fa fa-sign-out text-danger"></i> 注销</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 左侧菜单 -->
|
||||||
|
<th:block th:each="menu : ${menus}">
|
||||||
|
<div class="tab-pane fade height-full" th:id="|menu_${menu.menuId}|">
|
||||||
|
<ul class="nav">
|
||||||
|
<li th:each="cmenu : ${menu.children}">
|
||||||
|
<a class="menu-content" th:if="${#lists.isEmpty(cmenu.children)}" th:href="@{${cmenu.url}}" th:classappend="${#strings.isEmpty(cmenu.target)} ? |menuItem| : ${cmenu.target}">
|
||||||
|
<i th:class="${cmenu.icon} + ' fa-fw'"></i> <span class="nav-label">[[${cmenu.menuName}]]</span>
|
||||||
|
</a>
|
||||||
|
<a class="menu-content" th:if="${not #lists.isEmpty(cmenu.children)}" href="#">
|
||||||
|
<i th:class="${cmenu.icon} + ' fa-fw'"></i>
|
||||||
|
<span class="nav-label">[[${cmenu.menuName}]]</span>
|
||||||
|
<span class="fa arrow"></span>
|
||||||
|
</a>
|
||||||
|
<ul th:if="${not #lists.isEmpty(cmenu.children)}" class="nav nav-second-level collapse">
|
||||||
|
<li th:each="emenu : ${cmenu.children}">
|
||||||
|
<a th:if="${#lists.isEmpty(emenu.children)}" th:href="@{${emenu.url}}" th:class="${#strings.isEmpty(emenu.target)} ? |menuItem| : ${emenu.target}">
|
||||||
|
<i th:class="${emenu.icon} + ' fa-fw'"></i>
|
||||||
|
[[${emenu.menuName}]]
|
||||||
|
</a>
|
||||||
|
<a th:if="${not #lists.isEmpty(emenu.children)}" href="#">
|
||||||
|
<i th:class="${emenu.icon} + ' fa-fw'"></i>
|
||||||
|
[[${emenu.menuName}]]
|
||||||
|
<span class="fa arrow"></span>
|
||||||
|
</a>
|
||||||
|
<ul th:if="${not #lists.isEmpty(emenu.children)}" class="nav nav-third-level collapse">
|
||||||
|
<li th:each="fmenu : ${emenu.children}"><a th:if="${#lists.isEmpty(fmenu.children)}" th:class="${#strings.isEmpty(fmenu.target)} ? |menuItem| : ${fmenu.target}" th:href="@{${fmenu.url}}">[[${fmenu.menuName}]]</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</th:block>
|
||||||
|
|
||||||
|
<!-- 首页菜单 -->
|
||||||
|
<div class="tab-pane fade height-full" id="index">
|
||||||
|
<ul class="nav">
|
||||||
|
<li>
|
||||||
|
<a class="menuItem" th:href="@{/system/main}">
|
||||||
|
<i class="fa fa-home"></i> <span class="nav-label">首页</span></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 实例演示菜单 -->
|
||||||
|
<div class="tab-pane fade height-full" id="demo" th:if="${demoEnabled}">
|
||||||
|
<ul class="nav">
|
||||||
|
<li>
|
||||||
|
<a href="#"><i class="fa fa-edit"></i> <span class="nav-label">表单</span><span class="fa arrow"></span></a>
|
||||||
|
<ul class="nav nav-second-level collapse">
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/button}">按钮</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/grid}">栅格</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/select}">下拉框</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/timeline}">时间轴</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/basic}">基本表单</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/cards}">卡片列表</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/jasny}">功能扩展</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/sortable}">拖动排序</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/tabs_panels}">选项卡 & 面板</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/validate}">表单校验</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/wizard}">表单向导</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/upload}">文件上传</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/datetime}">日期和时间</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/summernote}">富文本编辑器</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/duallistbox}">左右互选组件</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/autocomplete}">搜索自动补全</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/cxselect}">多级联动下拉</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/localrefresh}">Ajax局部刷新</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#"><i class="fa fa-table"></i> <span class="nav-label">表格</span><span class="fa arrow"></span></a>
|
||||||
|
<ul class="nav nav-second-level collapse">
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/search}">查询条件</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/footer}">数据汇总</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/groupHeader}">组合表头</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/export}">表格导出</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/remember}">翻页记住选择</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/pageGo}">跳转至指定页</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/params}">自定义查询参数</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/multi}">初始多表格</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/button}">点击按钮加载表格</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/data}">直接加载表格数据</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/fixedColumns}">表格冻结列</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/event}">自定义触发事件</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/headerStyle}">表格标题格式化</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/detail}">表格细节视图</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/child}">表格父子视图</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/image}">表格图片预览</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/curd}">动态增删改查</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/reorder}">表格拖拽操作</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/editable}">表格行内编辑</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/subdata}">主子表提交</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/refresh}">表格自动刷新</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/print}">表格打印配置</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/other}">表格其他操作</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#"><i class="fa fa-flask"></i> <span class="nav-label">弹框</span><span class="fa arrow"></span></a>
|
||||||
|
<ul class="nav nav-second-level collapse">
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/modal/dialog}">模态窗口</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/modal/layer}">弹层组件</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/modal/table}">弹层表格</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#"><i class="fa fa-wpforms"></i> <span class="nav-label">操作</span><span class="fa arrow"></span></a>
|
||||||
|
<ul class="nav nav-second-level collapse">
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/operate/table}">表格</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/operate/other}">其他</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#"><i class="fa fa-bar-chart-o"></i> <span class="nav-label">报表</span><span class="fa arrow"></span></a>
|
||||||
|
<ul class="nav nav-second-level collapse">
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/report/echarts}">百度ECharts</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/report/peity}">peity</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/report/sparkline}">sparkline</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/report/metrics}">图表组合</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#"><i class="fa fa-book"></i> <span class="nav-label">图标</span><span class="fa arrow"></span></a>
|
||||||
|
<ul class="nav nav-second-level collapse">
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/icon/fontawesome}">Font Awesome</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/icon/glyphicons}">Glyphicons</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#"><i class="fa fa-navicon"></i> <span class="nav-label">四层菜单</span><span class="fa arrow"></span></a>
|
||||||
|
<ul class="nav nav-second-level collapse">
|
||||||
|
<li>
|
||||||
|
<a href="#" id="damian">三级菜单1<span class="fa arrow"></span></a>
|
||||||
|
<ul class="nav nav-third-level collapse">
|
||||||
|
<li>
|
||||||
|
<a href="#">四级菜单1</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#">四级菜单2</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="#">三级菜单2</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<!--左侧导航结束-->
|
||||||
|
|
||||||
|
<!--右侧部分开始-->
|
||||||
|
<div id="page-wrapper" class="gray-bg dashbard-1">
|
||||||
|
<div class="row border-bottom">
|
||||||
|
<nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<a class="navbar-minimalize minimalize-styl-2" style="color:#FFF;" href="#" title="收起菜单">
|
||||||
|
<i class="fa fa-bars"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<!-- 顶部栏 -->
|
||||||
|
<div id="navMenu">
|
||||||
|
<ul class="nav navbar-toolbar nav-tabs navbar-left hidden-xs">
|
||||||
|
|
||||||
|
<!-- 顶部菜单列表 -->
|
||||||
|
<th:block th:each="menu : ${menus}">
|
||||||
|
<li role="presentation" th:id="|tab_${menu.menuId}|">
|
||||||
|
<a data-toggle="tab" th:class="@{${!#strings.isEmpty(menu.target) && menu.target == 'menuBlank'} ? 'menuBlank'}" th:href="@{${!#strings.isEmpty(menu.target) && menu.target == 'menuBlank'} ? ${menu.url} : |#menu_${menu.menuId}|}">
|
||||||
|
<i th:class="${menu.icon}"></i> <span>[[${menu.menuName}]]</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</th:block>
|
||||||
|
|
||||||
|
<li role="presentation" id="tab_index">
|
||||||
|
<a data-toggle="tab" href="#index">
|
||||||
|
<i class="fa fa-area-chart"></i> <span>统计报表</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li role="presentation" id="tab_demo" th:if="${demoEnabled}">
|
||||||
|
<a data-toggle="tab" href="#demo">
|
||||||
|
<i class="fa fa-desktop"></i> <span>实例演示</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<!-- 右侧栏 -->
|
||||||
|
<ul class="nav navbar-top-links navbar-right welcome-message">
|
||||||
|
<li><a title="视频教程" href="http://doc.ruoyi.vip/ruoyi/document/spjc.html" target="_blank"><i class="fa fa-video-camera"></i> 视频教程</a></li>
|
||||||
|
<li><a title="开发文档" href="http://doc.ruoyi.vip" target="_blank"><i class="fa fa-question-circle"></i> 开发文档</a></li>
|
||||||
|
<li><a title="全屏显示" href="javascript:void(0)" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏显示</a></li>
|
||||||
|
<li class="dropdown user-menu">
|
||||||
|
<a href="javascript:void(0)" class="dropdown-toggle" data-hover="dropdown">
|
||||||
|
<img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="user-image">
|
||||||
|
<span class="hidden-xs">[[${#strings.defaultString(user.userName, '-')}]]</span>
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li class="mt5">
|
||||||
|
<a th:href="@{/system/user/profile}" class="menuItem">
|
||||||
|
<i class="fa fa-user"></i> 个人中心</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a onclick="resetPwd()">
|
||||||
|
<i class="fa fa-key"></i> 修改密码</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a onclick="switchSkin()">
|
||||||
|
<i class="fa fa-dashboard"></i> 切换主题</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a onclick="toggleMenu()">
|
||||||
|
<i class="fa fa-toggle-off"></i> 左侧菜单</a>
|
||||||
|
</li>
|
||||||
|
<li class="divider"></li>
|
||||||
|
<li>
|
||||||
|
<a th:href="@{logout}">
|
||||||
|
<i class="fa fa-sign-out"></i> 退出登录</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
<div class="row content-tabs">
|
||||||
|
<button class="roll-nav roll-left tabLeft">
|
||||||
|
<i class="fa fa-backward"></i>
|
||||||
|
</button>
|
||||||
|
<nav class="page-tabs menuTabs">
|
||||||
|
<div class="page-tabs-content">
|
||||||
|
<a href="javascript:;" class="active menuTab" th:data-id="@{/system/main}">首页</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<button class="roll-nav roll-right tabRight">
|
||||||
|
<i class="fa fa-forward"></i>
|
||||||
|
</button>
|
||||||
|
<a href="javascript:void(0);" class="roll-nav roll-right tabReload"><i class="fa fa-refresh"></i> 刷新</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a id="ax_close_max" class="ax_close_max" href="#" title="关闭全屏"> <i class="fa fa-times-circle-o"></i> </a>
|
||||||
|
|
||||||
|
<div class="row mainContent" id="content-main" th:style="${!ignoreFooter} ? |height: calc(100% - 91px)|">
|
||||||
|
<iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" th:data-id="@{/system/main}"
|
||||||
|
th:src="@{/system/main}" frameborder="0" seamless></iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div th:if="${ignoreFooter}" class="footer">
|
||||||
|
<div class="pull-right">© [[${copyrightYear}]] RuoYi Copyright </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--右侧部分结束-->
|
||||||
|
</div>
|
||||||
|
<!-- 全局js -->
|
||||||
|
<script th:src="@{/js/jquery.min.js}"></script>
|
||||||
|
<script th:src="@{/js/bootstrap.min.js}"></script>
|
||||||
|
<script th:src="@{/js/plugins/metisMenu/jquery.metisMenu.js}"></script>
|
||||||
|
<script th:src="@{/js/plugins/slimscroll/jquery.slimscroll.min.js}"></script>
|
||||||
|
<script th:src="@{/js/jquery.contextMenu.min.js}"></script>
|
||||||
|
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
|
||||||
|
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
|
||||||
|
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.4.0}"></script>
|
||||||
|
<script th:src="@{/ruoyi/js/common.js?v=4.4.0}"></script>
|
||||||
|
<script th:src="@{/ruoyi/index.js?v=20200902}"></script>
|
||||||
|
<script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script>
|
||||||
|
<script th:src="@{/js/resize-tabs.js}"></script>
|
||||||
|
<script th:inline="javascript">
|
||||||
|
var ctx = [[@{/}]];
|
||||||
|
// 皮肤缓存
|
||||||
|
var skin = storage.get("skin");
|
||||||
|
// history(表示去掉地址的#)否则地址以"#"形式展示
|
||||||
|
var mode = "history";
|
||||||
|
// 历史访问路径缓存
|
||||||
|
var historyPath = storage.get("historyPath");
|
||||||
|
// 是否页签与菜单联动
|
||||||
|
var isLinkage = true;
|
||||||
|
|
||||||
|
// 本地主题优先,未设置取系统配置
|
||||||
|
if($.common.isNotEmpty(skin)){
|
||||||
|
$("body").addClass(skin.split('|')[0]);
|
||||||
|
$("body").addClass(skin.split('|')[1]);
|
||||||
|
} else {
|
||||||
|
$("body").addClass([[${sideTheme}]]);
|
||||||
|
$("body").addClass([[${skinName}]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 用户管理-重置密码 */
|
||||||
|
function resetPwd() {
|
||||||
|
var url = ctx + 'system/user/profile/resetPwd';
|
||||||
|
$.modal.open("重置密码", url, '770', '380');
|
||||||
|
}
|
||||||
|
/* 切换主题 */
|
||||||
|
function switchSkin() {
|
||||||
|
layer.open({
|
||||||
|
type : 2,
|
||||||
|
shadeClose : true,
|
||||||
|
title : "切换主题",
|
||||||
|
area : ["530px", "386px"],
|
||||||
|
content : [ctx + "system/switchSkin", 'no']
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 切换菜单 */
|
||||||
|
function toggleMenu() {
|
||||||
|
$.modal.confirm("确认要切换成左侧菜单吗?", function() {
|
||||||
|
$.get(ctx + 'system/menuStyle/default', function(result) {
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 刷新时访问路径页签 */
|
||||||
|
function applyPath(url) {
|
||||||
|
var $dataObj = $('a[href$="' + decodeURI(url) + '"]');
|
||||||
|
$dataObj.click();
|
||||||
|
if (!$dataObj.hasClass("noactive")) {
|
||||||
|
$dataObj.parent("li").addClass("selected").parents("li").addClass("active").end().parents("ul").addClass("in");
|
||||||
|
}
|
||||||
|
// 顶部菜单同步处理
|
||||||
|
var tabStr = $dataObj.parents(".tab-pane").attr("id");
|
||||||
|
if ($.common.isNotEmpty(tabStr)) {
|
||||||
|
var sepIndex = tabStr.lastIndexOf('_');
|
||||||
|
var menuId = tabStr.substring(sepIndex + 1, tabStr.length);
|
||||||
|
$("#tab_" + menuId + " a").click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
if($.common.equals("history", mode) && window.performance.navigation.type == 1) {
|
||||||
|
var url = storage.get('publicPath');
|
||||||
|
if ($.common.isNotEmpty(url)) {
|
||||||
|
applyPath(url);
|
||||||
|
} else {
|
||||||
|
$(".navbar-toolbar li a").eq(0).click();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var hash = location.hash;
|
||||||
|
if ($.common.isNotEmpty(hash)) {
|
||||||
|
var url = hash.substring(1, hash.length);
|
||||||
|
applyPath(url);
|
||||||
|
} else {
|
||||||
|
if($.common.equals("history", mode)) {
|
||||||
|
storage.set('publicPath', "");
|
||||||
|
}
|
||||||
|
$(".navbar-toolbar li a").eq(0).click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -5,17 +5,16 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
<title>若依系统首页</title>
|
<title>若依系统首页</title>
|
||||||
<!--[if lt IE 9]>
|
<!-- 避免IE使用兼容模式 -->
|
||||||
<meta http-equiv="refresh" content="0;ie.html"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<![endif]-->
|
<link th:href="@{favicon.ico}" rel="shortcut icon"/>
|
||||||
<link th:href="@{favicon.ico}" rel="stylesheet"/>
|
|
||||||
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
|
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
|
||||||
<link th:href="@{/css/jquery.contextMenu.min.css}" rel="stylesheet"/>
|
<link th:href="@{/css/jquery.contextMenu.min.css}" rel="stylesheet"/>
|
||||||
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
|
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
|
||||||
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
|
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
|
||||||
<link th:href="@{/css/style.css}" rel="stylesheet"/>
|
<link th:href="@{/css/style.css}" rel="stylesheet"/>
|
||||||
<link th:href="@{/css/skins.css}" rel="stylesheet"/>
|
<link th:href="@{/css/skins.css}" rel="stylesheet"/>
|
||||||
<link th:href="@{/ruoyi/css/ry-ui.css?v=4.1.0}" rel="stylesheet"/>
|
<link th:href="@{/ruoyi/css/ry-ui.css?v=4.4.0}" rel="stylesheet"/>
|
||||||
</head>
|
</head>
|
||||||
<body class="fixed-sidebar full-height-layout gray-bg" style="overflow: hidden">
|
<body class="fixed-sidebar full-height-layout gray-bg" style="overflow: hidden">
|
||||||
<div id="wrapper">
|
<div id="wrapper">
|
||||||
|
|
@ -25,19 +24,19 @@
|
||||||
<div class="nav-close">
|
<div class="nav-close">
|
||||||
<i class="fa fa-times-circle"></i>
|
<i class="fa fa-times-circle"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="sidebar-collapse">
|
|
||||||
<ul class="nav" id="side-menu">
|
|
||||||
<a th:href="@{/index}">
|
<a th:href="@{/index}">
|
||||||
<li class="logo">
|
<li class="logo hidden-xs">
|
||||||
<span class="logo-lg">RuoYi</span>
|
<span class="logo-lg">RuoYi</span>
|
||||||
</li>
|
</li>
|
||||||
</a>
|
</a>
|
||||||
|
<div class="sidebar-collapse">
|
||||||
|
<ul class="nav" id="side-menu">
|
||||||
<li>
|
<li>
|
||||||
<div class="user-panel">
|
<div class="user-panel">
|
||||||
<a class="menuItem" title="个人中心" th:href="@{/system/user/profile}">
|
<a class="menuItem noactive" title="个人中心" th:href="@{/system/user/profile}">
|
||||||
<div class="hide" th:text="个人中心"></div>
|
<div class="hide" th:text="个人中心"></div>
|
||||||
<div class="pull-left image">
|
<div class="pull-left image">
|
||||||
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{${user.avatar}}" class="img-circle" alt="User Image">
|
<img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="img-circle" alt="User Image">
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<div class="pull-left info">
|
<div class="pull-left info">
|
||||||
|
|
@ -48,29 +47,24 @@
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#"><i class="fa fa-home"></i> <span class="nav-label">主页</span> <span class="fa arrow"></span></a>
|
<a class="menuItem" th:href="@{/system/main}"><i class="fa fa-home"></i> <span class="nav-label">首页</span> </a>
|
||||||
<ul class="nav nav-second-level">
|
|
||||||
<li><a class="menuItem" th:href="@{/system/main}">了解若依</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
</li>
|
||||||
<li th:each="menu : ${menus}">
|
<li th:each="menu : ${menus}">
|
||||||
<a th:class="@{${menu.url != '' && menu.url != '#'} ? ${menu.target}}" th:href="@{${menu.url == ''} ? |#| : ${menu.url}}">
|
<a th:class="@{${!#strings.isEmpty(menu.url) && menu.url != '#'} ? ${menu.target}}" th:href="@{${#strings.isEmpty(menu.url)} ? |#| : ${menu.url}}">
|
||||||
<i class="fa fa-bar-chart-o" th:class="${menu.icon}"></i>
|
<i class="fa fa-bar-chart-o" th:class="${menu.icon}"></i>
|
||||||
<span class="nav-label" th:text="${menu.menuName}">一级菜单</span>
|
<span class="nav-label" th:text="${menu.menuName}">一级菜单</span>
|
||||||
<span th:class="${menu.url == '' || menu.url == '#'} ? |fa arrow|"></span>
|
<span th:class="${#strings.isEmpty(menu.url) || menu.url == '#'} ? |fa arrow|"></span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="nav nav-second-level collapse">
|
<ul class="nav nav-second-level collapse">
|
||||||
<li th:each="cmenu : ${menu.children}">
|
<li th:each="cmenu : ${menu.children}">
|
||||||
<a th:if="${#lists.isEmpty(cmenu.children)}" th:class="${cmenu.target == ''} ? |menuItem| : ${cmenu.target}" th:utext="${cmenu.menuName}" th:href="@{${cmenu.url}}" th:id="${cmenu.menuId}">二级菜单</a>
|
<a th:if="${#lists.isEmpty(cmenu.children)}" th:class="${#strings.isEmpty(cmenu.target)} ? |menuItem| : ${cmenu.target}" th:utext="${cmenu.menuName}" th:href="@{${cmenu.url}}">二级菜单</a>
|
||||||
<a th:if="${not #lists.isEmpty(cmenu.children)}" href="#">[[${cmenu.menuName}]]<span class="fa arrow"></span></a>
|
<a th:if="${not #lists.isEmpty(cmenu.children)}" href="#">[[${cmenu.menuName}]]<span class="fa arrow"></span></a>
|
||||||
<ul th:if="${not #lists.isEmpty(cmenu.children)}" class="nav nav-third-level">
|
<ul th:if="${not #lists.isEmpty(cmenu.children)}" class="nav nav-third-level">
|
||||||
<li th:each="emenu : ${cmenu.children}">
|
<li th:each="emenu : ${cmenu.children}">
|
||||||
<a th:if="${#lists.isEmpty(emenu.children)}" th:class="${emenu.target == ''} ? |menuItem| : ${emenu.target}" th:text="${emenu.menuName}" th:href="@{${emenu.url}}" th:id="${cmenu.menuId}">三级菜单</a>
|
<a th:if="${#lists.isEmpty(emenu.children)}" th:class="${#strings.isEmpty(emenu.target)} ? |menuItem| : ${emenu.target}" th:text="${emenu.menuName}" th:href="@{${emenu.url}}">三级菜单</a>
|
||||||
<a th:if="${not #lists.isEmpty(emenu.children)}" href="#">[[${emenu.menuName}]]<span class="fa arrow"></span></a>
|
<a th:if="${not #lists.isEmpty(emenu.children)}" href="#">[[${emenu.menuName}]]<span class="fa arrow"></span></a>
|
||||||
<ul th:if="${not #lists.isEmpty(emenu.children)}" class="nav nav-four-level">
|
<ul th:if="${not #lists.isEmpty(emenu.children)}" class="nav nav-four-level">
|
||||||
<li th:each="fmenu : ${emenu.children}">
|
<li th:each="fmenu : ${emenu.children}"><a th:if="${#lists.isEmpty(fmenu.children)}" th:class="${#strings.isEmpty(fmenu.target)} ? |menuItem| : ${fmenu.target}" th:text="${fmenu.menuName}" th:href="@{${fmenu.url}}">四级菜单</a></li>
|
||||||
<a th:if="${#lists.isEmpty(fmenu.children)}" th:class="${fmenu.target == ''} ? |menuItem| : ${fmenu.target}" th:text="${fmenu.menuName}" th:href="@{${fmenu.url}}" th:id="${cmenu.menuId}">四级菜单</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
@ -98,6 +92,8 @@
|
||||||
<li><a class="menuItem" th:href="@{/demo/form/summernote}">富文本编辑器</a></li>
|
<li><a class="menuItem" th:href="@{/demo/form/summernote}">富文本编辑器</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/form/duallistbox}">左右互选组件</a></li>
|
<li><a class="menuItem" th:href="@{/demo/form/duallistbox}">左右互选组件</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/form/autocomplete}">搜索自动补全</a></li>
|
<li><a class="menuItem" th:href="@{/demo/form/autocomplete}">搜索自动补全</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/cxselect}">多级联动下拉</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/form/localrefresh}">Ajax局部刷新</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li> <a>表格<span class="fa arrow"></span></a>
|
<li> <a>表格<span class="fa arrow"></span></a>
|
||||||
|
|
@ -111,14 +107,19 @@
|
||||||
<li><a class="menuItem" th:href="@{/demo/table/params}">自定义查询参数</a></li>
|
<li><a class="menuItem" th:href="@{/demo/table/params}">自定义查询参数</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/table/multi}">初始多表格</a></li>
|
<li><a class="menuItem" th:href="@{/demo/table/multi}">初始多表格</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/table/button}">点击按钮加载表格</a></li>
|
<li><a class="menuItem" th:href="@{/demo/table/button}">点击按钮加载表格</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/data}">直接加载表格数据</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/table/fixedColumns}">表格冻结列</a></li>
|
<li><a class="menuItem" th:href="@{/demo/table/fixedColumns}">表格冻结列</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/table/event}">自定义触发事件</a></li>
|
<li><a class="menuItem" th:href="@{/demo/table/event}">自定义触发事件</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/headerStyle}">表格标题格式化</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/table/detail}">表格细节视图</a></li>
|
<li><a class="menuItem" th:href="@{/demo/table/detail}">表格细节视图</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/table/child}">表格父子视图</a></li>
|
<li><a class="menuItem" th:href="@{/demo/table/child}">表格父子视图</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/table/image}">表格图片预览</a></li>
|
<li><a class="menuItem" th:href="@{/demo/table/image}">表格图片预览</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/table/curd}">动态增删改查</a></li>
|
<li><a class="menuItem" th:href="@{/demo/table/curd}">动态增删改查</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/table/reorder}">表格拖拽操作</a></li>
|
<li><a class="menuItem" th:href="@{/demo/table/reorder}">表格拖拽操作</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/table/editable}">表格行内编辑</a></li>
|
<li><a class="menuItem" th:href="@{/demo/table/editable}">表格行内编辑</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/subdata}">主子表提交</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/refresh}">表格自动刷新</a></li>
|
||||||
|
<li><a class="menuItem" th:href="@{/demo/table/print}">表格打印配置</a></li>
|
||||||
<li><a class="menuItem" th:href="@{/demo/table/other}">表格其他操作</a></li>
|
<li><a class="menuItem" th:href="@{/demo/table/other}">表格其他操作</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
@ -150,8 +151,8 @@
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#"><i class="fa fa-sitemap"></i> <span class="nav-label">四层菜单 </span><span class="fa arrow"></span></a>
|
<a href="#"><i class="fa fa-sitemap"></i>四层菜单<span class="fa arrow"></span></a>
|
||||||
<ul class="nav nav-second-level collapse">
|
<ul class="nav nav-third-level collapse">
|
||||||
<li>
|
<li>
|
||||||
<a href="#" id="damian">三级菜单1<span class="fa arrow"></span></a>
|
<a href="#" id="damian">三级菜单1<span class="fa arrow"></span></a>
|
||||||
<ul class="nav nav-third-level">
|
<ul class="nav nav-third-level">
|
||||||
|
|
@ -183,14 +184,13 @@
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<ul class="nav navbar-top-links navbar-right welcome-message">
|
<ul class="nav navbar-top-links navbar-right welcome-message">
|
||||||
<li><a title="阿里云双12" href="https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link" target="_blank"><i class="fa fa-cloud"></i> 阿里云双12</a></li>
|
|
||||||
<li><a title="视频教程" href="http://doc.ruoyi.vip/ruoyi/document/spjc.html" target="_blank"><i class="fa fa-video-camera"></i> 视频教程</a></li>
|
<li><a title="视频教程" href="http://doc.ruoyi.vip/ruoyi/document/spjc.html" target="_blank"><i class="fa fa-video-camera"></i> 视频教程</a></li>
|
||||||
<li><a title="开发文档" href="http://doc.ruoyi.vip" target="_blank"><i class="fa fa-question-circle"></i> 开发文档</a></li>
|
<li><a title="开发文档" href="http://doc.ruoyi.vip" target="_blank"><i class="fa fa-question-circle"></i> 开发文档</a></li>
|
||||||
<li><a title="全屏显示" href="javascript:void(0)" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏显示</a></li>
|
<li><a title="全屏显示" href="javascript:void(0)" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏显示</a></li>
|
||||||
<li class="dropdown user-menu">
|
<li class="dropdown user-menu">
|
||||||
<a href="javascript:void(0)" class="dropdown-toggle" data-hover="dropdown">
|
<a href="javascript:void(0)" class="dropdown-toggle" data-hover="dropdown">
|
||||||
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{${user.avatar}}" class="user-image">
|
<img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="user-image">
|
||||||
<span class="hidden-xs">[[${user.userName}]]</span>
|
<span class="hidden-xs">[[${#strings.defaultString(user.userName, '-')}]]</span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li class="mt5">
|
<li class="mt5">
|
||||||
|
|
@ -205,6 +205,10 @@
|
||||||
<a onclick="switchSkin()">
|
<a onclick="switchSkin()">
|
||||||
<i class="fa fa-dashboard"></i> 切换主题</a>
|
<i class="fa fa-dashboard"></i> 切换主题</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a onclick="toggleMenu()">
|
||||||
|
<i class="fa fa-toggle-off"></i> 横向菜单</a>
|
||||||
|
</li>
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li>
|
<li>
|
||||||
<a th:href="@{logout}">
|
<a th:href="@{logout}">
|
||||||
|
|
@ -221,7 +225,7 @@
|
||||||
</button>
|
</button>
|
||||||
<nav class="page-tabs menuTabs">
|
<nav class="page-tabs menuTabs">
|
||||||
<div class="page-tabs-content">
|
<div class="page-tabs-content">
|
||||||
<a href="javascript:;" class="active menuTab" data-id="/system/main">首页</a>
|
<a href="javascript:;" class="active menuTab" th:data-id="@{/system/main}">首页</a>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
<button class="roll-nav roll-right tabRight">
|
<button class="roll-nav roll-right tabRight">
|
||||||
|
|
@ -232,11 +236,12 @@
|
||||||
|
|
||||||
<a id="ax_close_max" class="ax_close_max" href="#" title="关闭全屏"> <i class="fa fa-times-circle-o"></i> </a>
|
<a id="ax_close_max" class="ax_close_max" href="#" title="关闭全屏"> <i class="fa fa-times-circle-o"></i> </a>
|
||||||
|
|
||||||
<div class="row mainContent" id="content-main">
|
<div class="row mainContent" id="content-main" th:style="${!ignoreFooter} ? |height: calc(100% - 91px)|">
|
||||||
<iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" data-id="/system/main"
|
<iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" th:data-id="@{/system/main}"
|
||||||
th:src="@{/system/main}" frameborder="0" seamless></iframe>
|
th:src="@{/system/main}" frameborder="0" seamless></iframe>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer">
|
|
||||||
|
<div th:if="${ignoreFooter}" class="footer">
|
||||||
<div class="pull-right">© [[${copyrightYear}]] RuoYi Copyright </div>
|
<div class="pull-right">© [[${copyrightYear}]] RuoYi Copyright </div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -250,8 +255,8 @@
|
||||||
<script th:src="@{/js/jquery.contextMenu.min.js}"></script>
|
<script th:src="@{/js/jquery.contextMenu.min.js}"></script>
|
||||||
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
|
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
|
||||||
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
|
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
|
||||||
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.1.0}"></script>
|
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.4.0}"></script>
|
||||||
<script th:src="@{/ruoyi/js/common.js?v=4.1.0}"></script>
|
<script th:src="@{/ruoyi/js/common.js?v=4.4.0}"></script>
|
||||||
<script th:src="@{/ruoyi/index.js}"></script>
|
<script th:src="@{/ruoyi/index.js}"></script>
|
||||||
<script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script>
|
<script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script>
|
||||||
<script th:inline="javascript">
|
<script th:inline="javascript">
|
||||||
|
|
@ -262,18 +267,16 @@ var skin = storage.get("skin");
|
||||||
var mode = "history";
|
var mode = "history";
|
||||||
// 历史访问路径缓存
|
// 历史访问路径缓存
|
||||||
var historyPath = storage.get("historyPath");
|
var historyPath = storage.get("historyPath");
|
||||||
// 排除非左侧菜单链接
|
// 是否页签与菜单联动
|
||||||
var excludesUrl = ["/system/user/profile"];
|
var isLinkage = true;
|
||||||
|
|
||||||
// 本地主题优先,未设置取系统配置
|
// 本地主题优先,未设置取系统配置
|
||||||
if($.common.isNotEmpty(skin)){
|
if($.common.isNotEmpty(skin)){
|
||||||
$("body").addClass(skin.split('|')[0]);
|
$("body").addClass(skin.split('|')[0]);
|
||||||
$("body").addClass(skin.split('|')[1]);
|
$("body").addClass(skin.split('|')[1]);
|
||||||
} else {
|
} else {
|
||||||
var sideTheme = [[${@config.getKey('sys.index.sideTheme')}]];
|
$("body").addClass([[${sideTheme}]]);
|
||||||
var skinName = [[${@config.getKey('sys.index.skinName')}]];
|
$("body").addClass([[${skinName}]]);
|
||||||
$("body").addClass(sideTheme);
|
|
||||||
$("body").addClass(skinName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 用户管理-重置密码 */
|
/* 用户管理-重置密码 */
|
||||||
|
|
@ -281,6 +284,7 @@ function resetPwd() {
|
||||||
var url = ctx + 'system/user/profile/resetPwd';
|
var url = ctx + 'system/user/profile/resetPwd';
|
||||||
$.modal.open("重置密码", url, '770', '380');
|
$.modal.open("重置密码", url, '770', '380');
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 切换主题 */
|
/* 切换主题 */
|
||||||
function switchSkin() {
|
function switchSkin() {
|
||||||
layer.open({
|
layer.open({
|
||||||
|
|
@ -292,10 +296,19 @@ function switchSkin() {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 切换菜单 */
|
||||||
|
function toggleMenu() {
|
||||||
|
$.modal.confirm("确认要切换成横向菜单吗?", function() {
|
||||||
|
$.get(ctx + 'system/menuStyle/topnav', function(result) {
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/** 刷新时访问路径页签 */
|
/** 刷新时访问路径页签 */
|
||||||
function applyPath(url) {
|
function applyPath(url) {
|
||||||
$('a[href$="' + decodeURI(url) + '"]').click();
|
$('a[href$="' + decodeURI(url) + '"]').click();
|
||||||
if($.inArray(url, excludesUrl)){
|
if (!$('a[href$="' + url + '"]').hasClass("noactive")) {
|
||||||
$('a[href$="' + url + '"]').parent("li").addClass("selected").parents("li").addClass("active").end().parents("ul").addClass("in");
|
$('a[href$="' + url + '"]').parent("li").addClass("selected").parents("li").addClass("active").end().parents("ul").addClass("in");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -311,6 +324,10 @@ $(function() {
|
||||||
if ($.common.isNotEmpty(hash)) {
|
if ($.common.isNotEmpty(hash)) {
|
||||||
var url = hash.substring(1, hash.length);
|
var url = hash.substring(1, hash.length);
|
||||||
applyPath(url);
|
applyPath(url);
|
||||||
|
} else {
|
||||||
|
if($.common.equals("history", mode)) {
|
||||||
|
storage.set('publicPath', "");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -3,26 +3,24 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
|
||||||
|
|
||||||
<title>登录若依系统</title>
|
<title>登录若依系统</title>
|
||||||
<meta name="description" content="若依后台管理框架">
|
<meta name="description" content="若依后台管理框架">
|
||||||
<link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
|
<link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
|
||||||
<link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
|
<link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
|
||||||
<link href="../static/css/style.css" th:href="@{/css/style.css}" rel="stylesheet"/>
|
<link href="../static/css/style.css" th:href="@{/css/style.css}" rel="stylesheet"/>
|
||||||
<link href="../static/css/login.min.css" th:href="@{/css/login.min.css}" rel="stylesheet"/>
|
<link href="../static/css/login.min.css" th:href="@{/css/login.min.css}" rel="stylesheet"/>
|
||||||
<link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=4.1.0}" rel="stylesheet"/>
|
<link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=4.4.0}" rel="stylesheet"/>
|
||||||
<!--[if lt IE 9]>
|
<!-- 360浏览器急速模式 -->
|
||||||
<meta http-equiv="refresh" content="0;ie.html" />
|
<meta name="renderer" content="webkit">
|
||||||
<![endif]-->
|
<!-- 避免IE使用兼容模式 -->
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<link rel="shortcut icon" href="../static/favicon.ico" th:href="@{favicon.ico}"/>
|
<link rel="shortcut icon" href="../static/favicon.ico" th:href="@{favicon.ico}"/>
|
||||||
<style type="text/css">label.error { position:inherit; }</style>
|
<style type="text/css">label.error { position:inherit; }</style>
|
||||||
<script>
|
<script>
|
||||||
if(window.top!==window.self){window.top.location=window.location};
|
if(window.top!==window.self){alert('未登录或登录超时。请重新登录');window.top.location=window.location};
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="signin">
|
<body class="signin">
|
||||||
|
|
||||||
<div class="signinpanel">
|
<div class="signinpanel">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
|
|
@ -39,18 +37,18 @@
|
||||||
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Thymeleaf</li>
|
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Thymeleaf</li>
|
||||||
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Bootstrap</li>
|
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Bootstrap</li>
|
||||||
</ul>
|
</ul>
|
||||||
<strong>还没有账号? <a href="#">立即注册»</a></strong>
|
<strong th:if="${@config.getKey('sys.account.registerUser')}">还没有账号? <a th:href="@{/register}">立即注册»</a></strong>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-5">
|
<div class="col-sm-5">
|
||||||
<form id="signupForm">
|
<form id="signupForm" autocomplete="off">
|
||||||
<h4 class="no-margins">登录:</h4>
|
<h4 class="no-margins">登录:</h4>
|
||||||
<p class="m-t-md">你若不离不弃,我必生死相依</p>
|
<p class="m-t-md">你若不离不弃,我必生死相依</p>
|
||||||
<input type="text" name="username" class="form-control uname" placeholder="用户名" value="admin" />
|
<input type="text" name="username" class="form-control uname" placeholder="用户名" value="admin" />
|
||||||
<input type="password" name="password" class="form-control pword" placeholder="密码" value="admin123" />
|
<input type="password" name="password" class="form-control pword" placeholder="密码" value="admin123" />
|
||||||
<div class="row m-t" th:if="${captchaEnabled==true}">
|
<div class="row m-t" th:if="${captchaEnabled==true}">
|
||||||
<div class="col-xs-6">
|
<div class="col-xs-6">
|
||||||
<input type="text" name="validateCode" class="form-control code" placeholder="验证码" maxlength="5" autocomplete="off">
|
<input type="text" name="validateCode" class="form-control code" placeholder="验证码" maxlength="5" />
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-6">
|
<div class="col-xs-6">
|
||||||
<a href="javascript:void(0);" title="点击更换验证码">
|
<a href="javascript:void(0);" title="点击更换验证码">
|
||||||
|
|
@ -80,7 +78,7 @@
|
||||||
<script src="../static/ajax/libs/validate/messages_zh.min.js" th:src="@{/ajax/libs/validate/messages_zh.min.js}"></script>
|
<script src="../static/ajax/libs/validate/messages_zh.min.js" th:src="@{/ajax/libs/validate/messages_zh.min.js}"></script>
|
||||||
<script src="../static/ajax/libs/layer/layer.min.js" th:src="@{/ajax/libs/layer/layer.min.js}"></script>
|
<script src="../static/ajax/libs/layer/layer.min.js" th:src="@{/ajax/libs/layer/layer.min.js}"></script>
|
||||||
<script src="../static/ajax/libs/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
|
<script src="../static/ajax/libs/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
|
||||||
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=4.1.0}"></script>
|
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=4.4.0}"></script>
|
||||||
<script src="../static/ruoyi/login.js" th:src="@{/ruoyi/login.js}"></script>
|
<script src="../static/ruoyi/login.js" th:src="@{/ruoyi/login.js}"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,8 @@
|
||||||
<div class="row border-bottom white-bg dashboard-header">
|
<div class="row border-bottom white-bg dashboard-header">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
<blockquote class="text-warning" style="font-size:14px">
|
<blockquote class="text-warning" style="font-size:14px">
|
||||||
阿里云服务器89元/年,双12年末特惠,爆款产品限时1折
|
|
||||||
<br><a target="_blank" href="https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link">https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link</a><br>
|
|
||||||
领取阿里云通用云产品1888优惠券
|
领取阿里云通用云产品1888优惠券
|
||||||
<br><a target="_blank" href="https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof">https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof</a><br>
|
<br><a target="_blank" href="https://www.aliyun.com/minisite/goods?userCode=brki8iof">https://www.aliyun.com/minisite/goods?userCode=brki8iof</a><br>
|
||||||
领取腾讯云通用云产品2860优惠券
|
领取腾讯云通用云产品2860优惠券
|
||||||
<br><a target="_blank" href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console">https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</a><br>
|
<br><a target="_blank" href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console">https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</a><br>
|
||||||
<h4 class="text-danger">云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)</h4>
|
<h4 class="text-danger">云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)</h4>
|
||||||
|
|
@ -81,7 +79,7 @@
|
||||||
<div class="ibox-content">
|
<div class="ibox-content">
|
||||||
<p><i class="fa fa-send-o"></i> 官网:<a href="http://www.ruoyi.vip" target="_blank">http://www.ruoyi.vip</a>
|
<p><i class="fa fa-send-o"></i> 官网:<a href="http://www.ruoyi.vip" target="_blank">http://www.ruoyi.vip</a>
|
||||||
</p>
|
</p>
|
||||||
<p><i class="fa fa-qq"></i> QQ群:<s>满1389287</s> <s>满1679294</s> <s>满1529866</s> <s>满1772718</s> <s>满1366522</s> <s>满1382251</s> <s>满1145125</s> <s>满86752435</s> <a href="https://jq.qq.com/?_wv=1027&k=5ZIjaeP" target="_blank">134072510</a>
|
<p><i class="fa fa-qq"></i> QQ群:<s>满1389287</s> <s>满1679294</s> <s>满1529866</s> <s>满1772718</s> <s>满1366522</s> <s>满1382251</s> <s>满1145125</s> <s>满86752435</s> <s>满134072510</s> <s>满210336300</s> <s>满339522636</s> <a href="https://jq.qq.com/?_wv=1027&k=qPIKBb7s" target="_blank">130035985</a>
|
||||||
</p>
|
</p>
|
||||||
<p><i class="fa fa-weixin"></i> 微信:<a href="javascript:;">/ *若依</a>
|
<p><i class="fa fa-weixin"></i> 微信:<a href="javascript:;">/ *若依</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
@ -98,13 +96,223 @@
|
||||||
<div class="ibox-content no-padding">
|
<div class="ibox-content no-padding">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<div class="panel-group" id="version">
|
<div class="panel-group" id="version">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h5 class="panel-title">
|
||||||
|
<a data-toggle="collapse" data-parent="#version" href="#v44">v4.4.0</a><code class="pull-right">2020.08.24</code>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div id="v44" class="panel-collapse collapse in">
|
||||||
|
<div class="panel-body">
|
||||||
|
<ol>
|
||||||
|
<li>升级bootstrapTable到最新版本1.17.1</li>
|
||||||
|
<li>升级shiro到最新版1.6.0 阻止权限绕过漏洞</li>
|
||||||
|
<li>升级fastjson到最新版1.2.73</li>
|
||||||
|
<li>代码生成支持同步数据库</li>
|
||||||
|
<li>代码生成支持富文本控件</li>
|
||||||
|
<li>用户密码支持自定义配置规则</li>
|
||||||
|
<li>新增表格自动刷新插件</li>
|
||||||
|
<li>新增表格打印配置插件</li>
|
||||||
|
<li>更换图片裁剪工具为cropper</li>
|
||||||
|
<li>Excel支持sort导出排序</li>
|
||||||
|
<li>代码生成支持自定义路径</li>
|
||||||
|
<li>代码生成支持选择上级菜单</li>
|
||||||
|
<li>代码生成支持上传控件</li>
|
||||||
|
<li>新增表格参数(自定义加载文本的字体大小loadingFontSize)</li>
|
||||||
|
<li>Excel注解支持设置BigDecimal精度&舍入规则</li>
|
||||||
|
<li>操作日志记录排除敏感属性字段</li>
|
||||||
|
<li>修复不同浏览器附件下载中文名乱码的问题</li>
|
||||||
|
<li>用户分配角色不允许选择超级管理员角色</li>
|
||||||
|
<li>更换表格冻结列插件</li>
|
||||||
|
<li>添加右侧冻结列示例</li>
|
||||||
|
<li>升级表格行编辑&移动端适应插件</li>
|
||||||
|
<li>修复更新表格插件后无法设置实例配置问题</li>
|
||||||
|
<li>修复更新表格插件后导致的主子表错误</li>
|
||||||
|
<li>修复页面存在多表格,回调函数res数据不正确问题</li>
|
||||||
|
<li>强退&过期清理登录帐号缓存会话</li>
|
||||||
|
<li>表格树标题内容支持html语义化标签</li>
|
||||||
|
<li>修复配置应用的访问路径首页页签重复问题</li>
|
||||||
|
<li>优化openTab打开时滚动到当前页签</li>
|
||||||
|
<li>表格请求方式method支持自定义配置</li>
|
||||||
|
<li>菜单页签联动优化</li>
|
||||||
|
<li>用户邮箱长度限制修改为50</li>
|
||||||
|
<li>主子表示例添加日期格式案例</li>
|
||||||
|
<li>修改表格行内编辑示例旧值参数</li>
|
||||||
|
<li>操作日志查询方式调整</li>
|
||||||
|
<li>唯一限制条件只返回单条数据</li>
|
||||||
|
<li>修改Excel设置STRING单元格类型</li>
|
||||||
|
<li>添加获取当前的环境配置方法</li>
|
||||||
|
<li>截取返回参数长度,防止超出异常</li>
|
||||||
|
<li>定时任务cron表达式验证</li>
|
||||||
|
<li>拆分表格插件,按需引入</li>
|
||||||
|
<li>多行文本框补齐必填错误提示背景</li>
|
||||||
|
<li>其他细节优化</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h5 class="panel-title">
|
||||||
|
<a data-toggle="collapse" data-parent="#version" href="#v431">v4.3.1</a><code class="pull-right">2020.07.05</code>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div id="v431" class="panel-collapse collapse">
|
||||||
|
<div class="panel-body">
|
||||||
|
<ol>
|
||||||
|
<li>国家信息安全漏洞(请务必保持cipherKey密钥唯一性)</li>
|
||||||
|
<li>升级shiro到最新版1.5.3 阻止权限绕过漏洞</li>
|
||||||
|
<li>修改验证码在使用后清除,防止多次使用</li>
|
||||||
|
<li>检查字符支持小数点&降级改成异常提醒</li>
|
||||||
|
<li>openOptions函数中加入自定义maxmin属性</li>
|
||||||
|
<li>支持openOptions方法最大化</li>
|
||||||
|
<li>支持openOptions方法多个按钮回调</li>
|
||||||
|
<li>新增isLinkage支持页签与菜单联动</li>
|
||||||
|
<li>修改代码生成导入表结构出现异常页面不提醒问题</li>
|
||||||
|
<li>优化用户头像发生错误,则显示一个默认头像</li>
|
||||||
|
<li>Excel导出支持字典类型</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h5 class="panel-title">
|
||||||
|
<a data-toggle="collapse" data-parent="#version" href="#v43">v4.3.0</a><code class="pull-right">2020.06.22</code>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div id="v43" class="panel-collapse collapse">
|
||||||
|
<div class="panel-body">
|
||||||
|
<ol>
|
||||||
|
<li>代码生成模板支持主子表</li>
|
||||||
|
<li>代码生成显示类型支持复选框</li>
|
||||||
|
<li>前端表单样式修改成圆角</li>
|
||||||
|
<li>新增回显数据字典(字符串数组)</li>
|
||||||
|
<li>修复浏览器手动缩放比例后菜单无法自适应问题</li>
|
||||||
|
<li>限制用户不允许选择系统管理员角色</li>
|
||||||
|
<li>用户信息添加输入框组图标&鼠标按下显示密码</li>
|
||||||
|
<li>升级fastjson到最新版1.2.70 修复高危安全漏洞</li>
|
||||||
|
<li>升级Bootstrap版本到v3.3.7</li>
|
||||||
|
<li>修复selectColumns方法获取子对象数据无效问题</li>
|
||||||
|
<li>修改数据源类型优先级,先根据方法,再根据类</li>
|
||||||
|
<li>修改上级部门(选择项排除本身和下级)</li>
|
||||||
|
<li>首页菜单显示调整</li>
|
||||||
|
<li>添加是否开启swagger配置</li>
|
||||||
|
<li>新增示例(主子表提交)</li>
|
||||||
|
<li>新增示例(多级联动下拉示例)</li>
|
||||||
|
<li>新增示例(表格属性data数据加载)</li>
|
||||||
|
<li>新增表格列参数(是否列选项可见ignore)</li>
|
||||||
|
<li>新增表格参数(是否启用显示卡片视图cardView)</li>
|
||||||
|
<li>新增表格参数(是否显示全屏按钮showFullscreen)</li>
|
||||||
|
<li>新增表格参数(是否启用分页条无限循环的功能paginationLoop)</li>
|
||||||
|
<li>新增表格参数(是否显示表头showHeader)</li>
|
||||||
|
<li>表格添加显示/隐藏所有列方法 showAllColumns/hideAllColumns</li>
|
||||||
|
<li>修复部分情况节点不展开问题</li>
|
||||||
|
<li>修复关闭标签页后刷新还是上次地址问题</li>
|
||||||
|
<li>修复选择菜单后刷新页面,菜单箭头显示不对问题</li>
|
||||||
|
<li>修复jquery表单序列化时复选框未选中不会序列化到对象中问题</li>
|
||||||
|
<li>Excel支持readConverterExp读取字符串组内容</li>
|
||||||
|
<li>更换IP地址查询接口</li>
|
||||||
|
<li>默认关闭获取ip地址</li>
|
||||||
|
<li>操作处理ajaxSuccess判断修正</li>
|
||||||
|
<li>HttpUtils.sendPost()方法,参数无需拼接参数到url</li>
|
||||||
|
<li>通用http发送方法增加参数 contentType 编码类型</li>
|
||||||
|
<li>HTML过滤器不替换&实体</li>
|
||||||
|
<li>代码生成浮点型改用BigDecimal</li>
|
||||||
|
<li>修复表单构建单选和多选框渲染问题</li>
|
||||||
|
<li>代码生成模板调整,字段为String并且必填则加空串条件</li>
|
||||||
|
<li>字典数据查询列表根据dictSort升序排序</li>
|
||||||
|
<li>修复树表对imageView和tooltip方法无效问题</li>
|
||||||
|
<li>修复Long类型比较相等问题调整</li>
|
||||||
|
<li>示例demo页面清除html链接,防止点击后跳转出现404</li>
|
||||||
|
<li>在线用户强退方法合并</li>
|
||||||
|
<li>添加校验部门包含未停用的子部门</li>
|
||||||
|
<li>取消回车自动提交表单</li>
|
||||||
|
<li>'A','I','BUTTON' 标签忽略clickToSelect事件,防止点击操作按钮时选中</li>
|
||||||
|
<li>邮箱显示截取部分字符串,防止低分辨率错位</li>
|
||||||
|
<li>代码生成列属性根据sort排序</li>
|
||||||
|
<li>修复更多操作部分浏览器不兼容情况</li>
|
||||||
|
<li>图片预览事件属性修正</li>
|
||||||
|
<li>修复冻结列排序样式无效问题</li>
|
||||||
|
<li>修复context-path的情况下个人中心刷新导致样式问题</li>
|
||||||
|
<li>全屏editFull打开适配表树</li>
|
||||||
|
<li>其他细节优化</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h5 class="panel-title">
|
||||||
|
<a data-toggle="collapse" data-parent="#version" href="#v42">v4.2.0</a><code class="pull-right">2020.03.23</code>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div id="v42" class="panel-collapse collapse">
|
||||||
|
<div class="panel-body">
|
||||||
|
<ol>
|
||||||
|
<li>用户管理添加分配角色页面</li>
|
||||||
|
<li>定时任务添加调度日志按钮</li>
|
||||||
|
<li>新增是否开启用户注册功能</li>
|
||||||
|
<li>新增页面滚动显示返回顶部按钮</li>
|
||||||
|
<li>用户&角色&任务添加更多操作按钮</li>
|
||||||
|
<li>iframe框架页会话过期弹出超时提示</li>
|
||||||
|
<li>移动端登录不显示左侧菜单</li>
|
||||||
|
<li>侧边栏添加一套深蓝色主题</li>
|
||||||
|
<li>首页logo固定,不随菜单滚动</li>
|
||||||
|
<li>支持mode配置history(表示去掉地址栏的#)</li>
|
||||||
|
<li>任务分组字典翻译(调度日志详细)</li>
|
||||||
|
<li>字典管理添加缓存读取</li>
|
||||||
|
<li>字典数据列表标签显示样式</li>
|
||||||
|
<li>参数管理支持缓存操作</li>
|
||||||
|
<li>日期控件清空结束时间设置开始默认值为2099-12-31</li>
|
||||||
|
<li>表格树添加获取数据后响应回调处理</li>
|
||||||
|
<li>批量替换表前缀调整</li>
|
||||||
|
<li>支持表格导入模板的弹窗表单加入其它输入控件</li>
|
||||||
|
<li>表单重置刷新表格树</li>
|
||||||
|
<li>新增支持导出数据字段排序</li>
|
||||||
|
<li>新增表格参数(是否单选checkbox)</li>
|
||||||
|
<li>druid未授权不允许访问</li>
|
||||||
|
<li>表格树父节点兼容0,'0','',null</li>
|
||||||
|
<li>表单必填的项添加星号</li>
|
||||||
|
<li>修复select2不显示校验错误信息</li>
|
||||||
|
<li>添加自定义HTML过滤器</li>
|
||||||
|
<li>修复多数据源下开关关闭出现异常问题</li>
|
||||||
|
<li>修复翻页记住选择项数据问题</li>
|
||||||
|
<li>用户邮箱长度限制20</li>
|
||||||
|
<li>修改错误页面返回主页出现嵌套问题</li>
|
||||||
|
<li>表格浮动提示单双引号转义</li>
|
||||||
|
<li>支持配置四级菜单</li>
|
||||||
|
<li>升级shiro到最新版1.4.2 阻止rememberMe漏洞攻击</li>
|
||||||
|
<li>升级summernote到最新版本v0.8.12</li>
|
||||||
|
<li>导入Excel根据dateFormat属性格式处理</li>
|
||||||
|
<li>修复War部署无法正常shutdown,ehcache内存泄漏</li>
|
||||||
|
<li>修复代码生成短字段无法识别问题</li>
|
||||||
|
<li>修复serviceImpl模版,修改方法判断日期错误</li>
|
||||||
|
<li>代码生成模板增加导出功能日志记录</li>
|
||||||
|
<li>代码生成唯一编号调整为tableId</li>
|
||||||
|
<li>代码生成查询时忽略大小写</li>
|
||||||
|
<li>代码生成支持翻页记住选中</li>
|
||||||
|
<li>代码生成表注释未填写也允许导入</li>
|
||||||
|
<li>Global全局配置类修改为注解,防止多环境配置下读取问题</li>
|
||||||
|
<li>修复多表格情况下,firstLoad只对第一个表格生效</li>
|
||||||
|
<li>处理Maven打包出现警告问题</li>
|
||||||
|
<li>默认主题样式,防止网速慢情况下出现空白</li>
|
||||||
|
<li>修复文件上传多级目录识别问题</li>
|
||||||
|
<li>锚链接解码url,防止中文导致页面不能加载问题</li>
|
||||||
|
<li>修复右键Tab页刷新事件重复请求问题</li>
|
||||||
|
<li>角色禁用&菜单隐藏不查询权限</li>
|
||||||
|
<li>其他细节优化</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h5 class="panel-title">
|
<h5 class="panel-title">
|
||||||
<a data-toggle="collapse" data-parent="#version" href="#v41">v4.1.0</a><code class="pull-right">2019.10.22</code>
|
<a data-toggle="collapse" data-parent="#version" href="#v41">v4.1.0</a><code class="pull-right">2019.10.22</code>
|
||||||
</h5>
|
</h5>
|
||||||
</div>
|
</div>
|
||||||
<div id="v41" class="panel-collapse collapse in">
|
<div id="v41" class="panel-collapse collapse">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<ol>
|
<ol>
|
||||||
<li>支持多表格实例操作</li>
|
<li>支持多表格实例操作</li>
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<th:block th:include="include :: footer" />
|
<th:block th:include="include :: footer" />
|
||||||
|
<th:block th:include="include :: bootstrap-table-export-js" />
|
||||||
<script th:inline="javascript">
|
<script th:inline="javascript">
|
||||||
var forceFlag = [[${@permission.hasPermi('monitor:online:forceLogout')}]];
|
var forceFlag = [[${@permission.hasPermi('monitor:online:forceLogout')}]];
|
||||||
var prefix = ctx + "monitor/online";
|
var prefix = ctx + "monitor/online";
|
||||||
|
|
@ -61,7 +62,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'sessionId',
|
field: 'sessionId',
|
||||||
title: '会话编号'
|
title: '会话编号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
return $.table.tooltip(value);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'loginName',
|
field: 'loginName',
|
||||||
|
|
@ -125,8 +129,8 @@
|
||||||
// 单条强退
|
// 单条强退
|
||||||
function forceLogout(sessionId) {
|
function forceLogout(sessionId) {
|
||||||
$.modal.confirm("确定要强制选中用户下线吗?", function() {
|
$.modal.confirm("确定要强制选中用户下线吗?", function() {
|
||||||
var data = { "sessionId": sessionId };
|
var data = { "ids": sessionId };
|
||||||
$.operate.post(prefix + "/forceLogout", data);
|
$.operate.post(prefix + "/batchForceLogout", data);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -139,7 +143,7 @@
|
||||||
}
|
}
|
||||||
$.modal.confirm("确认要强退选中的" + rows.length + "条数据吗?", function() {
|
$.modal.confirm("确认要强退选中的" + rows.length + "条数据吗?", function() {
|
||||||
var url = prefix + "/batchForceLogout";
|
var url = prefix + "/batchForceLogout";
|
||||||
var data = { "ids": rows };
|
var data = { "ids": rows.join() };
|
||||||
$.operate.post(url, data);
|
$.operate.post(url, data);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@
|
||||||
detailUrl: prefix + "/detail/{id}",
|
detailUrl: prefix + "/detail/{id}",
|
||||||
removeUrl: prefix + "/remove",
|
removeUrl: prefix + "/remove",
|
||||||
exportUrl: prefix + "/export",
|
exportUrl: prefix + "/export",
|
||||||
|
queryParams: queryParams,
|
||||||
sortName: "operTime",
|
sortName: "operTime",
|
||||||
sortOrder: "desc",
|
sortOrder: "desc",
|
||||||
modalName: "操作日志",
|
modalName: "操作日志",
|
||||||
|
|
@ -148,15 +149,20 @@
|
||||||
$.table.init(options);
|
$.table.init(options);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function queryParams(params) {
|
||||||
|
var search = $.table.queryParams(params);
|
||||||
|
search.businessTypes = $.common.join($('#businessTypes').selectpicker('val'));
|
||||||
|
return search;
|
||||||
|
}
|
||||||
|
|
||||||
function searchPre() {
|
function searchPre() {
|
||||||
var data = {};
|
$.table.search('operlog-form', 'bootstrap-table');
|
||||||
data.businessTypes = $.common.join($('#businessTypes').selectpicker('val'));
|
|
||||||
$.table.search('operlog-form', 'bootstrap-table', data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetPre() {
|
function resetPre() {
|
||||||
$.form.reset();
|
$("#operlog-form")[0].reset();
|
||||||
$("#businessTypes").selectpicker('refresh');
|
$("#businessTypes").selectpicker('refresh');
|
||||||
|
$.table.search('operlog-form', 'bootstrap-table');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,83 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
|
||||||
|
<title>注册若依系统</title>
|
||||||
|
<meta name="description" content="若依后台管理框架">
|
||||||
|
<link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
|
||||||
|
<link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
|
||||||
|
<link href="../static/css/style.css" th:href="@{/css/style.css}" rel="stylesheet"/>
|
||||||
|
<link href="../static/css/login.min.css" th:href="@{/css/login.min.css}" rel="stylesheet"/>
|
||||||
|
<link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=4.4.0}" rel="stylesheet"/>
|
||||||
|
<!-- 360浏览器急速模式 -->
|
||||||
|
<meta name="renderer" content="webkit">
|
||||||
|
<!-- 避免IE使用兼容模式 -->
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<link rel="shortcut icon" href="../static/favicon.ico" th:href="@{favicon.ico}"/>
|
||||||
|
<style type="text/css">label.error { position:inherit; }</style>
|
||||||
|
</head>
|
||||||
|
<body class="signin">
|
||||||
|
<div class="signinpanel">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<div class="signin-info">
|
||||||
|
<div class="logopanel m-b">
|
||||||
|
<h1><img alt="[ 若依 ]" src="../static/ruoyi.png" th:src="@{/ruoyi.png}"></h1>
|
||||||
|
</div>
|
||||||
|
<div class="m-b"></div>
|
||||||
|
<h4>欢迎使用 <strong>若依 后台管理系统</strong></h4>
|
||||||
|
<ul class="m-b">
|
||||||
|
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> SpringBoot</li>
|
||||||
|
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Mybatis</li>
|
||||||
|
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Shiro</li>
|
||||||
|
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Thymeleaf</li>
|
||||||
|
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Bootstrap</li>
|
||||||
|
</ul>
|
||||||
|
<strong>已经注册过? <a th:href="@{/login}">直接登录»</a></strong>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-5">
|
||||||
|
<form id="registerForm" autocomplete="off">
|
||||||
|
<h4 class="no-margins">注册:</h4>
|
||||||
|
<p class="m-t-md">你若不离不弃,我必生死相依</p>
|
||||||
|
<input type="text" name="username" class="form-control uname" placeholder="用户名" maxlength="20" />
|
||||||
|
<input type="password" name="password" class="form-control pword" placeholder="密码" maxlength="20" />
|
||||||
|
<input type="password" name="confirmPassword" class="form-control pword" placeholder="确认密码" maxlength="20" />
|
||||||
|
<div class="row m-t" th:if="${captchaEnabled==true}">
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<input type="text" name="validateCode" class="form-control code" placeholder="验证码" maxlength="5" >
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<a href="javascript:void(0);" title="点击更换验证码">
|
||||||
|
<img th:src="@{captcha/captchaImage(type=${captchaType})}" class="imgcode" width="85%"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="checkbox-custom" th:classappend="${captchaEnabled==false} ? 'm-t'">
|
||||||
|
<input type="checkbox" id="acceptTerm" name="acceptTerm"> <label for="acceptTerm">我已阅读并同意</label>
|
||||||
|
<a href="https://gitee.com/y_project/RuoYi/blob/master/README.md" target="_blank">使用条款</a>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-success btn-block" id="btnSubmit" data-loading="正在验证注册,请稍后...">注册</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="signup-footer">
|
||||||
|
<div class="pull-left">
|
||||||
|
© 2019 All Rights Reserved. RuoYi <br>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script th:inline="javascript"> var ctx = [[@{/}]]; var captchaType = [[${captchaType}]]; </script>
|
||||||
|
<!-- 全局js -->
|
||||||
|
<script src="../static/js/jquery.min.js" th:src="@{/js/jquery.min.js}"></script>
|
||||||
|
<script src="../static/js/bootstrap.min.js" th:src="@{/js/bootstrap.min.js}"></script>
|
||||||
|
<!-- 验证插件 -->
|
||||||
|
<script src="../static/ajax/libs/validate/jquery.validate.min.js" th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script>
|
||||||
|
<script src="../static/ajax/libs/validate/messages_zh.min.js" th:src="@{/ajax/libs/validate/messages_zh.min.js}"></script>
|
||||||
|
<script src="../static/ajax/libs/layer/layer.min.js" th:src="@{/ajax/libs/layer/layer.min.js}"></script>
|
||||||
|
<script src="../static/ajax/libs/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
|
||||||
|
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=4.4.0}"></script>
|
||||||
|
<script src="../static/ruoyi/register.js" th:src="@{/ruoyi/register.js}"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -140,7 +140,7 @@
|
||||||
</ul>
|
</ul>
|
||||||
</body>
|
</body>
|
||||||
<script th:src="@{/js/jquery.min.js}"></script>
|
<script th:src="@{/js/jquery.min.js}"></script>
|
||||||
<script th:src="@{/ruoyi/js/common.js?v=4.1.0}"></script>
|
<script th:src="@{/ruoyi/js/common.js?v=4.4.0}"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
//皮肤样式列表
|
//皮肤样式列表
|
||||||
var skins = ["skin-blue", "skin-green", "skin-purple", "skin-red", "skin-yellow"];
|
var skins = ["skin-blue", "skin-green", "skin-purple", "skin-red", "skin-yellow"];
|
||||||
|
|
|
||||||
|
|
@ -7,19 +7,19 @@
|
||||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||||
<form class="form-horizontal m" id="form-config-add" name="form-config-add">
|
<form class="form-horizontal m" id="form-config-add" name="form-config-add">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">参数名称:</label>
|
<label class="col-sm-3 control-label is-required">参数名称:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="configName" name="configName" class="form-control" type="text" required>
|
<input id="configName" name="configName" class="form-control" type="text" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">参数键名:</label>
|
<label class="col-sm-3 control-label is-required">参数键名:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="configKey" name="configKey" class="form-control" type="text" required>
|
<input id="configKey" name="configKey" class="form-control" type="text" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">参数键值:</label>
|
<label class="col-sm-3 control-label is-required">参数键值:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="configValue" name="configValue" class="form-control" type="text" required>
|
<input id="configValue" name="configValue" class="form-control" type="text" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,9 @@
|
||||||
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:config:export">
|
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:config:export">
|
||||||
<i class="fa fa-download"></i> 导出
|
<i class="fa fa-download"></i> 导出
|
||||||
</a>
|
</a>
|
||||||
|
<a class="btn btn-danger" onclick="clearCache()" shiro:hasPermission="system:config:remove">
|
||||||
|
<i class="fa fa-refresh"></i> 清理缓存
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-12 select-table table-striped">
|
<div class="col-sm-12 select-table table-striped">
|
||||||
<table id="bootstrap-table"></table>
|
<table id="bootstrap-table"></table>
|
||||||
|
|
@ -131,6 +134,11 @@
|
||||||
};
|
};
|
||||||
$.table.init(options);
|
$.table.init(options);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/** 清理参数缓存 */
|
||||||
|
function clearCache() {
|
||||||
|
$.operate.get(prefix + "/clearCache");
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -8,19 +8,19 @@
|
||||||
<form class="form-horizontal m" id="form-config-edit" th:object="${config}">
|
<form class="form-horizontal m" id="form-config-edit" th:object="${config}">
|
||||||
<input id="configId" name="configId" th:field="*{configId}" type="hidden">
|
<input id="configId" name="configId" th:field="*{configId}" type="hidden">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">参数名称:</label>
|
<label class="col-sm-3 control-label is-required">参数名称:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="configName" name="configName" th:field="*{configName}" class="form-control" type="text" required>
|
<input id="configName" name="configName" th:field="*{configName}" class="form-control" type="text" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">参数键名:</label>
|
<label class="col-sm-3 control-label is-required">参数键名:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="configKey" name="configKey" th:field="*{configKey}" class="form-control" type="text" required>
|
<input id="configKey" name="configKey" th:field="*{configKey}" class="form-control" type="text" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">参数键值:</label>
|
<label class="col-sm-3 control-label is-required">参数键值:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input id="configValue" name="configValue" th:field="*{configValue}" class="form-control" type="text" required>
|
<input id="configValue" name="configValue" th:field="*{configValue}" class="form-control" type="text" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,13 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">部门名称:</label>
|
<label class="col-sm-3 control-label is-required">部门名称:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input class="form-control" type="text" name="deptName" id="deptName" required>
|
<input class="form-control" type="text" name="deptName" id="deptName" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">显示排序:</label>
|
<label class="col-sm-3 control-label is-required">显示排序:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input class="form-control" type="text" name="orderNum" required>
|
<input class="form-control" type="text" name="orderNum" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -18,13 +18,13 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">部门名称:</label>
|
<label class="col-sm-3 control-label is-required">部门名称:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input class="form-control" type="text" name="deptName" th:field="*{deptName}" id="deptName" required>
|
<input class="form-control" type="text" name="deptName" th:field="*{deptName}" id="deptName" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">显示排序:</label>
|
<label class="col-sm-3 control-label is-required">显示排序:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}" required>
|
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -113,11 +113,12 @@
|
||||||
/*部门管理-修改-选择部门树*/
|
/*部门管理-修改-选择部门树*/
|
||||||
function selectDeptTree() {
|
function selectDeptTree() {
|
||||||
var deptId = $("#treeId").val();
|
var deptId = $("#treeId").val();
|
||||||
|
var excludeId = $("input[name='deptId']").val();
|
||||||
if(deptId > 0) {
|
if(deptId > 0) {
|
||||||
var options = {
|
var options = {
|
||||||
title: '部门选择',
|
title: '部门选择',
|
||||||
width: "380",
|
width: "380",
|
||||||
url: prefix + "/selectDeptTree/" + $("#treeId").val(),
|
url: prefix + "/selectDeptTree/" + $("#treeId").val() + "/" + excludeId,
|
||||||
callBack: doSubmit
|
callBack: doSubmit
|
||||||
};
|
};
|
||||||
$.modal.openOptions(options);
|
$.modal.openOptions(options);
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue