Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7913796730 | ||
|
|
87b7e8665a | ||
|
|
7e67c233dc | ||
|
|
0cec24d90b | ||
|
|
6874736a20 | ||
|
|
cd199be6aa | ||
|
|
fc51f0ce80 | ||
|
|
316b126c8f | ||
|
|
f7a9f33882 | ||
|
|
a805d23afe | ||
|
|
fb2887b3bf | ||
|
|
92d98a2a6e | ||
|
|
d066bf022b | ||
|
|
e26b65459e | ||
|
|
00a661e325 | ||
|
|
975829f2c0 | ||
|
|
9bf809061e | ||
|
|
c9dad631df | ||
|
|
47f5d7a7b7 | ||
|
|
e34b4ea63d | ||
|
|
9fc42511c6 | ||
|
|
c9bd08c2de | ||
|
|
4b8d64f16f | ||
|
|
32e2e212a7 | ||
|
|
aa478f2bd6 | ||
|
|
d27d739558 | ||
|
|
4f84560710 | ||
|
|
29e20870fc | ||
|
|
a9f378218b | ||
|
|
9531875401 | ||
|
|
1b193bcc65 | ||
|
|
2d32b0d9c2 | ||
|
|
f1ba270a47 | ||
|
|
8a2bba86eb | ||
|
|
9ad6c1b998 | ||
|
|
eca0b9f89b | ||
|
|
536ee476cb | ||
|
|
67b5ff894e | ||
|
|
a469435499 | ||
|
|
1d01d20b49 | ||
|
|
161c0f1a67 | ||
|
|
b554c46825 | ||
|
|
402fc9c4eb | ||
|
|
a0f07f786a | ||
|
|
8a37d2ae24 | ||
|
|
9c50dd8c2d | ||
|
|
807b723116 | ||
|
|
d399160a0b | ||
|
|
dacf0bfe66 | ||
|
|
cf1b00c409 | ||
|
|
b033c858b8 | ||
|
|
6a3ba38b45 | ||
|
|
90131d1338 | ||
|
|
2d319a8d0c | ||
|
|
84b39901af | ||
|
|
877e8edb09 | ||
|
|
2d588ed873 | ||
|
|
f1f7d7e4fc | ||
|
|
f3ea70c32c | ||
|
|
fe4677bcf5 | ||
|
|
c03613f317 | ||
|
|
cc67d57cef | ||
|
|
742846b421 | ||
|
|
4829163bab | ||
|
|
3c92ab7463 | ||
|
|
2de9f07449 | ||
|
|
97260b02cb | ||
|
|
af64be2a31 | ||
|
|
0a0a6982f7 | ||
|
|
3270db75af | ||
|
|
0d69164acd | ||
|
|
a5507dace7 | ||
|
|
0ced39f2d6 | ||
|
|
c5968b76ec | ||
|
|
d5014c754c | ||
|
|
a8b7ba00ac | ||
|
|
894090c39f | ||
|
|
6b74dcb95f | ||
|
|
170e736c44 | ||
|
|
25d7c2c1f7 | ||
|
|
d5a89621a9 | ||
|
|
c6bd84818a | ||
|
|
262ee4eb5c | ||
|
|
00a10ed8df | ||
|
|
c064115501 | ||
|
|
eae8c660cf | ||
|
|
f5af4e8204 | ||
|
|
2f535082f2 | ||
|
|
d872c66d19 | ||
|
|
1042b40cfc | ||
|
|
070f7bc6bd | ||
|
|
4f1c99293f | ||
|
|
57fa243747 | ||
|
|
04f2607398 | ||
|
|
01caa02f5e | ||
|
|
e37ec9f8fa | ||
|
|
122e8b61a0 | ||
|
|
2345dfdf42 | ||
|
|
77550e2f11 | ||
|
|
ca5b4bc852 | ||
|
|
5fc9a63231 | ||
|
|
958be505c9 | ||
|
|
ec8c7f1d79 | ||
|
|
030b61bc37 | ||
|
|
619e1d241a | ||
|
|
dc07b97cdb | ||
|
|
dd37524b04 | ||
|
|
8c0ebd008e | ||
|
|
0c76d45349 | ||
|
|
6237ddb3dc | ||
|
|
8643dde074 | ||
|
|
d22fa29b65 | ||
|
|
b66097c004 | ||
|
|
d30dc35e59 | ||
|
|
87c38706cd | ||
|
|
f04c1fed50 | ||
|
|
4474c533e6 | ||
|
|
4374a24f79 | ||
|
|
383d082194 | ||
|
|
e9a7cc7bc7 | ||
|
|
8b07f8925f | ||
|
|
2af817d8dc | ||
|
|
0e240cb244 | ||
|
|
fc834b35cb | ||
|
|
4fa795dee9 | ||
|
|
33788ecd02 | ||
|
|
3d3017804d | ||
|
|
63ee2ba2e7 | ||
|
|
aac46aa353 | ||
|
|
c6e4daedd4 | ||
|
|
6b9b8ed889 | ||
|
|
1f000d9f84 | ||
|
|
9d5a702e1f | ||
|
|
bb1831f609 | ||
|
|
c628cf7ee7 | ||
|
|
1de73da333 | ||
|
|
c404de1773 | ||
|
|
cfcd48b6b2 | ||
|
|
a87e1d019d | ||
|
|
ef91e71d7b | ||
|
|
3bacfc5951 | ||
|
|
b5cd54da66 | ||
|
|
0e9925a481 | ||
|
|
7943b765ca | ||
|
|
a74e58f7d5 | ||
|
|
ea58f8db9c | ||
|
|
89e21eecea | ||
|
|
35df1dbcdf | ||
|
|
0972bba763 | ||
|
|
583b06ca9a | ||
|
|
6a4b1898b1 | ||
|
|
268f0a6321 | ||
|
|
e56a7e7e57 | ||
|
|
9d225fecb9 | ||
|
|
d24481f9a5 |
@@ -2,13 +2,13 @@
|
||||
|
||||
一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
|
||||
|
||||
寓意:你若不离不弃,我必生死相依
|
||||
性别男,若依是给还没有出生女儿取的名字(寓意:你若不离不弃,我必生死相依)
|
||||
|
||||
若依基于hplus和inspinia两套后台系统模板开发。有需要可自行到群内下载。
|
||||
|
||||
> RuoYi从3.0开始,进行模块拆分,将原先的单应用转变为多模块,如需单应用,请移步 [RuoYi-fast](https://gitee.com/y_project/RuoYi-fast)
|
||||
> 如需单应用,请移步 [RuoYi-fast](https://gitee.com/y_project/RuoYi-fast) `(保持同步更新)`,如需Oracle版本,请移步 [RuoYi-oracle](http://doc.ruoyi.vip/#/standard/xmkz) `(不定时更新)`
|
||||
|
||||
> 推荐使用阿里云部署,通用云产品代金券 :[点我领取](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof)
|
||||
> 阿里云通用云产品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) `(仅限新用户)`
|
||||
|
||||
## 内置功能
|
||||
|
||||
@@ -26,10 +26,12 @@
|
||||
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
|
||||
13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
|
||||
14. 系统接口:根据业务代码自动生成相关的api接口文档。
|
||||
15. 在线构建器:拖动表单元素生成相应的HTML代码。
|
||||
16. 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
|
||||
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
|
||||
16. 在线构建器:拖动表单元素生成相应的HTML代码。
|
||||
17. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
|
||||
## 在线体验
|
||||
> admin/admin123
|
||||
> admin/admin123
|
||||
> 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
|
||||
|
||||
演示地址:http://ruoyi.vip
|
||||
|
||||
@@ -40,31 +42,39 @@
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/25b5e333768d013d45a990c152dbe4d9d6e.jpg"/></td>
|
||||
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194326_GBIJ_1438828.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/5ac52ccc07a59f12205948c9408791f5c5b.jpg"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194443_Qyuq_1438828.png"/></td>
|
||||
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194501_U7gT_1438828.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/66f8b5b24720dabe0e11ae84bd1ad4b038e.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/a46f34786bc9fc400697b6f3677be5bb3f0.jpg"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194525_PApp_1438828.png"/></td>
|
||||
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194535_3EM0_1438828.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194612_kJ4F_1438828.png"/></td>
|
||||
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194623_YEXO_1438828.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/6010201b078dbc9e1d8c09c6a3e53f4344c.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/058928ad3a6e6de67b43d62d42dbf071355.jpg"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://static.oschina.net/uploads/space/2018/0902/132548_ne4U_1438828.png"/></td>
|
||||
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194643_MsxF_1438828.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/21acdcade5e306f2c5d7ae26993b4e6bd06.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/ad5ea3c4c2ea2e91d1f05f6cc384cbad2a1.jpg"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/6ca845cca1701fbf71881efe4f341c82f99.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/e3aeb8fff585594f6e947218e14f2806ea1.jpg"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194658_40L4_1438828.png"/></td>
|
||||
<td><img src="https://static.oschina.net/uploads/space/2018/1005/194712_2ma3_1438828.png"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/197ddc2fdffc27020f8624bd7ca1a971f61.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/a2dabea752d7d70aede20908dee0b419829.jpg"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/c5699c5726b5aebde71a37bb5163d840bc2.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/24740d59377e826d0d8664ebad66dc84abd.jpg"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/bbe7fe1048d29217ba73bd3ed88d6743b55.jpg"/></td>
|
||||
<td><img src="https://oscimg.oschina.net/oscnet/5f3d39a141f21f81b90536f391b8408f1fa.jpg"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
## 若依交流群
|
||||
|
||||
QQ群: [](https://jq.qq.com/?_wv=1027&k=5HBAaYN) [](https://jq.qq.com/?_wv=1027&k=5cHeRVW) 点击按钮入群。
|
||||
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) 点击按钮入群。
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
@echo off
|
||||
echo.
|
||||
echo [信息] 运行Web工程。
|
||||
echo.
|
||||
|
||||
cd %~dp0
|
||||
cd ../ruoyi-admin/target
|
||||
|
||||
set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
||||
|
||||
java -jar %JAVA_OPTS% ruoyi-admin.jar
|
||||
|
||||
cd bin
|
||||
pause
|
||||
Binary file not shown.
@@ -6,37 +6,201 @@
|
||||
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi</artifactId>
|
||||
<version>3.1</version>
|
||||
<version>3.3</version>
|
||||
|
||||
<name>ruoyi</name>
|
||||
<url>http://www.ruoyi.vip</url>
|
||||
<description>若依管理系统</description>
|
||||
|
||||
<properties>
|
||||
<ruoyi.version>3.1</ruoyi.version>
|
||||
<ruoyi.version>3.3</ruoyi.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
<shiro.version>1.4.0</shiro.version>
|
||||
<thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version>
|
||||
<mybatis.boot.version>1.3.2</mybatis.boot.version>
|
||||
<druid.version>1.1.10</druid.version>
|
||||
<druid.version>1.1.14</druid.version>
|
||||
<bitwalker.version>1.19</bitwalker.version>
|
||||
<kaptcha.version>2.3.2</kaptcha.version>
|
||||
<swagger.version>2.7.0</swagger.version>
|
||||
<pagehelper.boot.version>1.2.5</pagehelper.boot.version>
|
||||
<oshi.version>3.9.1</oshi.version>
|
||||
<commons.io.version>2.5</commons.io.version>
|
||||
<commons.fileupload.version>1.3.3</commons.fileupload.version>
|
||||
<commons.beanutils.version>1.9.3</commons.beanutils.version>
|
||||
<jsoup.version>1.11.3</jsoup.version>
|
||||
<poi.version>3.17</poi.version>
|
||||
<velocity.version>1.7</velocity.version>
|
||||
</properties>
|
||||
|
||||
<!-- 依赖声明 -->
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
|
||||
<!-- SpringBoot的依赖配置-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-dependencies</artifactId>
|
||||
<version>2.0.5.RELEASE</version>
|
||||
<version>2.1.1.RELEASE</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
|
||||
<!--阿里数据库连接池 -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>druid-spring-boot-starter</artifactId>
|
||||
<version>${druid.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--验证码 -->
|
||||
<dependency>
|
||||
<groupId>com.github.penggle</groupId>
|
||||
<artifactId>kaptcha</artifactId>
|
||||
<version>${kaptcha.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--Shiro核心框架 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-core</artifactId>
|
||||
<version>${shiro.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Shiro使用Srping框架 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-spring</artifactId>
|
||||
<version>${shiro.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Shiro使用EhCache缓存框架 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-ehcache</artifactId>
|
||||
<version>${shiro.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- thymeleaf模板引擎和shiro框架的整合 -->
|
||||
<dependency>
|
||||
<groupId>com.github.theborakompanioni</groupId>
|
||||
<artifactId>thymeleaf-extras-shiro</artifactId>
|
||||
<version>${thymeleaf.extras.shiro.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 解析客户端操作系统、浏览器等 -->
|
||||
<dependency>
|
||||
<groupId>eu.bitwalker</groupId>
|
||||
<artifactId>UserAgentUtils</artifactId>
|
||||
<version>${bitwalker.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- pagehelper 分页插件 -->
|
||||
<dependency>
|
||||
<groupId>com.github.pagehelper</groupId>
|
||||
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
||||
<version>${pagehelper.boot.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 获取系统信息 -->
|
||||
<dependency>
|
||||
<groupId>com.github.oshi</groupId>
|
||||
<artifactId>oshi-core</artifactId>
|
||||
<version>${oshi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- swagger2-->
|
||||
<dependency>
|
||||
<groupId>io.springfox</groupId>
|
||||
<artifactId>springfox-swagger2</artifactId>
|
||||
<version>${swagger.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- swagger2-UI-->
|
||||
<dependency>
|
||||
<groupId>io.springfox</groupId>
|
||||
<artifactId>springfox-swagger-ui</artifactId>
|
||||
<version>${swagger.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--io常用工具类 -->
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>${commons.io.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--文件上传工具类 -->
|
||||
<dependency>
|
||||
<groupId>commons-fileupload</groupId>
|
||||
<artifactId>commons-fileupload</artifactId>
|
||||
<version>${commons.fileupload.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 简化反射封工具类 -->
|
||||
<dependency>
|
||||
<groupId>commons-beanutils</groupId>
|
||||
<artifactId>commons-beanutils</artifactId>
|
||||
<version>${commons.beanutils.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- HTML解析器 -->
|
||||
<dependency>
|
||||
<groupId>org.jsoup</groupId>
|
||||
<artifactId>jsoup</artifactId>
|
||||
<version>${jsoup.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- excel工具 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>${poi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--velocity代码生成使用模板 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.velocity</groupId>
|
||||
<artifactId>velocity</artifactId>
|
||||
<version>${velocity.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 定时任务-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-quartz</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 代码生成-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-generator</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 核心模块-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-framework</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 系统模块-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-system</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 通用工具-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-common</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
@@ -53,35 +217,7 @@
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!--Spring框架基本的核心工具-->
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context-support</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringBoot集成mybatis框架 -->
|
||||
<dependency>
|
||||
<groupId>org.mybatis.spring.boot</groupId>
|
||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||
<version>${mybatis.boot.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Mysql驱动包 -->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 日志工具类 -->
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
||||
+19
-5
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>ruoyi</artifactId>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<version>3.1</version>
|
||||
<version>3.3</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<packaging>jar</packaging>
|
||||
@@ -15,8 +15,13 @@
|
||||
web服务入口
|
||||
</description>
|
||||
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!-- SpringBoot集成thymeleaf模板 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- spring-boot-devtools -->
|
||||
<dependency>
|
||||
@@ -29,21 +34,30 @@
|
||||
<dependency>
|
||||
<groupId>io.springfox</groupId>
|
||||
<artifactId>springfox-swagger2</artifactId>
|
||||
<version>${swagger.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- swagger2-UI-->
|
||||
<dependency>
|
||||
<groupId>io.springfox</groupId>
|
||||
<artifactId>springfox-swagger-ui</artifactId>
|
||||
<version>${swagger.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 核心模块-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-framework</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 定时任务-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-quartz</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 代码生成-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-generator</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -6,9 +6,17 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import com.ruoyi.common.config.Global;
|
||||
import com.ruoyi.common.config.ServerConfig;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.common.utils.file.FileUploadUtils;
|
||||
import com.ruoyi.common.utils.file.FileUtils;
|
||||
|
||||
/**
|
||||
@@ -21,17 +29,36 @@ public class CommonController
|
||||
{
|
||||
private static final Logger log = LoggerFactory.getLogger(CommonController.class);
|
||||
|
||||
@RequestMapping("common/download")
|
||||
/**
|
||||
* 文件上传路径
|
||||
*/
|
||||
public static final String UPLOAD_PATH = "/profile/upload/";
|
||||
|
||||
@Autowired
|
||||
private ServerConfig serverConfig;
|
||||
|
||||
/**
|
||||
* 通用下载请求
|
||||
*
|
||||
* @param fileName 文件名称
|
||||
* @param delete 是否删除
|
||||
*/
|
||||
@GetMapping("common/download")
|
||||
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
|
||||
{
|
||||
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
|
||||
try
|
||||
{
|
||||
if (!FileUtils.isValidFilename(fileName))
|
||||
{
|
||||
throw new Exception(StringUtils.format(" 文件名称({})非法,不允许下载。 ", fileName));
|
||||
}
|
||||
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
|
||||
String filePath = Global.getDownloadPath() + fileName;
|
||||
|
||||
response.setCharacterEncoding("utf-8");
|
||||
response.setContentType("multipart/form-data");
|
||||
response.setHeader("Content-Disposition", "attachment;fileName=" + setFileDownloadHeader(request, realFileName));
|
||||
response.setHeader("Content-Disposition",
|
||||
"attachment;fileName=" + setFileDownloadHeader(request, realFileName));
|
||||
FileUtils.writeBytes(filePath, response.getOutputStream());
|
||||
if (delete)
|
||||
{
|
||||
@@ -44,6 +71,31 @@ public class CommonController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用上传请求
|
||||
*/
|
||||
@PostMapping("/common/upload")
|
||||
@ResponseBody
|
||||
public AjaxResult uploadFile(MultipartFile file) throws Exception
|
||||
{
|
||||
try
|
||||
{
|
||||
// 上传文件路径
|
||||
String filePath = Global.getUploadPath();
|
||||
// 上传并返回新文件名称
|
||||
String fileName = FileUploadUtils.upload(filePath, file);
|
||||
String url = serverConfig.getUrl() + UPLOAD_PATH + fileName;
|
||||
AjaxResult ajax = AjaxResult.success();
|
||||
ajax.put("fileName", fileName);
|
||||
ajax.put("url", url);
|
||||
return ajax;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return AjaxResult.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException
|
||||
{
|
||||
final String agent = request.getHeader("USER-AGENT");
|
||||
|
||||
@@ -4,7 +4,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
|
||||
/**
|
||||
* druid 监控
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.framework.web.domain.Server;
|
||||
|
||||
/**
|
||||
|
||||
+5
-5
@@ -9,13 +9,13 @@ 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.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.utils.ExcelUtil;
|
||||
import com.ruoyi.framework.web.page.TableDataInfo;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.system.domain.SysLogininfor;
|
||||
import com.ruoyi.system.service.ISysLogininforService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 系统访问记录
|
||||
@@ -56,7 +56,7 @@ public class SysLogininforController extends BaseController
|
||||
{
|
||||
List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
|
||||
ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
|
||||
return util.exportExcel(list, "logininfor");
|
||||
return util.exportExcel(list, "登陆日志");
|
||||
}
|
||||
|
||||
@RequiresPermissions("monitor:logininfor:remove")
|
||||
|
||||
+5
-5
@@ -11,13 +11,13 @@ 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.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.utils.ExcelUtil;
|
||||
import com.ruoyi.framework.web.page.TableDataInfo;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.system.domain.SysOperLog;
|
||||
import com.ruoyi.system.service.ISysOperLogService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 操作日志记录
|
||||
@@ -58,7 +58,7 @@ public class SysOperlogController extends BaseController
|
||||
{
|
||||
List<SysOperLog> list = operLogService.selectOperLogList(operLog);
|
||||
ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
|
||||
return util.exportExcel(list, "operLog");
|
||||
return util.exportExcel(list, "操作日志");
|
||||
}
|
||||
|
||||
@RequiresPermissions("monitor:operlog:remove")
|
||||
|
||||
+7
-5
@@ -10,16 +10,16 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.enums.OnlineStatus;
|
||||
import com.ruoyi.framework.shiro.session.OnlineSession;
|
||||
import com.ruoyi.framework.shiro.session.OnlineSessionDAO;
|
||||
import com.ruoyi.framework.util.ShiroUtils;
|
||||
import com.ruoyi.framework.web.page.TableDataInfo;
|
||||
import com.ruoyi.system.domain.SysUserOnline;
|
||||
import com.ruoyi.system.service.impl.SysUserOnlineServiceImpl;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
import com.ruoyi.system.service.ISysUserOnlineService;
|
||||
|
||||
/**
|
||||
* 在线用户监控
|
||||
@@ -33,7 +33,7 @@ public class SysUserOnlineController extends BaseController
|
||||
private String prefix = "monitor/online";
|
||||
|
||||
@Autowired
|
||||
private SysUserOnlineServiceImpl userOnlineService;
|
||||
private ISysUserOnlineService userOnlineService;
|
||||
|
||||
@Autowired
|
||||
private OnlineSessionDAO onlineSessionDAO;
|
||||
@@ -78,6 +78,7 @@ public class SysUserOnlineController extends BaseController
|
||||
return error("当前登陆用户无法强退");
|
||||
}
|
||||
onlineSession.setStatus(OnlineStatus.off_line);
|
||||
onlineSessionDAO.update(onlineSession);
|
||||
online.setStatus(OnlineStatus.off_line);
|
||||
userOnlineService.saveOnline(online);
|
||||
}
|
||||
@@ -105,6 +106,7 @@ public class SysUserOnlineController extends BaseController
|
||||
return error("用户已下线");
|
||||
}
|
||||
onlineSession.setStatus(OnlineStatus.off_line);
|
||||
onlineSessionDAO.update(onlineSession);
|
||||
online.setStatus(OnlineStatus.off_line);
|
||||
userOnlineService.saveOnline(online);
|
||||
return success();
|
||||
|
||||
@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import com.google.code.kaptcha.Constants;
|
||||
import com.google.code.kaptcha.Producer;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
|
||||
/**
|
||||
* 图片验证码(支持算术形式)
|
||||
|
||||
@@ -11,14 +11,14 @@ 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.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.utils.ExcelUtil;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.framework.util.ShiroUtils;
|
||||
import com.ruoyi.framework.web.page.TableDataInfo;
|
||||
import com.ruoyi.system.domain.SysConfig;
|
||||
import com.ruoyi.system.service.ISysConfigService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 参数配置 信息操作处理
|
||||
@@ -62,7 +62,7 @@ public class SysConfigController extends BaseController
|
||||
{
|
||||
List<SysConfig> list = configService.selectConfigList(config);
|
||||
ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
|
||||
return util.exportExcel(list, "config");
|
||||
return util.exportExcel(list, "参数数据");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.ruoyi.web.controller.system;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
@@ -11,15 +10,16 @@ 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.utils.StringUtils;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.domain.Ztree;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.framework.util.ShiroUtils;
|
||||
import com.ruoyi.system.domain.SysDept;
|
||||
import com.ruoyi.system.domain.SysRole;
|
||||
import com.ruoyi.system.service.ISysDeptService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 部门信息
|
||||
@@ -107,17 +107,17 @@ public class SysDeptController extends BaseController
|
||||
*/
|
||||
@Log(title = "部门管理", businessType = BusinessType.DELETE)
|
||||
@RequiresPermissions("system:dept:remove")
|
||||
@PostMapping("/remove/{deptId}")
|
||||
@GetMapping("/remove/{deptId}")
|
||||
@ResponseBody
|
||||
public AjaxResult remove(@PathVariable("deptId") Long deptId)
|
||||
{
|
||||
if (deptService.selectDeptCount(deptId) > 0)
|
||||
{
|
||||
return error(1, "存在下级部门,不允许删除");
|
||||
return AjaxResult.warn("存在下级部门,不允许删除");
|
||||
}
|
||||
if (deptService.checkDeptExistUser(deptId))
|
||||
{
|
||||
return error(1, "部门存在用户,不允许删除");
|
||||
return AjaxResult.warn("部门存在用户,不允许删除");
|
||||
}
|
||||
return toAjax(deptService.deleteDeptById(deptId));
|
||||
}
|
||||
@@ -147,10 +147,10 @@ public class SysDeptController extends BaseController
|
||||
*/
|
||||
@GetMapping("/treeData")
|
||||
@ResponseBody
|
||||
public List<Map<String, Object>> treeData()
|
||||
public List<Ztree> treeData()
|
||||
{
|
||||
List<Map<String, Object>> tree = deptService.selectDeptTree();
|
||||
return tree;
|
||||
List<Ztree> ztrees = deptService.selectDeptTree(new SysDept());
|
||||
return ztrees;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -158,9 +158,9 @@ public class SysDeptController extends BaseController
|
||||
*/
|
||||
@GetMapping("/roleDeptTreeData")
|
||||
@ResponseBody
|
||||
public List<Map<String, Object>> deptTreeData(SysRole role)
|
||||
public List<Ztree> deptTreeData(SysRole role)
|
||||
{
|
||||
List<Map<String, Object>> tree = deptService.roleDeptTreeData(role);
|
||||
return tree;
|
||||
List<Ztree> ztrees = deptService.roleDeptTreeData(role);
|
||||
return ztrees;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -11,14 +11,14 @@ 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.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.utils.ExcelUtil;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.framework.util.ShiroUtils;
|
||||
import com.ruoyi.framework.web.page.TableDataInfo;
|
||||
import com.ruoyi.system.domain.SysDictData;
|
||||
import com.ruoyi.system.service.ISysDictDataService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 数据字典信息
|
||||
@@ -59,7 +59,7 @@ public class SysDictDataController extends BaseController
|
||||
{
|
||||
List<SysDictData> list = dictDataService.selectDictDataList(dictData);
|
||||
ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
|
||||
return util.exportExcel(list, "dictData");
|
||||
return util.exportExcel(list, "字典数据");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+5
-5
@@ -11,14 +11,14 @@ 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.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.utils.ExcelUtil;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.framework.util.ShiroUtils;
|
||||
import com.ruoyi.framework.web.page.TableDataInfo;
|
||||
import com.ruoyi.system.domain.SysDictType;
|
||||
import com.ruoyi.system.service.ISysDictTypeService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 数据字典信息
|
||||
@@ -60,7 +60,7 @@ public class SysDictTypeController extends BaseController
|
||||
|
||||
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
|
||||
ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
|
||||
return util.exportExcel(list, "dictType");
|
||||
return util.exportExcel(list, "字典类型");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -6,10 +6,11 @@ import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import com.ruoyi.common.config.Global;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.framework.util.ShiroUtils;
|
||||
import com.ruoyi.system.domain.SysMenu;
|
||||
import com.ruoyi.system.domain.SysUser;
|
||||
import com.ruoyi.system.service.ISysMenuService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 首页 业务处理
|
||||
@@ -27,7 +28,7 @@ public class SysIndexController extends BaseController
|
||||
public String index(ModelMap mmap)
|
||||
{
|
||||
// 取身份信息
|
||||
SysUser user = getSysUser();
|
||||
SysUser user = ShiroUtils.getSysUser();
|
||||
// 根据用户id取出菜单
|
||||
List<SysMenu> menus = menuService.selectMenusByUser(user);
|
||||
mmap.put("menus", menus);
|
||||
|
||||
@@ -10,10 +10,10 @@ 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.ResponseBody;
|
||||
import com.ruoyi.common.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.utils.ServletUtils;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.framework.util.ServletUtils;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 登录验证
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.ruoyi.web.controller.system;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
@@ -12,13 +11,14 @@ 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.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.domain.Ztree;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.framework.util.ShiroUtils;
|
||||
import com.ruoyi.system.domain.SysMenu;
|
||||
import com.ruoyi.system.domain.SysRole;
|
||||
import com.ruoyi.system.service.ISysMenuService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 菜单信息
|
||||
@@ -55,17 +55,17 @@ public class SysMenuController extends BaseController
|
||||
*/
|
||||
@Log(title = "菜单管理", businessType = BusinessType.DELETE)
|
||||
@RequiresPermissions("system:menu:remove")
|
||||
@PostMapping("/remove/{menuId}")
|
||||
@GetMapping("/remove/{menuId}")
|
||||
@ResponseBody
|
||||
public AjaxResult remove(@PathVariable("menuId") Long menuId)
|
||||
{
|
||||
if (menuService.selectCountMenuByParentId(menuId) > 0)
|
||||
{
|
||||
return error(1, "存在子菜单,不允许删除");
|
||||
return AjaxResult.warn("存在子菜单,不允许删除");
|
||||
}
|
||||
if (menuService.selectCountRoleMenuByMenuId(menuId) > 0)
|
||||
{
|
||||
return error(1, "菜单已分配,不允许删除");
|
||||
return AjaxResult.warn("菜单已分配,不允许删除");
|
||||
}
|
||||
ShiroUtils.clearCachedAuthorizationInfo();
|
||||
return toAjax(menuService.deleteMenuById(menuId));
|
||||
@@ -154,10 +154,10 @@ public class SysMenuController extends BaseController
|
||||
*/
|
||||
@GetMapping("/roleMenuTreeData")
|
||||
@ResponseBody
|
||||
public List<Map<String, Object>> roleMenuTreeData(SysRole role)
|
||||
public List<Ztree> roleMenuTreeData(SysRole role)
|
||||
{
|
||||
List<Map<String, Object>> tree = menuService.roleMenuTreeData(role);
|
||||
return tree;
|
||||
List<Ztree> ztrees = menuService.roleMenuTreeData(role);
|
||||
return ztrees;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -165,10 +165,10 @@ public class SysMenuController extends BaseController
|
||||
*/
|
||||
@GetMapping("/menuTreeData")
|
||||
@ResponseBody
|
||||
public List<Map<String, Object>> menuTreeData(SysRole role)
|
||||
public List<Ztree> menuTreeData(SysRole role)
|
||||
{
|
||||
List<Map<String, Object>> tree = menuService.menuTreeData();
|
||||
return tree;
|
||||
List<Ztree> ztrees = menuService.menuTreeData();
|
||||
return ztrees;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -11,13 +11,13 @@ 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.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.framework.util.ShiroUtils;
|
||||
import com.ruoyi.framework.web.page.TableDataInfo;
|
||||
import com.ruoyi.system.domain.SysNotice;
|
||||
import com.ruoyi.system.service.ISysNoticeService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 公告 信息操作处理
|
||||
|
||||
@@ -11,14 +11,14 @@ 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.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.utils.ExcelUtil;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.framework.util.ShiroUtils;
|
||||
import com.ruoyi.framework.web.page.TableDataInfo;
|
||||
import com.ruoyi.system.domain.SysPost;
|
||||
import com.ruoyi.system.service.ISysPostService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 岗位信息操作处理
|
||||
@@ -59,7 +59,7 @@ public class SysPostController extends BaseController
|
||||
{
|
||||
List<SysPost> list = postService.selectPostList(post);
|
||||
ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class);
|
||||
return util.exportExcel(list, "post");
|
||||
return util.exportExcel(list, "岗位数据");
|
||||
}
|
||||
|
||||
@RequiresPermissions("system:post:remove")
|
||||
|
||||
+46
-37
@@ -1,29 +1,27 @@
|
||||
package com.ruoyi.web.controller.system;
|
||||
|
||||
import org.apache.shiro.crypto.hash.Md5Hash;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
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.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.base.AjaxResult;
|
||||
import com.ruoyi.common.config.Global;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.common.utils.file.FileUploadUtils;
|
||||
import com.ruoyi.framework.shiro.service.SysPasswordService;
|
||||
import com.ruoyi.framework.util.FileUploadUtils;
|
||||
import com.ruoyi.framework.util.ShiroUtils;
|
||||
import com.ruoyi.system.domain.SysUser;
|
||||
import com.ruoyi.system.service.ISysDictDataService;
|
||||
import com.ruoyi.system.service.ISysUserService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 个人信息 业务处理
|
||||
@@ -44,17 +42,13 @@ public class SysProfileController extends BaseController
|
||||
@Autowired
|
||||
private SysPasswordService passwordService;
|
||||
|
||||
@Autowired
|
||||
private ISysDictDataService dictDataService;
|
||||
|
||||
/**
|
||||
* 个人信息
|
||||
*/
|
||||
@GetMapping()
|
||||
public String profile(ModelMap mmap)
|
||||
{
|
||||
SysUser user = getSysUser();
|
||||
user.setSex(dictDataService.selectDictLabel("sys_user_sex", user.getSex()));
|
||||
SysUser user = ShiroUtils.getSysUser();
|
||||
mmap.put("user", user);
|
||||
mmap.put("roleGroup", userService.selectUserRoleGroup(user.getUserId()));
|
||||
mmap.put("postGroup", userService.selectUserPostGroup(user.getUserId()));
|
||||
@@ -65,55 +59,64 @@ public class SysProfileController extends BaseController
|
||||
@ResponseBody
|
||||
public boolean checkPassword(String password)
|
||||
{
|
||||
SysUser user = getSysUser();
|
||||
String encrypt = new Md5Hash(user.getLoginName() + password + user.getSalt()).toHex().toString();
|
||||
if (user.getPassword().equals(encrypt))
|
||||
SysUser user = ShiroUtils.getSysUser();
|
||||
if (passwordService.matches(user, password))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@GetMapping("/resetPwd/{userId}")
|
||||
public String resetPwd(@PathVariable("userId") Long userId, ModelMap mmap)
|
||||
@GetMapping("/resetPwd")
|
||||
public String resetPwd(ModelMap mmap)
|
||||
{
|
||||
mmap.put("user", userService.selectUserById(userId));
|
||||
SysUser user = ShiroUtils.getSysUser();
|
||||
mmap.put("user", userService.selectUserById(user.getUserId()));
|
||||
return prefix + "/resetPwd";
|
||||
}
|
||||
|
||||
@Log(title = "重置密码", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/resetPwd")
|
||||
@ResponseBody
|
||||
public AjaxResult resetPwd(SysUser user)
|
||||
public AjaxResult resetPwd(String oldPassword, String newPassword)
|
||||
{
|
||||
user.setSalt(ShiroUtils.randomSalt());
|
||||
user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
|
||||
int rows = userService.resetUserPwd(user);
|
||||
if (rows > 0)
|
||||
SysUser user = ShiroUtils.getSysUser();
|
||||
if (StringUtils.isNotEmpty(newPassword) && passwordService.matches(user, oldPassword))
|
||||
{
|
||||
setSysUser(userService.selectUserById(user.getUserId()));
|
||||
return success();
|
||||
user.setSalt(ShiroUtils.randomSalt());
|
||||
user.setPassword(passwordService.encryptPassword(user.getLoginName(), newPassword, user.getSalt()));
|
||||
if (userService.resetUserPwd(user) > 0)
|
||||
{
|
||||
ShiroUtils.setSysUser(userService.selectUserById(user.getUserId()));
|
||||
return success();
|
||||
}
|
||||
return error();
|
||||
}
|
||||
else
|
||||
{
|
||||
return error("修改密码失败,旧密码错误");
|
||||
}
|
||||
return error();
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改用户
|
||||
*/
|
||||
@GetMapping("/edit/{userId}")
|
||||
public String edit(@PathVariable("userId") Long userId, ModelMap mmap)
|
||||
@GetMapping("/edit")
|
||||
public String edit(ModelMap mmap)
|
||||
{
|
||||
mmap.put("user", userService.selectUserById(userId));
|
||||
SysUser user = ShiroUtils.getSysUser();
|
||||
mmap.put("user", userService.selectUserById(user.getUserId()));
|
||||
return prefix + "/edit";
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改头像
|
||||
*/
|
||||
@GetMapping("/avatar/{userId}")
|
||||
public String avatar(@PathVariable("userId") Long userId, ModelMap mmap)
|
||||
@GetMapping("/avatar")
|
||||
public String avatar(ModelMap mmap)
|
||||
{
|
||||
mmap.put("user", userService.selectUserById(userId));
|
||||
SysUser user = ShiroUtils.getSysUser();
|
||||
mmap.put("user", userService.selectUserById(user.getUserId()));
|
||||
return prefix + "/avatar";
|
||||
}
|
||||
|
||||
@@ -125,9 +128,14 @@ public class SysProfileController extends BaseController
|
||||
@ResponseBody
|
||||
public AjaxResult update(SysUser user)
|
||||
{
|
||||
if (userService.updateUserInfo(user) > 0)
|
||||
SysUser currentUser = ShiroUtils.getSysUser();
|
||||
currentUser.setUserName(user.getUserName());
|
||||
currentUser.setEmail(user.getEmail());
|
||||
currentUser.setPhonenumber(user.getPhonenumber());
|
||||
currentUser.setSex(user.getSex());
|
||||
if (userService.updateUserInfo(currentUser) > 0)
|
||||
{
|
||||
setSysUser(userService.selectUserById(user.getUserId()));
|
||||
ShiroUtils.setSysUser(userService.selectUserById(currentUser.getUserId()));
|
||||
return success();
|
||||
}
|
||||
return error();
|
||||
@@ -139,17 +147,18 @@ public class SysProfileController extends BaseController
|
||||
@Log(title = "个人信息", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/updateAvatar")
|
||||
@ResponseBody
|
||||
public AjaxResult updateAvatar(SysUser user, @RequestParam("avatarfile") MultipartFile file)
|
||||
public AjaxResult updateAvatar(@RequestParam("avatarfile") MultipartFile file)
|
||||
{
|
||||
SysUser currentUser = ShiroUtils.getSysUser();
|
||||
try
|
||||
{
|
||||
if (!file.isEmpty())
|
||||
{
|
||||
String avatar = FileUploadUtils.upload(Global.getAvatarPath(), file);
|
||||
user.setAvatar(avatar);
|
||||
if (userService.updateUserInfo(user) > 0)
|
||||
currentUser.setAvatar(avatar);
|
||||
if (userService.updateUserInfo(currentUser) > 0)
|
||||
{
|
||||
setSysUser(userService.selectUserById(user.getUserId()));
|
||||
ShiroUtils.setSysUser(userService.selectUserById(currentUser.getUserId()));
|
||||
return success();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ 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.transaction.annotation.Transactional;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
@@ -12,14 +11,17 @@ 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.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.utils.ExcelUtil;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.framework.util.ShiroUtils;
|
||||
import com.ruoyi.framework.web.page.TableDataInfo;
|
||||
import com.ruoyi.system.domain.SysRole;
|
||||
import com.ruoyi.system.domain.SysUser;
|
||||
import com.ruoyi.system.domain.SysUserRole;
|
||||
import com.ruoyi.system.service.ISysRoleService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
import com.ruoyi.system.service.ISysUserService;
|
||||
|
||||
/**
|
||||
* 角色信息
|
||||
@@ -35,6 +37,9 @@ public class SysRoleController extends BaseController
|
||||
@Autowired
|
||||
private ISysRoleService roleService;
|
||||
|
||||
@Autowired
|
||||
private ISysUserService userService;
|
||||
|
||||
@RequiresPermissions("system:role:view")
|
||||
@GetMapping()
|
||||
public String role()
|
||||
@@ -60,7 +65,7 @@ public class SysRoleController extends BaseController
|
||||
{
|
||||
List<SysRole> list = roleService.selectRoleList(role);
|
||||
ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
|
||||
return util.exportExcel(list, "role");
|
||||
return util.exportExcel(list, "角色数据");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,7 +83,6 @@ public class SysRoleController extends BaseController
|
||||
@RequiresPermissions("system:role:add")
|
||||
@Log(title = "角色管理", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/add")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@ResponseBody
|
||||
public AjaxResult addSave(SysRole role)
|
||||
{
|
||||
@@ -104,7 +108,6 @@ public class SysRoleController extends BaseController
|
||||
@RequiresPermissions("system:role:edit")
|
||||
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/edit")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@ResponseBody
|
||||
public AjaxResult editSave(SysRole role)
|
||||
{
|
||||
@@ -114,27 +117,25 @@ public class SysRoleController extends BaseController
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增数据权限
|
||||
* 角色分配数据权限
|
||||
*/
|
||||
@GetMapping("/rule/{roleId}")
|
||||
public String rule(@PathVariable("roleId") Long roleId, ModelMap mmap)
|
||||
@GetMapping("/authDataScope/{roleId}")
|
||||
public String authDataScope(@PathVariable("roleId") Long roleId, ModelMap mmap)
|
||||
{
|
||||
mmap.put("role", roleService.selectRoleById(roleId));
|
||||
return prefix + "/rule";
|
||||
return prefix + "/dataScope";
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改保存数据权限
|
||||
* 保存角色分配数据权限
|
||||
*/
|
||||
@RequiresPermissions("system:role:edit")
|
||||
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/rule")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@PostMapping("/authDataScope")
|
||||
@ResponseBody
|
||||
public AjaxResult ruleSave(SysRole role)
|
||||
public AjaxResult authDataScopeSave(SysRole role)
|
||||
{
|
||||
role.setUpdateBy(ShiroUtils.getLoginName());
|
||||
return toAjax(roleService.updateRule(role));
|
||||
return toAjax(roleService.authDataScope(role));
|
||||
}
|
||||
|
||||
@RequiresPermissions("system:role:remove")
|
||||
@@ -181,4 +182,96 @@ public class SysRoleController extends BaseController
|
||||
{
|
||||
return prefix + "/tree";
|
||||
}
|
||||
|
||||
/**
|
||||
* 角色状态修改
|
||||
*/
|
||||
@Log(title = "角色管理", businessType = BusinessType.UPDATE)
|
||||
@RequiresPermissions("system:role:edit")
|
||||
@PostMapping("/changeStatus")
|
||||
@ResponseBody
|
||||
public AjaxResult changeStatus(SysRole role)
|
||||
{
|
||||
return toAjax(roleService.changeStatus(role));
|
||||
}
|
||||
|
||||
/**
|
||||
* 分配用户
|
||||
*/
|
||||
@RequiresPermissions("system:role:edit")
|
||||
@GetMapping("/authUser/{roleId}")
|
||||
public String authUser(@PathVariable("roleId") Long roleId, ModelMap mmap)
|
||||
{
|
||||
mmap.put("role", roleService.selectRoleById(roleId));
|
||||
return prefix + "/authUser";
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询已分配用户角色列表
|
||||
*/
|
||||
@RequiresPermissions("system:role:list")
|
||||
@PostMapping("/authUser/allocatedList")
|
||||
@ResponseBody
|
||||
public TableDataInfo allocatedList(SysUser user)
|
||||
{
|
||||
startPage();
|
||||
List<SysUser> list = userService.selectAllocatedList(user);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消授权
|
||||
*/
|
||||
@Log(title = "角色管理", businessType = BusinessType.GRANT)
|
||||
@PostMapping("/authUser/cancel")
|
||||
@ResponseBody
|
||||
public AjaxResult cancelAuthUser(SysUserRole userRole)
|
||||
{
|
||||
return toAjax(roleService.deleteAuthUser(userRole));
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量取消授权
|
||||
*/
|
||||
@Log(title = "角色管理", businessType = BusinessType.GRANT)
|
||||
@PostMapping("/authUser/cancelAll")
|
||||
@ResponseBody
|
||||
public AjaxResult cancelAuthUserAll(Long roleId, String userIds)
|
||||
{
|
||||
return toAjax(roleService.deleteAuthUsers(roleId, userIds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择用户
|
||||
*/
|
||||
@GetMapping("/authUser/selectUser/{roleId}")
|
||||
public String selectUser(@PathVariable("roleId") Long roleId, ModelMap mmap)
|
||||
{
|
||||
mmap.put("role", roleService.selectRoleById(roleId));
|
||||
return prefix + "/selectUser";
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询未分配用户角色列表
|
||||
*/
|
||||
@RequiresPermissions("system:role:list")
|
||||
@PostMapping("/authUser/unallocatedList")
|
||||
@ResponseBody
|
||||
public TableDataInfo unallocatedList(SysUser user)
|
||||
{
|
||||
startPage();
|
||||
List<SysUser> list = userService.selectUnallocatedList(user);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量选择用户授权
|
||||
*/
|
||||
@Log(title = "角色管理", businessType = BusinessType.GRANT)
|
||||
@PostMapping("/authUser/selectAll")
|
||||
@ResponseBody
|
||||
public AjaxResult selectAuthUserAll(Long roleId, String userIds)
|
||||
{
|
||||
return toAjax(roleService.insertAuthUsers(roleId, userIds));
|
||||
}
|
||||
}
|
||||
@@ -4,26 +4,26 @@ 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.transaction.annotation.Transactional;
|
||||
import org.springframework.ui.ModelMap;
|
||||
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.base.AjaxResult;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.common.utils.ExcelUtil;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.framework.shiro.service.SysPasswordService;
|
||||
import com.ruoyi.framework.util.ShiroUtils;
|
||||
import com.ruoyi.framework.web.page.TableDataInfo;
|
||||
import com.ruoyi.system.domain.SysUser;
|
||||
import com.ruoyi.system.service.ISysPostService;
|
||||
import com.ruoyi.system.service.ISysRoleService;
|
||||
import com.ruoyi.system.service.ISysUserService;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
/**
|
||||
* 用户信息
|
||||
@@ -73,7 +73,29 @@ public class SysUserController extends BaseController
|
||||
{
|
||||
List<SysUser> list = userService.selectUserList(user);
|
||||
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
|
||||
return util.exportExcel(list, "user");
|
||||
return util.exportExcel(list, "用户数据");
|
||||
}
|
||||
|
||||
@Log(title = "用户管理", businessType = BusinessType.IMPORT)
|
||||
@RequiresPermissions("system:user:import")
|
||||
@PostMapping("/importData")
|
||||
@ResponseBody
|
||||
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
|
||||
{
|
||||
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
|
||||
List<SysUser> userList = util.importExcel(file.getInputStream());
|
||||
String operName = ShiroUtils.getSysUser().getLoginName();
|
||||
String message = userService.importUser(userList, updateSupport, operName);
|
||||
return AjaxResult.success(message);
|
||||
}
|
||||
|
||||
@RequiresPermissions("system:user:view")
|
||||
@GetMapping("/importTemplate")
|
||||
@ResponseBody
|
||||
public AjaxResult importTemplate()
|
||||
{
|
||||
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
|
||||
return util.importTemplateExcel("用户数据");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -93,7 +115,6 @@ public class SysUserController extends BaseController
|
||||
@RequiresPermissions("system:user:add")
|
||||
@Log(title = "用户管理", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/add")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@ResponseBody
|
||||
public AjaxResult addSave(SysUser user)
|
||||
{
|
||||
@@ -125,7 +146,6 @@ public class SysUserController extends BaseController
|
||||
@RequiresPermissions("system:user:edit")
|
||||
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/edit")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@ResponseBody
|
||||
public AjaxResult editSave(SysUser user)
|
||||
{
|
||||
@@ -202,4 +222,16 @@ public class SysUserController extends BaseController
|
||||
{
|
||||
return userService.checkEmailUnique(user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户状态修改
|
||||
*/
|
||||
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
|
||||
@RequiresPermissions("system:user:edit")
|
||||
@PostMapping("/changeStatus")
|
||||
@ResponseBody
|
||||
public AjaxResult changeStatus(SysUser user)
|
||||
{
|
||||
return toAjax(userService.changeStatus(user));
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
|
||||
/**
|
||||
* build 表单构建
|
||||
|
||||
@@ -4,7 +4,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
|
||||
/**
|
||||
* swagger 接口
|
||||
|
||||
@@ -2,17 +2,14 @@ package com.ruoyi.web.controller.tool;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.ruoyi.common.base.AjaxResult;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
spring:
|
||||
datasource:
|
||||
type: com.alibaba.druid.pool.DruidDataSource
|
||||
driverClassName: com.mysql.jdbc.Driver
|
||||
driverClassName: com.mysql.cj.jdbc.Driver
|
||||
druid:
|
||||
# 主库数据源
|
||||
master:
|
||||
url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true
|
||||
url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: password
|
||||
# 从库数据源
|
||||
@@ -17,32 +17,38 @@ spring:
|
||||
username:
|
||||
password:
|
||||
# 初始连接数
|
||||
initial-size: 10
|
||||
# 最大连接池数量
|
||||
max-active: 100
|
||||
initialSize: 5
|
||||
# 最小连接池数量
|
||||
min-idle: 10
|
||||
minIdle: 10
|
||||
# 最大连接池数量
|
||||
maxActive: 20
|
||||
# 配置获取连接等待超时的时间
|
||||
max-wait: 60000
|
||||
# 打开PSCache,并且指定每个连接上PSCache的大小
|
||||
pool-prepared-statements: true
|
||||
max-pool-prepared-statement-per-connection-size: 20
|
||||
maxWait: 60000
|
||||
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
|
||||
timeBetweenEvictionRunsMillis: 60000
|
||||
# 配置一个连接在池中最小生存的时间,单位是毫秒
|
||||
min-evictable-idle-time-millis: 300000
|
||||
validation-query: SELECT 1 FROM DUAL
|
||||
test-while-idle: true
|
||||
test-on-borrow: false
|
||||
test-on-return: false
|
||||
stat-view-servlet:
|
||||
minEvictableIdleTimeMillis: 300000
|
||||
# 配置一个连接在池中最大生存的时间,单位是毫秒
|
||||
maxEvictableIdleTimeMillis: 900000
|
||||
# 配置检测连接是否有效
|
||||
validationQuery: SELECT 1 FROM DUAL
|
||||
testWhileIdle: true
|
||||
testOnBorrow: false
|
||||
testOnReturn: false
|
||||
webStatFilter:
|
||||
enabled: true
|
||||
statViewServlet:
|
||||
enabled: true
|
||||
# 设置白名单,不填则允许所有访问
|
||||
allow:
|
||||
url-pattern: /monitor/druid/*
|
||||
filter:
|
||||
stat:
|
||||
enabled: true
|
||||
# 慢SQL记录
|
||||
log-slow-sql: true
|
||||
slow-sql-millis: 1000
|
||||
merge-sql: false
|
||||
merge-sql: true
|
||||
wall:
|
||||
config:
|
||||
multi-statement-allow: true
|
||||
@@ -3,10 +3,10 @@ ruoyi:
|
||||
# 名称
|
||||
name: RuoYi
|
||||
# 版本
|
||||
version: 3.1.0
|
||||
version: 3.3.0
|
||||
# 版权年份
|
||||
copyrightYear: 2018
|
||||
# 文件上传路径
|
||||
copyrightYear: 2019
|
||||
# 文件上传
|
||||
profile: D:/profile/
|
||||
# 获取ip地址开关
|
||||
addressEnabled: true
|
||||
@@ -121,14 +121,3 @@ xss:
|
||||
excludes: /system/notice/*
|
||||
# 匹配链接
|
||||
urlPatterns: /system/*,/monitor/*,/tool/*
|
||||
|
||||
# 代码生成
|
||||
gen:
|
||||
# 作者
|
||||
author: ruoyi
|
||||
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
|
||||
packageName: com.ruoyi.system
|
||||
# 自动去除表前缀,默认是true
|
||||
autoRemovePre: true
|
||||
# 表前缀(类名不会包含表前缀)
|
||||
tablePrefix: sys_
|
||||
@@ -20,5 +20,5 @@ Spring Boot Version: ${spring-boot.version}
|
||||
// ========`-.____`-.___\_____/___.-`____.-'======== //
|
||||
// `=---=' //
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
|
||||
// 佛祖保佑 永不宕机 永无BUG //
|
||||
// 佛祖保佑 永不宕机 永无BUG //
|
||||
////////////////////////////////////////////////////////////////////
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ehcache name="ruoyi">
|
||||
<ehcache name="ruoyi" updateCheck="false">
|
||||
|
||||
<!-- 磁盘缓存位置 -->
|
||||
<diskStore path="java.io.tmpdir"/>
|
||||
|
||||
@@ -6,8 +6,8 @@ user.password.not.match=用户不存在/密码错误
|
||||
user.password.retry.limit.count=密码输入错误{0}次
|
||||
user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定10分钟
|
||||
user.password.delete=对不起,您的账号已被删除
|
||||
user.blocked=用户已封禁,原因:{0}
|
||||
role.blocked=角色已封禁,原因:{0}
|
||||
user.blocked=用户已封禁,请联系管理员
|
||||
role.blocked=角色已封禁,请联系管理员
|
||||
user.logout.success=退出成功
|
||||
|
||||
length.not.valid=长度必须在{min}到{max}个字符之间
|
||||
@@ -22,13 +22,10 @@ user.notfound=请重新登录
|
||||
user.forcelogout=管理员强制退出,请重新登录
|
||||
user.unknown.error=未知错误,请重新登录
|
||||
|
||||
#批量插入用户错误信息
|
||||
user.import.excel.null=Excel数据为空,请按照导入模板填写数据
|
||||
user.import.excel.data.null=Excel数据为空,只有标题行,请按照导入模板填写数据
|
||||
user.import.excel.filetype.error=文件不是Excel文件
|
||||
user.import.excel.file.error=文件名为空,文件为空
|
||||
user.import.excel.fileinput.error=获取Excel2003流错误
|
||||
user.import.excel.fileinputx.error=获取Excel2007流错误
|
||||
##文件上传消息
|
||||
upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB!
|
||||
upload.filename.exceed.length=上传的文件名最长{0}个字符
|
||||
|
||||
##权限
|
||||
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
|
||||
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
|
||||
|
||||
+2
-2
File diff suppressed because one or more lines are too long
+27
@@ -0,0 +1,27 @@
|
||||
.fixed-table-header-columns,
|
||||
.fixed-table-body-columns {
|
||||
position: absolute;
|
||||
background-color: #fff;
|
||||
display: none;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.fixed-table-header-columns .table,
|
||||
.fixed-table-body-columns .table {
|
||||
border-right: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.fixed-table-header-columns .table.table-no-bordered,
|
||||
.fixed-table-body-columns .table.table-no-bordered {
|
||||
border-right: 1px solid transparent;
|
||||
}
|
||||
|
||||
.fixed-table-body-columns table {
|
||||
position: absolute;
|
||||
animation: none;
|
||||
}
|
||||
|
||||
.bootstrap-table .table-hover > tbody > tr.hover > td {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
+256
@@ -0,0 +1,256 @@
|
||||
/**
|
||||
* 基于bootstrap-table-fixed-columns修改
|
||||
* 支持左右列冻结
|
||||
* Copyright (c) 2019 ruoyi
|
||||
*/
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
fixedColumns: false,
|
||||
fixedNumber: 1,
|
||||
rightFixedColumns: false,
|
||||
rightFixedNumber: 1
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_initHeader = BootstrapTable.prototype.initHeader,
|
||||
_initBody = BootstrapTable.prototype.initBody,
|
||||
_resetView = BootstrapTable.prototype.resetView;
|
||||
|
||||
BootstrapTable.prototype.initFixedColumns = function () {
|
||||
this.timeoutHeaderColumns_ = 0;
|
||||
this.timeoutBodyColumns_ = 0;
|
||||
if (this.options.fixedColumns) {
|
||||
this.$fixedBody = $([
|
||||
'<div class="fixed-table-column" style="position: absolute; background-color: #fff; border-right:1px solid #ddd;">',
|
||||
'<table>',
|
||||
'<thead></thead>',
|
||||
'<tbody></tbody>',
|
||||
'</table>',
|
||||
'</div>'].join(''));
|
||||
|
||||
|
||||
this.$fixedBody.find('table').attr('class', this.$el.attr('class'));
|
||||
this.$fixedHeaderColumns = this.$fixedBody.find('thead');
|
||||
this.$fixedBodyColumns = this.$fixedBody.find('tbody');
|
||||
this.$tableBody.before(this.$fixedBody);
|
||||
}
|
||||
if (this.options.rightFixedColumns) {
|
||||
this.$rightfixedBody = $([
|
||||
'<div class="fixed-table-column" style="position: absolute;right:0px; background-color: #fff; border-right:1px solid #ddd;">',
|
||||
'<table>',
|
||||
'<thead></thead>',
|
||||
'<tbody></tbody>',
|
||||
'</table>',
|
||||
'</div>'].join(''));
|
||||
|
||||
this.$rightfixedBody.find('table').attr('class', this.$el.attr('class'));
|
||||
this.$rightfixedHeaderColumns = this.$rightfixedBody.find('thead');
|
||||
this.$rightfixedBodyColumns = this.$rightfixedBody.find('tbody');
|
||||
this.$tableBody.before(this.$rightfixedBody);
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initHeader = function () {
|
||||
_initHeader.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.fixedColumns && !this.options.rightFixedColumns){
|
||||
return;
|
||||
}
|
||||
this.initFixedColumns();
|
||||
|
||||
var $ltr = this.$header.find('tr:eq(0)').clone(),
|
||||
$rtr = this.$header.find('tr:eq(0)').clone(),
|
||||
$lths = $ltr.clone().find('th'),
|
||||
$rths = $rtr.clone().find('th');
|
||||
|
||||
$ltr.html('');
|
||||
$rtr.html('');
|
||||
//右边列冻结
|
||||
if (this.options.rightFixedColumns) {
|
||||
for (var i = 0; i < this.options.rightFixedNumber; i++) {
|
||||
$rtr.append($rths.eq($rths.length - this.options.rightFixedNumber + i).clone());
|
||||
}
|
||||
this.$rightfixedHeaderColumns.html('').append($rtr);
|
||||
}
|
||||
|
||||
//左边列冻结
|
||||
if (this.options.fixedColumns) {
|
||||
for (var i = 0; i < this.options.fixedNumber; i++) {
|
||||
$ltr.append($lths.eq(i).clone());
|
||||
}
|
||||
this.$fixedHeaderColumns.html('').append($ltr);
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initBody = function () {
|
||||
_initBody.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.fixedColumns && !this.options.rightFixedColumns) {
|
||||
return;
|
||||
}
|
||||
|
||||
var that = this;
|
||||
if (this.options.fixedColumns) {
|
||||
this.$fixedBodyColumns.html('');
|
||||
this.$body.find('> tr[data-index]').each(function () {
|
||||
var $tr = $(this).clone(),
|
||||
$tds = $tr.clone().find('td');
|
||||
|
||||
$tr.html('');
|
||||
for (var i = 0; i < that.options.fixedNumber; i++) {
|
||||
$tr.append($tds.eq(i).clone());
|
||||
}
|
||||
that.$fixedBodyColumns.append($tr);
|
||||
});
|
||||
}
|
||||
if (this.options.rightFixedColumns) {
|
||||
this.$rightfixedBodyColumns.html('');
|
||||
this.$body.find('> tr[data-index]').each(function () {
|
||||
var $tr = $(this).clone(),
|
||||
$tds = $tr.clone().find('td');
|
||||
|
||||
$tr.html('');
|
||||
for (var i = 0; i < that.options.rightFixedNumber; i++) {
|
||||
var indexTd = $tds.length - that.options.rightFixedNumber + i;
|
||||
var oldTd = $tds.eq(indexTd);
|
||||
var fixTd = oldTd.clone();
|
||||
var buttons = fixTd.find('button');
|
||||
//事件转移:冻结列里面的事件转移到实际按钮的事件
|
||||
buttons.each(function (key, item) {
|
||||
$(item).click(function () {
|
||||
that.$body.find("tr[data-index=" + $tr.attr('data-index') + "] td:eq(" + indexTd + ") button:eq(" + key + ")").click();
|
||||
});
|
||||
});
|
||||
$tr.append(fixTd);
|
||||
}
|
||||
that.$rightfixedBodyColumns.append($tr);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.resetView = function () {
|
||||
_resetView.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.fixedColumns && !this.options.rightFixedColumns) {
|
||||
return;
|
||||
}
|
||||
|
||||
clearTimeout(this.timeoutHeaderColumns_);
|
||||
this.timeoutHeaderColumns_ = setTimeout($.proxy(this.fitHeaderColumns, this), this.$el.is(':hidden') ? 100 : 0);
|
||||
|
||||
clearTimeout(this.timeoutBodyColumns_);
|
||||
this.timeoutBodyColumns_ = setTimeout($.proxy(this.fitBodyColumns, this), this.$el.is(':hidden') ? 100 : 0);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.fitHeaderColumns = function () {
|
||||
var that = this,
|
||||
visibleFields = this.getVisibleFields(),
|
||||
headerWidth = 0;
|
||||
if (that.options.fixedColumns) {
|
||||
this.$body.find('tr:first-child:not(.no-records-found) > *').each(function (i) {
|
||||
var $this = $(this),
|
||||
index = i;
|
||||
|
||||
if (i >= that.options.fixedNumber) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (that.options.detailView && !that.options.cardView) {
|
||||
index = i - 1;
|
||||
}
|
||||
|
||||
that.$fixedBody.find('thead th[data-field="' + visibleFields[index] + '"]')
|
||||
.find('.fht-cell').width($this.innerWidth() - 1);
|
||||
headerWidth += $this.outerWidth();
|
||||
});
|
||||
this.$fixedBody.width(headerWidth - 1).show();
|
||||
}
|
||||
if (that.options.rightFixedColumns) {
|
||||
this.$body.find('tr:first-child:not(.no-records-found) > *').each(function (i) {
|
||||
var $this = $(this),
|
||||
index = i;
|
||||
|
||||
if (i >= visibleFields.length - that.options.rightFixedNumber) {
|
||||
return false;
|
||||
|
||||
|
||||
if (that.options.detailView && !that.options.cardView) {
|
||||
index = i - 1;
|
||||
}
|
||||
that.$rightfixedBody.find('thead th[data-field="' + visibleFields[index] + '"]')
|
||||
.find('.fht-cell').width($this.innerWidth() - 1);
|
||||
headerWidth += $this.outerWidth();
|
||||
}
|
||||
});
|
||||
this.$rightfixedBody.width(headerWidth - 1).show();
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.fitBodyColumns = function () {
|
||||
var that = this,
|
||||
top = -(parseInt(this.$el.css('margin-top')) - 2),
|
||||
height = this.$tableBody.height() - 2;
|
||||
|
||||
if (that.options.fixedColumns) {
|
||||
if (!this.$body.find('> tr[data-index]').length) {
|
||||
this.$fixedBody.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
this.$body.find('> tr').each(function (i) {
|
||||
that.$fixedBody.find('tbody tr:eq(' + i + ')').height($(this).height());
|
||||
});
|
||||
|
||||
//// events
|
||||
this.$tableBody.on('scroll', function () {
|
||||
that.$fixedBody.find('table').css('top', -$(this).scrollTop());
|
||||
});
|
||||
this.$body.find('> tr[data-index]').off('hover').hover(function () {
|
||||
var index = $(this).data('index');
|
||||
that.$fixedBody.find('tr[data-index="' + index + '"]').addClass('hover');
|
||||
}, function () {
|
||||
var index = $(this).data('index');
|
||||
that.$fixedBody.find('tr[data-index="' + index + '"]').removeClass('hover');
|
||||
});
|
||||
this.$fixedBody.find('tr[data-index]').off('hover').hover(function () {
|
||||
var index = $(this).data('index');
|
||||
that.$body.find('tr[data-index="' + index + '"]').addClass('hover');
|
||||
}, function () {
|
||||
var index = $(this).data('index');
|
||||
that.$body.find('> tr[data-index="' + index + '"]').removeClass('hover');
|
||||
});
|
||||
}
|
||||
if (that.options.rightFixedColumns) {
|
||||
if (!this.$body.find('> tr[data-index]').length) {
|
||||
this.$rightfixedBody.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
this.$body.find('> tr').each(function (i) {
|
||||
that.$rightfixedBody.find('tbody tr:eq(' + i + ')').height($(this).height());
|
||||
});
|
||||
|
||||
//// events
|
||||
this.$tableBody.on('scroll', function () {
|
||||
that.$rightfixedBody.find('table').css('top', -$(this).scrollTop());
|
||||
});
|
||||
this.$body.find('> tr[data-index]').off('hover').hover(function () {
|
||||
var index = $(this).data('index');
|
||||
that.$rightfixedBody.find('tr[data-index="' + index + '"]').addClass('hover');
|
||||
}, function () {
|
||||
var index = $(this).data('index');
|
||||
that.$rightfixedBody.find('tr[data-index="' + index + '"]').removeClass('hover');
|
||||
});
|
||||
this.$rightfixedBody.find('tr[data-index]').off('hover').hover(function () {
|
||||
var index = $(this).data('index');
|
||||
that.$body.find('tr[data-index="' + index + '"]').addClass('hover');
|
||||
}, function () {
|
||||
var index = $(this).data('index');
|
||||
that.$body.find('> tr[data-index="' + index + '"]').removeClass('hover');
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
+30
-74
@@ -1,44 +1,35 @@
|
||||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.1.0
|
||||
* 基于bootstrap-table-mobile修改
|
||||
* 修正部分iPhone手机不显示卡片视图
|
||||
* Copyright (c) 2019 ruoyi
|
||||
*/
|
||||
|
||||
!function ($) {
|
||||
|
||||
|
||||
'use strict';
|
||||
|
||||
var showHideColumns = function (that, checked) {
|
||||
if (that.options.columnsHidden.length > 0 ) {
|
||||
$.each(that.columns, function (i, column) {
|
||||
if (that.options.columnsHidden.indexOf(column.field) !== -1) {
|
||||
if (column.visible !== checked) {
|
||||
that.toggleColumn($.fn.bootstrapTable.utils.getFieldIndex(that.columns, column.field), checked, true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
var resetView = function (that) {
|
||||
if (that.options.height || that.options.showFooter) {
|
||||
setTimeout(function(){
|
||||
that.resetView.call(that);
|
||||
}, 1);
|
||||
setTimeout(that.resetView(), 1);
|
||||
}
|
||||
};
|
||||
|
||||
// 判断是否 iphone
|
||||
var isIPhone = function () {
|
||||
var browserName = navigator.userAgent.toLowerCase();
|
||||
return /(iPhone|iPad|iPod|iOS)/i.test(browserName);
|
||||
};
|
||||
|
||||
var changeView = function (that, width, height) {
|
||||
if (that.options.minHeight) {
|
||||
if ((width <= that.options.minWidth) && (height <= that.options.minHeight)) {
|
||||
if (checkValuesLessEqual(width, that.options.minWidth) && checkValuesLessEqual(height, that.options.minHeight)) {
|
||||
conditionCardView(that);
|
||||
} else if ((width > that.options.minWidth) && (height > that.options.minHeight)) {
|
||||
} else if (checkValuesGreater(width, that.options.minWidth) && checkValuesGreater(height, that.options.minHeight)) {
|
||||
conditionFullView(that);
|
||||
}
|
||||
} else {
|
||||
if (width <= that.options.minWidth) {
|
||||
if (checkValuesLessEqual(width, that.options.minWidth) || isIPhone()) {
|
||||
conditionCardView(that);
|
||||
} else if (width > that.options.minWidth) {
|
||||
} else if (checkValuesGreater(width, that.options.minWidth)) {
|
||||
conditionFullView(that);
|
||||
}
|
||||
}
|
||||
@@ -46,14 +37,20 @@
|
||||
resetView(that);
|
||||
};
|
||||
|
||||
var checkValuesLessEqual = function (currentValue, targetValue) {
|
||||
return currentValue <= targetValue;
|
||||
};
|
||||
|
||||
var checkValuesGreater = function (currentValue, targetValue) {
|
||||
return currentValue > targetValue;
|
||||
};
|
||||
|
||||
var conditionCardView = function (that) {
|
||||
changeTableView(that, false);
|
||||
showHideColumns(that, false);
|
||||
};
|
||||
|
||||
var conditionFullView = function (that) {
|
||||
changeTableView(that, true);
|
||||
showHideColumns(that, true);
|
||||
};
|
||||
|
||||
var changeTableView = function (that, cardViewState) {
|
||||
@@ -61,27 +58,12 @@
|
||||
that.toggleView();
|
||||
};
|
||||
|
||||
var debounce = function(func,wait) {
|
||||
var timeout;
|
||||
return function() {
|
||||
var context = this,
|
||||
args = arguments;
|
||||
var later = function() {
|
||||
timeout = null;
|
||||
func.apply(context,args);
|
||||
};
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(later, wait);
|
||||
};
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
mobileResponsive: false,
|
||||
minWidth: 562,
|
||||
minHeight: undefined,
|
||||
heightThreshold: 100, // just slightly larger than mobile chrome's auto-hiding toolbar
|
||||
checkOnInit: true,
|
||||
columnsHidden: []
|
||||
toggled: false
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
@@ -98,39 +80,13 @@
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.options.minWidth < 100 && this.options.resizable) {
|
||||
console.log("The minWidth when the resizable extension is active should be greater or equal than 100");
|
||||
this.options.minWidth = 100;
|
||||
}
|
||||
|
||||
var that = this,
|
||||
old = {
|
||||
width: $(window).width(),
|
||||
height: $(window).height()
|
||||
};
|
||||
|
||||
$(window).on('resize orientationchange',debounce(function (evt) {
|
||||
// reset view if height has only changed by at least the threshold.
|
||||
var height = $(this).height(),
|
||||
width = $(this).width();
|
||||
|
||||
if (Math.abs(old.height - height) > that.options.heightThreshold || old.width != width) {
|
||||
changeView(that, width, height);
|
||||
old = {
|
||||
width: width,
|
||||
height: height
|
||||
};
|
||||
}
|
||||
},200));
|
||||
var that = this;
|
||||
$(window).resize(function () {
|
||||
changeView(that, $(this).width(), $(this).height())
|
||||
});
|
||||
|
||||
if (this.options.checkOnInit) {
|
||||
var height = $(window).height(),
|
||||
width = $(window).width();
|
||||
changeView(this, width, height);
|
||||
old = {
|
||||
width: width,
|
||||
height: height
|
||||
};
|
||||
changeView(this, $(window).width(), $(window).height());
|
||||
}
|
||||
};
|
||||
}(jQuery);
|
||||
-7
@@ -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=function(b,c){b.options.columnsHidden.length>0&&a.each(b.columns,function(d,e){-1!==b.options.columnsHidden.indexOf(e.field)&&e.visible!==c&&b.toggleColumn(a.fn.bootstrapTable.utils.getFieldIndex(b.columns,e.field),c,!0)})},c=function(a){(a.options.height||a.options.showFooter)&&setTimeout(function(){a.resetView.call(a)},1)},d=function(a,b,d){a.options.minHeight?b<=a.options.minWidth&&d<=a.options.minHeight?e(a):b>a.options.minWidth&&d>a.options.minHeight&&f(a):b<=a.options.minWidth?e(a):b>a.options.minWidth&&f(a),c(a)},e=function(a){g(a,!1),b(a,!1)},f=function(a){g(a,!0),b(a,!0)},g=function(a,b){a.options.cardView=b,a.toggleView()},h=function(a,b){var c;return function(){var d=this,e=arguments,f=function(){c=null,a.apply(d,e)};clearTimeout(c),c=setTimeout(f,b)}};a.extend(a.fn.bootstrapTable.defaults,{mobileResponsive:!1,minWidth:562,minHeight:void 0,heightThreshold:100,checkOnInit:!0,columnsHidden:[]});var i=a.fn.bootstrapTable.Constructor,j=i.prototype.init;i.prototype.init=function(){if(j.apply(this,Array.prototype.slice.apply(arguments)),this.options.mobileResponsive&&this.options.minWidth){this.options.minWidth<100&&this.options.resizable&&(console.log("The minWidth when the resizable extension is active should be greater or equal than 100"),this.options.minWidth=100);var b=this,c={width:a(window).width(),height:a(window).height()};if(a(window).on("resize orientationchange",h(function(){var e=a(this).height(),f=a(this).width();(Math.abs(c.height-e)>b.options.heightThreshold||c.width!=f)&&(d(b,f,e),c={width:f,height:e})},200)),this.options.checkOnInit){var e=a(window).height(),f=a(window).width();d(this,f,e),c={width:f,height:e}}}}}(jQuery);
|
||||
Vendored
+2
-2
@@ -2,11 +2,11 @@
|
||||
.bootstrap-tree-table .treetable-expander {width:16px; height: 16px; display: inline-block; position: relative; cursor: pointer;}
|
||||
.bootstrap-tree-table .treetable-selected{background: #f5f5f5 !important;}
|
||||
.bootstrap-tree-table .treetable-table{border:0 !important;margin-bottom:0}
|
||||
.bootstrap-tree-table .treetable-table tbody {display:block;height:auto;overflow-y:auto;}
|
||||
.bootstrap-tree-table .treetable-table tbody {display:block;height:auto;}
|
||||
.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 tr :first-child{border-left:0 !important}
|
||||
.bootstrap-tree-table .treetable-tbody td{border: 0 !important;border-left:0px solid #e7eaec !important;border-bottom:1px solid #e7eaec!important;overflow: hidden; 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-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;}
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
$(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)});
|
||||
|
||||
|
||||
-1671
File diff suppressed because it is too large
Load Diff
+418
@@ -0,0 +1,418 @@
|
||||
/*!
|
||||
* Datetimepicker for Bootstrap
|
||||
*
|
||||
* Copyright 2012 Stefan Petre
|
||||
* Improvements by Andrew Rowls
|
||||
* Licensed under the Apache License v2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
*/
|
||||
.datetimepicker {
|
||||
padding: 4px;
|
||||
margin-top: 1px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
.datetimepicker-inline {
|
||||
width: 220px;
|
||||
}
|
||||
|
||||
.datetimepicker.datetimepicker-rtl {
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
.datetimepicker.datetimepicker-rtl table tr td span {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown, .datetimepicker-dropdown-left {
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
[class*=" datetimepicker-dropdown"]:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #cccccc;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
[class*=" datetimepicker-dropdown"]:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #ffffff;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
[class*=" datetimepicker-dropdown-top"]:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-top: 7px solid #cccccc;
|
||||
border-top-color: rgba(0, 0, 0, 0.2);
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
[class*=" datetimepicker-dropdown-top"]:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-top: 6px solid #ffffff;
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-bottom-left:before {
|
||||
top: -7px;
|
||||
right: 6px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-bottom-left:after {
|
||||
top: -6px;
|
||||
right: 7px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-bottom-right:before {
|
||||
top: -7px;
|
||||
left: 6px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-bottom-right:after {
|
||||
top: -6px;
|
||||
left: 7px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-top-left:before {
|
||||
bottom: -7px;
|
||||
right: 6px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-top-left:after {
|
||||
bottom: -6px;
|
||||
right: 7px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-top-right:before {
|
||||
bottom: -7px;
|
||||
left: 6px;
|
||||
}
|
||||
|
||||
.datetimepicker-dropdown-top-right:after {
|
||||
bottom: -6px;
|
||||
left: 7px;
|
||||
}
|
||||
|
||||
.datetimepicker > div {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.datetimepicker.minutes div.datetimepicker-minutes {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.datetimepicker.hours div.datetimepicker-hours {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.datetimepicker.days div.datetimepicker-days {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.datetimepicker.months div.datetimepicker-months {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.datetimepicker.years div.datetimepicker-years {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.datetimepicker table {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.datetimepicker td,
|
||||
.datetimepicker th {
|
||||
text-align: center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.table-striped .datetimepicker table tr td,
|
||||
.table-striped .datetimepicker table tr th {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.minute:hover {
|
||||
background: #eeeeee;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.hour:hover {
|
||||
background: #eeeeee;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.day:hover {
|
||||
background: #eeeeee;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.old,
|
||||
.datetimepicker table tr td.new {
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.disabled,
|
||||
.datetimepicker table tr td.disabled:hover {
|
||||
background: none;
|
||||
color: #999999;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.today,
|
||||
.datetimepicker table tr td.today:hover,
|
||||
.datetimepicker table tr td.today.disabled,
|
||||
.datetimepicker table tr td.today.disabled:hover {
|
||||
background-color: #fde19a;
|
||||
background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
|
||||
background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
|
||||
background-image: linear-gradient(to bottom, #fdd49a, #fdf59a);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
|
||||
border-color: #fdf59a #fdf59a #fbed50;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.today:hover,
|
||||
.datetimepicker table tr td.today:hover:hover,
|
||||
.datetimepicker table tr td.today.disabled:hover,
|
||||
.datetimepicker table tr td.today.disabled:hover:hover,
|
||||
.datetimepicker table tr td.today:active,
|
||||
.datetimepicker table tr td.today:hover:active,
|
||||
.datetimepicker table tr td.today.disabled:active,
|
||||
.datetimepicker table tr td.today.disabled:hover:active,
|
||||
.datetimepicker table tr td.today.active,
|
||||
.datetimepicker table tr td.today:hover.active,
|
||||
.datetimepicker table tr td.today.disabled.active,
|
||||
.datetimepicker table tr td.today.disabled:hover.active,
|
||||
.datetimepicker table tr td.today.disabled,
|
||||
.datetimepicker table tr td.today:hover.disabled,
|
||||
.datetimepicker table tr td.today.disabled.disabled,
|
||||
.datetimepicker table tr td.today.disabled:hover.disabled,
|
||||
.datetimepicker table tr td.today[disabled],
|
||||
.datetimepicker table tr td.today:hover[disabled],
|
||||
.datetimepicker table tr td.today.disabled[disabled],
|
||||
.datetimepicker table tr td.today.disabled:hover[disabled] {
|
||||
background-color: #fdf59a;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.today:active,
|
||||
.datetimepicker table tr td.today:hover:active,
|
||||
.datetimepicker table tr td.today.disabled:active,
|
||||
.datetimepicker table tr td.today.disabled:hover:active,
|
||||
.datetimepicker table tr td.today.active,
|
||||
.datetimepicker table tr td.today:hover.active,
|
||||
.datetimepicker table tr td.today.disabled.active,
|
||||
.datetimepicker table tr td.today.disabled:hover.active {
|
||||
background-color: #fbf069;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.active,
|
||||
.datetimepicker table tr td.active:hover,
|
||||
.datetimepicker table tr td.active.disabled,
|
||||
.datetimepicker table tr td.active.disabled:hover {
|
||||
background-color: #006dcc;
|
||||
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
||||
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: linear-gradient(to bottom, #0088cc, #0044cc);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
|
||||
border-color: #0044cc #0044cc #002a80;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
color: #ffffff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.active:hover,
|
||||
.datetimepicker table tr td.active:hover:hover,
|
||||
.datetimepicker table tr td.active.disabled:hover,
|
||||
.datetimepicker table tr td.active.disabled:hover:hover,
|
||||
.datetimepicker table tr td.active:active,
|
||||
.datetimepicker table tr td.active:hover:active,
|
||||
.datetimepicker table tr td.active.disabled:active,
|
||||
.datetimepicker table tr td.active.disabled:hover:active,
|
||||
.datetimepicker table tr td.active.active,
|
||||
.datetimepicker table tr td.active:hover.active,
|
||||
.datetimepicker table tr td.active.disabled.active,
|
||||
.datetimepicker table tr td.active.disabled:hover.active,
|
||||
.datetimepicker table tr td.active.disabled,
|
||||
.datetimepicker table tr td.active:hover.disabled,
|
||||
.datetimepicker table tr td.active.disabled.disabled,
|
||||
.datetimepicker table tr td.active.disabled:hover.disabled,
|
||||
.datetimepicker table tr td.active[disabled],
|
||||
.datetimepicker table tr td.active:hover[disabled],
|
||||
.datetimepicker table tr td.active.disabled[disabled],
|
||||
.datetimepicker table tr td.active.disabled:hover[disabled] {
|
||||
background-color: #0044cc;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td.active:active,
|
||||
.datetimepicker table tr td.active:hover:active,
|
||||
.datetimepicker table tr td.active.disabled:active,
|
||||
.datetimepicker table tr td.active.disabled:hover:active,
|
||||
.datetimepicker table tr td.active.active,
|
||||
.datetimepicker table tr td.active:hover.active,
|
||||
.datetimepicker table tr td.active.disabled.active,
|
||||
.datetimepicker table tr td.active.disabled:hover.active {
|
||||
background-color: #003399;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span {
|
||||
display: block;
|
||||
width: 23%;
|
||||
height: 54px;
|
||||
line-height: 54px;
|
||||
float: left;
|
||||
margin: 1%;
|
||||
cursor: pointer;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.datetimepicker .datetimepicker-hours span {
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
}
|
||||
|
||||
.datetimepicker .datetimepicker-hours table tr td span.hour_am,
|
||||
.datetimepicker .datetimepicker-hours table tr td span.hour_pm {
|
||||
width: 14.6%;
|
||||
}
|
||||
|
||||
.datetimepicker .datetimepicker-hours fieldset legend,
|
||||
.datetimepicker .datetimepicker-minutes fieldset legend {
|
||||
margin-bottom: inherit;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.datetimepicker .datetimepicker-minutes span {
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span.disabled,
|
||||
.datetimepicker table tr td span.disabled:hover {
|
||||
background: none;
|
||||
color: #999999;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span.active,
|
||||
.datetimepicker table tr td span.active:hover,
|
||||
.datetimepicker table tr td span.active.disabled,
|
||||
.datetimepicker table tr td span.active.disabled:hover {
|
||||
background-color: #006dcc;
|
||||
background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
|
||||
background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: -o-linear-gradient(top, #0088cc, #0044cc);
|
||||
background-image: linear-gradient(to bottom, #0088cc, #0044cc);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
|
||||
border-color: #0044cc #0044cc #002a80;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
color: #ffffff;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span.active:hover,
|
||||
.datetimepicker table tr td span.active:hover:hover,
|
||||
.datetimepicker table tr td span.active.disabled:hover,
|
||||
.datetimepicker table tr td span.active.disabled:hover:hover,
|
||||
.datetimepicker table tr td span.active:active,
|
||||
.datetimepicker table tr td span.active:hover:active,
|
||||
.datetimepicker table tr td span.active.disabled:active,
|
||||
.datetimepicker table tr td span.active.disabled:hover:active,
|
||||
.datetimepicker table tr td span.active.active,
|
||||
.datetimepicker table tr td span.active:hover.active,
|
||||
.datetimepicker table tr td span.active.disabled.active,
|
||||
.datetimepicker table tr td span.active.disabled:hover.active,
|
||||
.datetimepicker table tr td span.active.disabled,
|
||||
.datetimepicker table tr td span.active:hover.disabled,
|
||||
.datetimepicker table tr td span.active.disabled.disabled,
|
||||
.datetimepicker table tr td span.active.disabled:hover.disabled,
|
||||
.datetimepicker table tr td span.active[disabled],
|
||||
.datetimepicker table tr td span.active:hover[disabled],
|
||||
.datetimepicker table tr td span.active.disabled[disabled],
|
||||
.datetimepicker table tr td span.active.disabled:hover[disabled] {
|
||||
background-color: #0044cc;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span.active:active,
|
||||
.datetimepicker table tr td span.active:hover:active,
|
||||
.datetimepicker table tr td span.active.disabled:active,
|
||||
.datetimepicker table tr td span.active.disabled:hover:active,
|
||||
.datetimepicker table tr td span.active.active,
|
||||
.datetimepicker table tr td span.active:hover.active,
|
||||
.datetimepicker table tr td span.active.disabled.active,
|
||||
.datetimepicker table tr td span.active.disabled:hover.active {
|
||||
background-color: #003399;
|
||||
}
|
||||
|
||||
.datetimepicker table tr td span.old {
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.datetimepicker th.switch {
|
||||
width: 145px;
|
||||
}
|
||||
|
||||
.datetimepicker th span.glyphicon {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.datetimepicker thead tr:first-child th,
|
||||
.datetimepicker tfoot th {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.datetimepicker thead tr:first-child th:hover,
|
||||
.datetimepicker tfoot th:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
|
||||
.input-append.date .add-on i,
|
||||
.input-prepend.date .add-on i,
|
||||
.input-group.date .input-group-addon span {
|
||||
cursor: pointer;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
}
|
||||
+1978
File diff suppressed because it is too large
Load Diff
Vendored
+9
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
@@ -1,789 +0,0 @@
|
||||
/*!
|
||||
* Datepicker for Bootstrap
|
||||
*
|
||||
* Copyright 2012 Stefan Petre
|
||||
* Improvements by Andrew Rowls
|
||||
* Licensed under the Apache License v2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
*/
|
||||
.datepicker {
|
||||
padding: 4px;
|
||||
border-radius: 4px;
|
||||
direction: ltr;
|
||||
/*.dow {
|
||||
border-top: 1px solid #ddd !important;
|
||||
}*/
|
||||
}
|
||||
.datepicker-inline {
|
||||
width: 220px;
|
||||
}
|
||||
.datepicker.datepicker-rtl {
|
||||
direction: rtl;
|
||||
}
|
||||
.datepicker.datepicker-rtl table tr td span {
|
||||
float: right;
|
||||
}
|
||||
.datepicker-dropdown {
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
.datepicker-dropdown:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #ccc;
|
||||
border-top: 0;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
}
|
||||
.datepicker-dropdown:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #fff;
|
||||
border-top: 0;
|
||||
position: absolute;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-left:before {
|
||||
left: 6px;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-left:after {
|
||||
left: 7px;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-right:before {
|
||||
right: 6px;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-right:after {
|
||||
right: 7px;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-top:before {
|
||||
top: -7px;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-top:after {
|
||||
top: -6px;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-bottom:before {
|
||||
bottom: -7px;
|
||||
border-bottom: 0;
|
||||
border-top: 7px solid #999;
|
||||
}
|
||||
.datepicker-dropdown.datepicker-orient-bottom:after {
|
||||
bottom: -6px;
|
||||
border-bottom: 0;
|
||||
border-top: 6px solid #fff;
|
||||
}
|
||||
.datepicker > div {
|
||||
display: none;
|
||||
}
|
||||
.datepicker.days div.datepicker-days {
|
||||
display: block;
|
||||
}
|
||||
.datepicker.months div.datepicker-months {
|
||||
display: block;
|
||||
}
|
||||
.datepicker.years div.datepicker-years {
|
||||
display: block;
|
||||
}
|
||||
.datepicker table {
|
||||
margin: 0;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
.datepicker table tr td,
|
||||
.datepicker table tr th {
|
||||
text-align: center;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border-radius: 4px;
|
||||
border: none;
|
||||
}
|
||||
.table-striped .datepicker table tr td,
|
||||
.table-striped .datepicker table tr th {
|
||||
background-color: transparent;
|
||||
}
|
||||
.datepicker table tr td.day:hover,
|
||||
.datepicker table tr td.day.focused {
|
||||
background: #eeeeee;
|
||||
cursor: pointer;
|
||||
}
|
||||
.datepicker table tr td.old,
|
||||
.datepicker table tr td.new {
|
||||
color: #999999;
|
||||
}
|
||||
.datepicker table tr td.disabled,
|
||||
.datepicker table tr td.disabled:hover {
|
||||
background: none;
|
||||
color: #999999;
|
||||
cursor: default;
|
||||
}
|
||||
.datepicker table tr td.today,
|
||||
.datepicker table tr td.today:hover,
|
||||
.datepicker table tr td.today.disabled,
|
||||
.datepicker table tr td.today.disabled:hover {
|
||||
color: #000000;
|
||||
background-color: #ffdb99;
|
||||
border-color: #ffb733;
|
||||
}
|
||||
.datepicker table tr td.today:hover,
|
||||
.datepicker table tr td.today:hover:hover,
|
||||
.datepicker table tr td.today.disabled:hover,
|
||||
.datepicker table tr td.today.disabled:hover:hover,
|
||||
.datepicker table tr td.today:focus,
|
||||
.datepicker table tr td.today:hover:focus,
|
||||
.datepicker table tr td.today.disabled:focus,
|
||||
.datepicker table tr td.today.disabled:hover:focus,
|
||||
.datepicker table tr td.today:active,
|
||||
.datepicker table tr td.today:hover:active,
|
||||
.datepicker table tr td.today.disabled:active,
|
||||
.datepicker table tr td.today.disabled:hover:active,
|
||||
.datepicker table tr td.today.active,
|
||||
.datepicker table tr td.today:hover.active,
|
||||
.datepicker table tr td.today.disabled.active,
|
||||
.datepicker table tr td.today.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.today,
|
||||
.open .dropdown-toggle.datepicker table tr td.today:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.today.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
|
||||
color: #000000;
|
||||
background-color: #ffcd70;
|
||||
border-color: #f59e00;
|
||||
}
|
||||
.datepicker table tr td.today:active,
|
||||
.datepicker table tr td.today:hover:active,
|
||||
.datepicker table tr td.today.disabled:active,
|
||||
.datepicker table tr td.today.disabled:hover:active,
|
||||
.datepicker table tr td.today.active,
|
||||
.datepicker table tr td.today:hover.active,
|
||||
.datepicker table tr td.today.disabled.active,
|
||||
.datepicker table tr td.today.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.today,
|
||||
.open .dropdown-toggle.datepicker table tr td.today:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.today.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
|
||||
background-image: none;
|
||||
}
|
||||
.datepicker table tr td.today.disabled,
|
||||
.datepicker table tr td.today:hover.disabled,
|
||||
.datepicker table tr td.today.disabled.disabled,
|
||||
.datepicker table tr td.today.disabled:hover.disabled,
|
||||
.datepicker table tr td.today[disabled],
|
||||
.datepicker table tr td.today:hover[disabled],
|
||||
.datepicker table tr td.today.disabled[disabled],
|
||||
.datepicker table tr td.today.disabled:hover[disabled],
|
||||
fieldset[disabled] .datepicker table tr td.today,
|
||||
fieldset[disabled] .datepicker table tr td.today:hover,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover,
|
||||
.datepicker table tr td.today.disabled:hover,
|
||||
.datepicker table tr td.today:hover.disabled:hover,
|
||||
.datepicker table tr td.today.disabled.disabled:hover,
|
||||
.datepicker table tr td.today.disabled:hover.disabled:hover,
|
||||
.datepicker table tr td.today[disabled]:hover,
|
||||
.datepicker table tr td.today:hover[disabled]:hover,
|
||||
.datepicker table tr td.today.disabled[disabled]:hover,
|
||||
.datepicker table tr td.today.disabled:hover[disabled]:hover,
|
||||
fieldset[disabled] .datepicker table tr td.today:hover,
|
||||
fieldset[disabled] .datepicker table tr td.today:hover:hover,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover:hover,
|
||||
.datepicker table tr td.today.disabled:focus,
|
||||
.datepicker table tr td.today:hover.disabled:focus,
|
||||
.datepicker table tr td.today.disabled.disabled:focus,
|
||||
.datepicker table tr td.today.disabled:hover.disabled:focus,
|
||||
.datepicker table tr td.today[disabled]:focus,
|
||||
.datepicker table tr td.today:hover[disabled]:focus,
|
||||
.datepicker table tr td.today.disabled[disabled]:focus,
|
||||
.datepicker table tr td.today.disabled:hover[disabled]:focus,
|
||||
fieldset[disabled] .datepicker table tr td.today:focus,
|
||||
fieldset[disabled] .datepicker table tr td.today:hover:focus,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:focus,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover:focus,
|
||||
.datepicker table tr td.today.disabled:active,
|
||||
.datepicker table tr td.today:hover.disabled:active,
|
||||
.datepicker table tr td.today.disabled.disabled:active,
|
||||
.datepicker table tr td.today.disabled:hover.disabled:active,
|
||||
.datepicker table tr td.today[disabled]:active,
|
||||
.datepicker table tr td.today:hover[disabled]:active,
|
||||
.datepicker table tr td.today.disabled[disabled]:active,
|
||||
.datepicker table tr td.today.disabled:hover[disabled]:active,
|
||||
fieldset[disabled] .datepicker table tr td.today:active,
|
||||
fieldset[disabled] .datepicker table tr td.today:hover:active,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:active,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover:active,
|
||||
.datepicker table tr td.today.disabled.active,
|
||||
.datepicker table tr td.today:hover.disabled.active,
|
||||
.datepicker table tr td.today.disabled.disabled.active,
|
||||
.datepicker table tr td.today.disabled:hover.disabled.active,
|
||||
.datepicker table tr td.today[disabled].active,
|
||||
.datepicker table tr td.today:hover[disabled].active,
|
||||
.datepicker table tr td.today.disabled[disabled].active,
|
||||
.datepicker table tr td.today.disabled:hover[disabled].active,
|
||||
fieldset[disabled] .datepicker table tr td.today.active,
|
||||
fieldset[disabled] .datepicker table tr td.today:hover.active,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled.active,
|
||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover.active {
|
||||
background-color: #ffdb99;
|
||||
border-color: #ffb733;
|
||||
}
|
||||
.datepicker table tr td.today:hover:hover {
|
||||
color: #000;
|
||||
}
|
||||
.datepicker table tr td.today.active:hover {
|
||||
color: #fff;
|
||||
}
|
||||
.datepicker table tr td.range,
|
||||
.datepicker table tr td.range:hover,
|
||||
.datepicker table tr td.range.disabled,
|
||||
.datepicker table tr td.range.disabled:hover {
|
||||
background: #eeeeee;
|
||||
border-radius: 0;
|
||||
}
|
||||
.datepicker table tr td.range.today,
|
||||
.datepicker table tr td.range.today:hover,
|
||||
.datepicker table tr td.range.today.disabled,
|
||||
.datepicker table tr td.range.today.disabled:hover {
|
||||
color: #000000;
|
||||
background-color: #f7ca77;
|
||||
border-color: #f1a417;
|
||||
border-radius: 0;
|
||||
}
|
||||
.datepicker table tr td.range.today:hover,
|
||||
.datepicker table tr td.range.today:hover:hover,
|
||||
.datepicker table tr td.range.today.disabled:hover,
|
||||
.datepicker table tr td.range.today.disabled:hover:hover,
|
||||
.datepicker table tr td.range.today:focus,
|
||||
.datepicker table tr td.range.today:hover:focus,
|
||||
.datepicker table tr td.range.today.disabled:focus,
|
||||
.datepicker table tr td.range.today.disabled:hover:focus,
|
||||
.datepicker table tr td.range.today:active,
|
||||
.datepicker table tr td.range.today:hover:active,
|
||||
.datepicker table tr td.range.today.disabled:active,
|
||||
.datepicker table tr td.range.today.disabled:hover:active,
|
||||
.datepicker table tr td.range.today.active,
|
||||
.datepicker table tr td.range.today:hover.active,
|
||||
.datepicker table tr td.range.today.disabled.active,
|
||||
.datepicker table tr td.range.today.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
|
||||
color: #000000;
|
||||
background-color: #f4bb51;
|
||||
border-color: #bf800c;
|
||||
}
|
||||
.datepicker table tr td.range.today:active,
|
||||
.datepicker table tr td.range.today:hover:active,
|
||||
.datepicker table tr td.range.today.disabled:active,
|
||||
.datepicker table tr td.range.today.disabled:hover:active,
|
||||
.datepicker table tr td.range.today.active,
|
||||
.datepicker table tr td.range.today:hover.active,
|
||||
.datepicker table tr td.range.today.disabled.active,
|
||||
.datepicker table tr td.range.today.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
|
||||
background-image: none;
|
||||
}
|
||||
.datepicker table tr td.range.today.disabled,
|
||||
.datepicker table tr td.range.today:hover.disabled,
|
||||
.datepicker table tr td.range.today.disabled.disabled,
|
||||
.datepicker table tr td.range.today.disabled:hover.disabled,
|
||||
.datepicker table tr td.range.today[disabled],
|
||||
.datepicker table tr td.range.today:hover[disabled],
|
||||
.datepicker table tr td.range.today.disabled[disabled],
|
||||
.datepicker table tr td.range.today.disabled:hover[disabled],
|
||||
fieldset[disabled] .datepicker table tr td.range.today,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:hover,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,
|
||||
.datepicker table tr td.range.today.disabled:hover,
|
||||
.datepicker table tr td.range.today:hover.disabled:hover,
|
||||
.datepicker table tr td.range.today.disabled.disabled:hover,
|
||||
.datepicker table tr td.range.today.disabled:hover.disabled:hover,
|
||||
.datepicker table tr td.range.today[disabled]:hover,
|
||||
.datepicker table tr td.range.today:hover[disabled]:hover,
|
||||
.datepicker table tr td.range.today.disabled[disabled]:hover,
|
||||
.datepicker table tr td.range.today.disabled:hover[disabled]:hover,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:hover,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:hover:hover,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover,
|
||||
.datepicker table tr td.range.today.disabled:focus,
|
||||
.datepicker table tr td.range.today:hover.disabled:focus,
|
||||
.datepicker table tr td.range.today.disabled.disabled:focus,
|
||||
.datepicker table tr td.range.today.disabled:hover.disabled:focus,
|
||||
.datepicker table tr td.range.today[disabled]:focus,
|
||||
.datepicker table tr td.range.today:hover[disabled]:focus,
|
||||
.datepicker table tr td.range.today.disabled[disabled]:focus,
|
||||
.datepicker table tr td.range.today.disabled:hover[disabled]:focus,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:focus,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:hover:focus,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:focus,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus,
|
||||
.datepicker table tr td.range.today.disabled:active,
|
||||
.datepicker table tr td.range.today:hover.disabled:active,
|
||||
.datepicker table tr td.range.today.disabled.disabled:active,
|
||||
.datepicker table tr td.range.today.disabled:hover.disabled:active,
|
||||
.datepicker table tr td.range.today[disabled]:active,
|
||||
.datepicker table tr td.range.today:hover[disabled]:active,
|
||||
.datepicker table tr td.range.today.disabled[disabled]:active,
|
||||
.datepicker table tr td.range.today.disabled:hover[disabled]:active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:hover:active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active,
|
||||
.datepicker table tr td.range.today.disabled.active,
|
||||
.datepicker table tr td.range.today:hover.disabled.active,
|
||||
.datepicker table tr td.range.today.disabled.disabled.active,
|
||||
.datepicker table tr td.range.today.disabled:hover.disabled.active,
|
||||
.datepicker table tr td.range.today[disabled].active,
|
||||
.datepicker table tr td.range.today:hover[disabled].active,
|
||||
.datepicker table tr td.range.today.disabled[disabled].active,
|
||||
.datepicker table tr td.range.today.disabled:hover[disabled].active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today:hover.active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled.active,
|
||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active {
|
||||
background-color: #f7ca77;
|
||||
border-color: #f1a417;
|
||||
}
|
||||
.datepicker table tr td.selected,
|
||||
.datepicker table tr td.selected:hover,
|
||||
.datepicker table tr td.selected.disabled,
|
||||
.datepicker table tr td.selected.disabled:hover {
|
||||
color: #ffffff;
|
||||
background-color: #999999;
|
||||
border-color: #555555;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker table tr td.selected:hover,
|
||||
.datepicker table tr td.selected:hover:hover,
|
||||
.datepicker table tr td.selected.disabled:hover,
|
||||
.datepicker table tr td.selected.disabled:hover:hover,
|
||||
.datepicker table tr td.selected:focus,
|
||||
.datepicker table tr td.selected:hover:focus,
|
||||
.datepicker table tr td.selected.disabled:focus,
|
||||
.datepicker table tr td.selected.disabled:hover:focus,
|
||||
.datepicker table tr td.selected:active,
|
||||
.datepicker table tr td.selected:hover:active,
|
||||
.datepicker table tr td.selected.disabled:active,
|
||||
.datepicker table tr td.selected.disabled:hover:active,
|
||||
.datepicker table tr td.selected.active,
|
||||
.datepicker table tr td.selected:hover.active,
|
||||
.datepicker table tr td.selected.disabled.active,
|
||||
.datepicker table tr td.selected.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
|
||||
color: #ffffff;
|
||||
background-color: #858585;
|
||||
border-color: #373737;
|
||||
}
|
||||
.datepicker table tr td.selected:active,
|
||||
.datepicker table tr td.selected:hover:active,
|
||||
.datepicker table tr td.selected.disabled:active,
|
||||
.datepicker table tr td.selected.disabled:hover:active,
|
||||
.datepicker table tr td.selected.active,
|
||||
.datepicker table tr td.selected:hover.active,
|
||||
.datepicker table tr td.selected.disabled.active,
|
||||
.datepicker table tr td.selected.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
|
||||
background-image: none;
|
||||
}
|
||||
.datepicker table tr td.selected.disabled,
|
||||
.datepicker table tr td.selected:hover.disabled,
|
||||
.datepicker table tr td.selected.disabled.disabled,
|
||||
.datepicker table tr td.selected.disabled:hover.disabled,
|
||||
.datepicker table tr td.selected[disabled],
|
||||
.datepicker table tr td.selected:hover[disabled],
|
||||
.datepicker table tr td.selected.disabled[disabled],
|
||||
.datepicker table tr td.selected.disabled:hover[disabled],
|
||||
fieldset[disabled] .datepicker table tr td.selected,
|
||||
fieldset[disabled] .datepicker table tr td.selected:hover,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover,
|
||||
.datepicker table tr td.selected.disabled:hover,
|
||||
.datepicker table tr td.selected:hover.disabled:hover,
|
||||
.datepicker table tr td.selected.disabled.disabled:hover,
|
||||
.datepicker table tr td.selected.disabled:hover.disabled:hover,
|
||||
.datepicker table tr td.selected[disabled]:hover,
|
||||
.datepicker table tr td.selected:hover[disabled]:hover,
|
||||
.datepicker table tr td.selected.disabled[disabled]:hover,
|
||||
.datepicker table tr td.selected.disabled:hover[disabled]:hover,
|
||||
fieldset[disabled] .datepicker table tr td.selected:hover,
|
||||
fieldset[disabled] .datepicker table tr td.selected:hover:hover,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover,
|
||||
.datepicker table tr td.selected.disabled:focus,
|
||||
.datepicker table tr td.selected:hover.disabled:focus,
|
||||
.datepicker table tr td.selected.disabled.disabled:focus,
|
||||
.datepicker table tr td.selected.disabled:hover.disabled:focus,
|
||||
.datepicker table tr td.selected[disabled]:focus,
|
||||
.datepicker table tr td.selected:hover[disabled]:focus,
|
||||
.datepicker table tr td.selected.disabled[disabled]:focus,
|
||||
.datepicker table tr td.selected.disabled:hover[disabled]:focus,
|
||||
fieldset[disabled] .datepicker table tr td.selected:focus,
|
||||
fieldset[disabled] .datepicker table tr td.selected:hover:focus,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:focus,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus,
|
||||
.datepicker table tr td.selected.disabled:active,
|
||||
.datepicker table tr td.selected:hover.disabled:active,
|
||||
.datepicker table tr td.selected.disabled.disabled:active,
|
||||
.datepicker table tr td.selected.disabled:hover.disabled:active,
|
||||
.datepicker table tr td.selected[disabled]:active,
|
||||
.datepicker table tr td.selected:hover[disabled]:active,
|
||||
.datepicker table tr td.selected.disabled[disabled]:active,
|
||||
.datepicker table tr td.selected.disabled:hover[disabled]:active,
|
||||
fieldset[disabled] .datepicker table tr td.selected:active,
|
||||
fieldset[disabled] .datepicker table tr td.selected:hover:active,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:active,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover:active,
|
||||
.datepicker table tr td.selected.disabled.active,
|
||||
.datepicker table tr td.selected:hover.disabled.active,
|
||||
.datepicker table tr td.selected.disabled.disabled.active,
|
||||
.datepicker table tr td.selected.disabled:hover.disabled.active,
|
||||
.datepicker table tr td.selected[disabled].active,
|
||||
.datepicker table tr td.selected:hover[disabled].active,
|
||||
.datepicker table tr td.selected.disabled[disabled].active,
|
||||
.datepicker table tr td.selected.disabled:hover[disabled].active,
|
||||
fieldset[disabled] .datepicker table tr td.selected.active,
|
||||
fieldset[disabled] .datepicker table tr td.selected:hover.active,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled.active,
|
||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active {
|
||||
background-color: #999999;
|
||||
border-color: #555555;
|
||||
}
|
||||
.datepicker table tr td.active,
|
||||
.datepicker table tr td.active:hover,
|
||||
.datepicker table tr td.active.disabled,
|
||||
.datepicker table tr td.active.disabled:hover {
|
||||
color: #ffffff;
|
||||
background-color: #428bca;
|
||||
border-color: #357ebd;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker table tr td.active:hover,
|
||||
.datepicker table tr td.active:hover:hover,
|
||||
.datepicker table tr td.active.disabled:hover,
|
||||
.datepicker table tr td.active.disabled:hover:hover,
|
||||
.datepicker table tr td.active:focus,
|
||||
.datepicker table tr td.active:hover:focus,
|
||||
.datepicker table tr td.active.disabled:focus,
|
||||
.datepicker table tr td.active.disabled:hover:focus,
|
||||
.datepicker table tr td.active:active,
|
||||
.datepicker table tr td.active:hover:active,
|
||||
.datepicker table tr td.active.disabled:active,
|
||||
.datepicker table tr td.active.disabled:hover:active,
|
||||
.datepicker table tr td.active.active,
|
||||
.datepicker table tr td.active:hover.active,
|
||||
.datepicker table tr td.active.disabled.active,
|
||||
.datepicker table tr td.active.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.active:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.active.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
|
||||
color: #ffffff;
|
||||
background-color: #3276b1;
|
||||
border-color: #285e8e;
|
||||
}
|
||||
.datepicker table tr td.active:active,
|
||||
.datepicker table tr td.active:hover:active,
|
||||
.datepicker table tr td.active.disabled:active,
|
||||
.datepicker table tr td.active.disabled:hover:active,
|
||||
.datepicker table tr td.active.active,
|
||||
.datepicker table tr td.active:hover.active,
|
||||
.datepicker table tr td.active.disabled.active,
|
||||
.datepicker table tr td.active.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.active,
|
||||
.open .dropdown-toggle.datepicker table tr td.active:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td.active.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
|
||||
background-image: none;
|
||||
}
|
||||
.datepicker table tr td.active.disabled,
|
||||
.datepicker table tr td.active:hover.disabled,
|
||||
.datepicker table tr td.active.disabled.disabled,
|
||||
.datepicker table tr td.active.disabled:hover.disabled,
|
||||
.datepicker table tr td.active[disabled],
|
||||
.datepicker table tr td.active:hover[disabled],
|
||||
.datepicker table tr td.active.disabled[disabled],
|
||||
.datepicker table tr td.active.disabled:hover[disabled],
|
||||
fieldset[disabled] .datepicker table tr td.active,
|
||||
fieldset[disabled] .datepicker table tr td.active:hover,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover,
|
||||
.datepicker table tr td.active.disabled:hover,
|
||||
.datepicker table tr td.active:hover.disabled:hover,
|
||||
.datepicker table tr td.active.disabled.disabled:hover,
|
||||
.datepicker table tr td.active.disabled:hover.disabled:hover,
|
||||
.datepicker table tr td.active[disabled]:hover,
|
||||
.datepicker table tr td.active:hover[disabled]:hover,
|
||||
.datepicker table tr td.active.disabled[disabled]:hover,
|
||||
.datepicker table tr td.active.disabled:hover[disabled]:hover,
|
||||
fieldset[disabled] .datepicker table tr td.active:hover,
|
||||
fieldset[disabled] .datepicker table tr td.active:hover:hover,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover:hover,
|
||||
.datepicker table tr td.active.disabled:focus,
|
||||
.datepicker table tr td.active:hover.disabled:focus,
|
||||
.datepicker table tr td.active.disabled.disabled:focus,
|
||||
.datepicker table tr td.active.disabled:hover.disabled:focus,
|
||||
.datepicker table tr td.active[disabled]:focus,
|
||||
.datepicker table tr td.active:hover[disabled]:focus,
|
||||
.datepicker table tr td.active.disabled[disabled]:focus,
|
||||
.datepicker table tr td.active.disabled:hover[disabled]:focus,
|
||||
fieldset[disabled] .datepicker table tr td.active:focus,
|
||||
fieldset[disabled] .datepicker table tr td.active:hover:focus,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:focus,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover:focus,
|
||||
.datepicker table tr td.active.disabled:active,
|
||||
.datepicker table tr td.active:hover.disabled:active,
|
||||
.datepicker table tr td.active.disabled.disabled:active,
|
||||
.datepicker table tr td.active.disabled:hover.disabled:active,
|
||||
.datepicker table tr td.active[disabled]:active,
|
||||
.datepicker table tr td.active:hover[disabled]:active,
|
||||
.datepicker table tr td.active.disabled[disabled]:active,
|
||||
.datepicker table tr td.active.disabled:hover[disabled]:active,
|
||||
fieldset[disabled] .datepicker table tr td.active:active,
|
||||
fieldset[disabled] .datepicker table tr td.active:hover:active,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:active,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover:active,
|
||||
.datepicker table tr td.active.disabled.active,
|
||||
.datepicker table tr td.active:hover.disabled.active,
|
||||
.datepicker table tr td.active.disabled.disabled.active,
|
||||
.datepicker table tr td.active.disabled:hover.disabled.active,
|
||||
.datepicker table tr td.active[disabled].active,
|
||||
.datepicker table tr td.active:hover[disabled].active,
|
||||
.datepicker table tr td.active.disabled[disabled].active,
|
||||
.datepicker table tr td.active.disabled:hover[disabled].active,
|
||||
fieldset[disabled] .datepicker table tr td.active.active,
|
||||
fieldset[disabled] .datepicker table tr td.active:hover.active,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled.active,
|
||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover.active {
|
||||
background-color: #428bca;
|
||||
border-color: #357ebd;
|
||||
}
|
||||
.datepicker table tr td span {
|
||||
display: block;
|
||||
width: 23%;
|
||||
height: 54px;
|
||||
line-height: 54px;
|
||||
float: left;
|
||||
margin: 1%;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.datepicker table tr td span:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.datepicker table tr td span.disabled,
|
||||
.datepicker table tr td span.disabled:hover {
|
||||
background: none;
|
||||
color: #999999;
|
||||
cursor: default;
|
||||
}
|
||||
.datepicker table tr td span.active,
|
||||
.datepicker table tr td span.active:hover,
|
||||
.datepicker table tr td span.active.disabled,
|
||||
.datepicker table tr td span.active.disabled:hover {
|
||||
color: #ffffff;
|
||||
background-color: #428bca;
|
||||
border-color: #357ebd;
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.datepicker table tr td span.active:hover,
|
||||
.datepicker table tr td span.active:hover:hover,
|
||||
.datepicker table tr td span.active.disabled:hover,
|
||||
.datepicker table tr td span.active.disabled:hover:hover,
|
||||
.datepicker table tr td span.active:focus,
|
||||
.datepicker table tr td span.active:hover:focus,
|
||||
.datepicker table tr td span.active.disabled:focus,
|
||||
.datepicker table tr td span.active.disabled:hover:focus,
|
||||
.datepicker table tr td span.active:active,
|
||||
.datepicker table tr td span.active:hover:active,
|
||||
.datepicker table tr td span.active.disabled:active,
|
||||
.datepicker table tr td span.active.disabled:hover:active,
|
||||
.datepicker table tr td span.active.active,
|
||||
.datepicker table tr td span.active:hover.active,
|
||||
.datepicker table tr td span.active.disabled.active,
|
||||
.datepicker table tr td span.active.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
|
||||
color: #ffffff;
|
||||
background-color: #3276b1;
|
||||
border-color: #285e8e;
|
||||
}
|
||||
.datepicker table tr td span.active:active,
|
||||
.datepicker table tr td span.active:hover:active,
|
||||
.datepicker table tr td span.active.disabled:active,
|
||||
.datepicker table tr td span.active.disabled:hover:active,
|
||||
.datepicker table tr td span.active.active,
|
||||
.datepicker table tr td span.active:hover.active,
|
||||
.datepicker table tr td span.active.disabled.active,
|
||||
.datepicker table tr td span.active.disabled:hover.active,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active:hover,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active.disabled,
|
||||
.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
|
||||
background-image: none;
|
||||
}
|
||||
.datepicker table tr td span.active.disabled,
|
||||
.datepicker table tr td span.active:hover.disabled,
|
||||
.datepicker table tr td span.active.disabled.disabled,
|
||||
.datepicker table tr td span.active.disabled:hover.disabled,
|
||||
.datepicker table tr td span.active[disabled],
|
||||
.datepicker table tr td span.active:hover[disabled],
|
||||
.datepicker table tr td span.active.disabled[disabled],
|
||||
.datepicker table tr td span.active.disabled:hover[disabled],
|
||||
fieldset[disabled] .datepicker table tr td span.active,
|
||||
fieldset[disabled] .datepicker table tr td span.active:hover,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
|
||||
.datepicker table tr td span.active.disabled:hover,
|
||||
.datepicker table tr td span.active:hover.disabled:hover,
|
||||
.datepicker table tr td span.active.disabled.disabled:hover,
|
||||
.datepicker table tr td span.active.disabled:hover.disabled:hover,
|
||||
.datepicker table tr td span.active[disabled]:hover,
|
||||
.datepicker table tr td span.active:hover[disabled]:hover,
|
||||
.datepicker table tr td span.active.disabled[disabled]:hover,
|
||||
.datepicker table tr td span.active.disabled:hover[disabled]:hover,
|
||||
fieldset[disabled] .datepicker table tr td span.active:hover,
|
||||
fieldset[disabled] .datepicker table tr td span.active:hover:hover,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,
|
||||
.datepicker table tr td span.active.disabled:focus,
|
||||
.datepicker table tr td span.active:hover.disabled:focus,
|
||||
.datepicker table tr td span.active.disabled.disabled:focus,
|
||||
.datepicker table tr td span.active.disabled:hover.disabled:focus,
|
||||
.datepicker table tr td span.active[disabled]:focus,
|
||||
.datepicker table tr td span.active:hover[disabled]:focus,
|
||||
.datepicker table tr td span.active.disabled[disabled]:focus,
|
||||
.datepicker table tr td span.active.disabled:hover[disabled]:focus,
|
||||
fieldset[disabled] .datepicker table tr td span.active:focus,
|
||||
fieldset[disabled] .datepicker table tr td span.active:hover:focus,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:focus,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,
|
||||
.datepicker table tr td span.active.disabled:active,
|
||||
.datepicker table tr td span.active:hover.disabled:active,
|
||||
.datepicker table tr td span.active.disabled.disabled:active,
|
||||
.datepicker table tr td span.active.disabled:hover.disabled:active,
|
||||
.datepicker table tr td span.active[disabled]:active,
|
||||
.datepicker table tr td span.active:hover[disabled]:active,
|
||||
.datepicker table tr td span.active.disabled[disabled]:active,
|
||||
.datepicker table tr td span.active.disabled:hover[disabled]:active,
|
||||
fieldset[disabled] .datepicker table tr td span.active:active,
|
||||
fieldset[disabled] .datepicker table tr td span.active:hover:active,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:active,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:active,
|
||||
.datepicker table tr td span.active.disabled.active,
|
||||
.datepicker table tr td span.active:hover.disabled.active,
|
||||
.datepicker table tr td span.active.disabled.disabled.active,
|
||||
.datepicker table tr td span.active.disabled:hover.disabled.active,
|
||||
.datepicker table tr td span.active[disabled].active,
|
||||
.datepicker table tr td span.active:hover[disabled].active,
|
||||
.datepicker table tr td span.active.disabled[disabled].active,
|
||||
.datepicker table tr td span.active.disabled:hover[disabled].active,
|
||||
fieldset[disabled] .datepicker table tr td span.active.active,
|
||||
fieldset[disabled] .datepicker table tr td span.active:hover.active,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled.active,
|
||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active {
|
||||
background-color: #428bca;
|
||||
border-color: #357ebd;
|
||||
}
|
||||
.datepicker table tr td span.old,
|
||||
.datepicker table tr td span.new {
|
||||
color: #999999;
|
||||
}
|
||||
.datepicker th.datepicker-switch {
|
||||
width: 145px;
|
||||
}
|
||||
.datepicker thead tr:first-child th,
|
||||
.datepicker tfoot tr th {
|
||||
cursor: pointer;
|
||||
}
|
||||
.datepicker thead tr:first-child th:hover,
|
||||
.datepicker tfoot tr th:hover {
|
||||
background: #eeeeee;
|
||||
}
|
||||
.datepicker .cw {
|
||||
font-size: 10px;
|
||||
width: 12px;
|
||||
padding: 0 2px 0 5px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.datepicker thead tr:first-child th.cw {
|
||||
cursor: default;
|
||||
background-color: transparent;
|
||||
}
|
||||
.input-group.date .input-group-addon i {
|
||||
cursor: pointer;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
.input-daterange input {
|
||||
text-align: center;
|
||||
}
|
||||
.input-daterange input:first-child {
|
||||
border-radius: 3px 0 0 3px;
|
||||
}
|
||||
.input-daterange input:last-child {
|
||||
border-radius: 0 3px 3px 0;
|
||||
}
|
||||
.input-daterange .input-group-addon {
|
||||
width: auto;
|
||||
min-width: 16px;
|
||||
padding: 4px 5px;
|
||||
font-weight: normal;
|
||||
line-height: 1.428571429;
|
||||
text-align: center;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
vertical-align: middle;
|
||||
background-color: #eeeeee;
|
||||
border-width: 1px 0;
|
||||
margin-left: -5px;
|
||||
margin-right: -5px;
|
||||
}
|
||||
.datepicker.dropdown-menu {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
z-index: 1000;
|
||||
float: left;
|
||||
display: none;
|
||||
min-width: 160px;
|
||||
list-style: none;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #ccc;
|
||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||
border-radius: 5px;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
*border-right-width: 2px;
|
||||
*border-bottom-width: 2px;
|
||||
color: #333333;
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
line-height: 1.428571429;
|
||||
}
|
||||
.datepicker.dropdown-menu th,
|
||||
.datepicker.dropdown-menu td {
|
||||
padding: 4px 5px;
|
||||
}
|
||||
@@ -1,9 +1,7 @@
|
||||
/**
|
||||
* @name jQuery FullScreen Plugin
|
||||
* @author Martin Angelov, Morten Sjøgren
|
||||
* @version 1.2
|
||||
* @url http://tutorialzine.com/2012/02/enhance-your-website-fullscreen-api/
|
||||
* @license MIT License
|
||||
* 基于jQuery FullScreen修改
|
||||
* 新增支持IE全屏显示
|
||||
* Copyright (c) 2019 ruoyi
|
||||
*/
|
||||
|
||||
/*jshint browser: true, jquery: true */
|
||||
@@ -15,6 +13,7 @@
|
||||
var doc = document.documentElement;
|
||||
|
||||
return ('requestFullscreen' in doc) ||
|
||||
('msRequestFullscreen' in doc) ||
|
||||
('mozRequestFullScreen' in doc && document.mozFullScreenEnabled) ||
|
||||
('webkitRequestFullScreen' in doc);
|
||||
}
|
||||
@@ -26,6 +25,8 @@
|
||||
elem.mozRequestFullScreen();
|
||||
} else if (elem.webkitRequestFullScreen) {
|
||||
elem.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
|
||||
} else if (elem.msRequestFullscreen) {
|
||||
elem.msRequestFullscreen();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +34,7 @@
|
||||
return document.fullscreen ||
|
||||
document.mozFullScreen ||
|
||||
document.webkitIsFullScreen ||
|
||||
document.msFullscreenElement ||
|
||||
false;
|
||||
}
|
||||
|
||||
@@ -43,6 +45,8 @@
|
||||
document.mozCancelFullScreen();
|
||||
} else if (document.webkitCancelFullScreen) {
|
||||
document.webkitCancelFullScreen();
|
||||
} else if (document.msExitFullscreen) {
|
||||
document.msExitFullscreen();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+18
-6091
File diff suppressed because one or more lines are too long
@@ -0,0 +1,50 @@
|
||||
@charset "UTF-8";
|
||||
.jsonview {
|
||||
font-family: monospace;
|
||||
font-size: 1.1em;
|
||||
white-space: pre-wrap; }
|
||||
.jsonview .prop {
|
||||
font-weight: bold; }
|
||||
.jsonview .null {
|
||||
color: red; }
|
||||
.jsonview .bool {
|
||||
color: blue; }
|
||||
.jsonview .num {
|
||||
color: blue; }
|
||||
.jsonview .string {
|
||||
color: green;
|
||||
white-space: pre-wrap; }
|
||||
.jsonview .string.multiline {
|
||||
display: inline-block;
|
||||
vertical-align: text-top; }
|
||||
.jsonview .collapser {
|
||||
position: absolute;
|
||||
left: -1em;
|
||||
cursor: pointer; }
|
||||
.jsonview .collapsible {
|
||||
transition: height 1.2s;
|
||||
transition: width 1.2s; }
|
||||
.jsonview .collapsible.collapsed {
|
||||
height: .8em;
|
||||
width: 1em;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
margin: 0; }
|
||||
.jsonview .collapsible.collapsed:before {
|
||||
content: "…";
|
||||
width: 1em;
|
||||
margin-left: .2em; }
|
||||
.jsonview .collapser.collapsed {
|
||||
transform: rotate(0deg); }
|
||||
.jsonview .q {
|
||||
display: inline-block;
|
||||
width: 0px;
|
||||
color: transparent; }
|
||||
.jsonview li {
|
||||
position: relative; }
|
||||
.jsonview ul {
|
||||
list-style: none;
|
||||
margin: 0 0 0 2em;
|
||||
padding: 0; }
|
||||
.jsonview h1 {
|
||||
font-size: 1.2em; }
|
||||
@@ -0,0 +1,250 @@
|
||||
(function(jQuery) {
|
||||
var $, Collapser, JSONFormatter, JSONView;
|
||||
JSONFormatter = (function() {
|
||||
function JSONFormatter(options) {
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
JSONFormatter.prototype.htmlEncode = function(html) {
|
||||
if (html !== null) {
|
||||
return html.toString().replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
|
||||
JSONFormatter.prototype.jsString = function(s) {
|
||||
s = JSON.stringify(s).slice(1, -1);
|
||||
return this.htmlEncode(s);
|
||||
};
|
||||
|
||||
JSONFormatter.prototype.decorateWithSpan = function(value, className) {
|
||||
return "<span class=\"" + className + "\">" + (this.htmlEncode(value)) + "</span>";
|
||||
};
|
||||
|
||||
JSONFormatter.prototype.valueToHTML = function(value, level) {
|
||||
var valueType;
|
||||
if (level == null) {
|
||||
level = 0;
|
||||
}
|
||||
valueType = Object.prototype.toString.call(value).match(/\s(.+)]/)[1].toLowerCase();
|
||||
return this["" + valueType + "ToHTML"].call(this, value, level);
|
||||
};
|
||||
|
||||
JSONFormatter.prototype.nullToHTML = function(value) {
|
||||
return this.decorateWithSpan('null', 'null');
|
||||
};
|
||||
|
||||
JSONFormatter.prototype.numberToHTML = function(value) {
|
||||
return this.decorateWithSpan(value, 'num');
|
||||
};
|
||||
|
||||
JSONFormatter.prototype.stringToHTML = function(value) {
|
||||
var multilineClass, newLinePattern;
|
||||
if (/^(http|https|file):\/\/[^\s]+$/i.test(value)) {
|
||||
return "<a href=\"" + (this.htmlEncode(value)) + "\"><span class=\"q\">\"</span>" + (this.jsString(value)) + "<span class=\"q\">\"</span></a>";
|
||||
} else {
|
||||
multilineClass = '';
|
||||
value = this.jsString(value);
|
||||
if (this.options.nl2br) {
|
||||
newLinePattern = /([^>\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)/g;
|
||||
if (newLinePattern.test(value)) {
|
||||
multilineClass = ' multiline';
|
||||
value = (value + '').replace(newLinePattern, '$1' + '<br />');
|
||||
}
|
||||
}
|
||||
return "<span class=\"string" + multilineClass + "\">\"" + value + "\"</span>";
|
||||
}
|
||||
};
|
||||
|
||||
JSONFormatter.prototype.booleanToHTML = function(value) {
|
||||
return this.decorateWithSpan(value, 'bool');
|
||||
};
|
||||
|
||||
JSONFormatter.prototype.arrayToHTML = function(array, level) {
|
||||
var collapsible, hasContents, index, numProps, output, value, _i, _len;
|
||||
if (level == null) {
|
||||
level = 0;
|
||||
}
|
||||
hasContents = false;
|
||||
output = '';
|
||||
numProps = array.length;
|
||||
for (index = _i = 0, _len = array.length; _i < _len; index = ++_i) {
|
||||
value = array[index];
|
||||
hasContents = true;
|
||||
output += '<li>' + this.valueToHTML(value, level + 1);
|
||||
if (numProps > 1) {
|
||||
output += ',';
|
||||
}
|
||||
output += '</li>';
|
||||
numProps--;
|
||||
}
|
||||
if (hasContents) {
|
||||
collapsible = level === 0 ? '' : ' collapsible';
|
||||
return "[<ul class=\"array level" + level + collapsible + "\">" + output + "</ul>]";
|
||||
} else {
|
||||
return '[ ]';
|
||||
}
|
||||
};
|
||||
|
||||
JSONFormatter.prototype.objectToHTML = function(object, level) {
|
||||
var collapsible, hasContents, numProps, output, prop, value;
|
||||
if (level == null) {
|
||||
level = 0;
|
||||
}
|
||||
hasContents = false;
|
||||
output = '';
|
||||
numProps = 0;
|
||||
for (prop in object) {
|
||||
numProps++;
|
||||
}
|
||||
for (prop in object) {
|
||||
value = object[prop];
|
||||
hasContents = true;
|
||||
output += "<li><span class=\"prop\"><span class=\"q\">\"</span>" + (this.jsString(prop)) + "<span class=\"q\">\"</span></span>: " + (this.valueToHTML(value, level + 1));
|
||||
if (numProps > 1) {
|
||||
output += ',';
|
||||
}
|
||||
output += '</li>';
|
||||
numProps--;
|
||||
}
|
||||
if (hasContents) {
|
||||
collapsible = level === 0 ? '' : ' collapsible';
|
||||
return "{<ul class=\"obj level" + level + collapsible + "\">" + output + "</ul>}";
|
||||
} else {
|
||||
return '{ }';
|
||||
}
|
||||
};
|
||||
|
||||
JSONFormatter.prototype.jsonToHTML = function(json) {
|
||||
return "<div class=\"jsonview\">" + (this.valueToHTML(json)) + "</div>";
|
||||
};
|
||||
|
||||
return JSONFormatter;
|
||||
|
||||
})();
|
||||
(typeof module !== "undefined" && module !== null) && (module.exports = JSONFormatter);
|
||||
Collapser = {
|
||||
bindEvent: function(item, collapsed) {
|
||||
var collapser;
|
||||
collapser = document.createElement('div');
|
||||
collapser.className = 'collapser';
|
||||
collapser.innerHTML = collapsed ? '+' : '-';
|
||||
collapser.addEventListener('click', (function(_this) {
|
||||
return function(event) {
|
||||
return _this.toggle(event.target);
|
||||
};
|
||||
})(this));
|
||||
item.insertBefore(collapser, item.firstChild);
|
||||
if (collapsed) {
|
||||
return this.collapse(collapser);
|
||||
}
|
||||
},
|
||||
expand: function(collapser) {
|
||||
var ellipsis, target;
|
||||
target = this.collapseTarget(collapser);
|
||||
ellipsis = target.parentNode.getElementsByClassName('ellipsis')[0];
|
||||
target.parentNode.removeChild(ellipsis);
|
||||
target.style.display = '';
|
||||
return collapser.innerHTML = '-';
|
||||
},
|
||||
collapse: function(collapser) {
|
||||
var ellipsis, target;
|
||||
target = this.collapseTarget(collapser);
|
||||
target.style.display = 'none';
|
||||
ellipsis = document.createElement('span');
|
||||
ellipsis.className = 'ellipsis';
|
||||
ellipsis.innerHTML = ' … ';
|
||||
target.parentNode.insertBefore(ellipsis, target);
|
||||
return collapser.innerHTML = '+';
|
||||
},
|
||||
toggle: function(collapser) {
|
||||
var target;
|
||||
target = this.collapseTarget(collapser);
|
||||
if (target.style.display === 'none') {
|
||||
return this.expand(collapser);
|
||||
} else {
|
||||
return this.collapse(collapser);
|
||||
}
|
||||
},
|
||||
collapseTarget: function(collapser) {
|
||||
var target, targets;
|
||||
targets = collapser.parentNode.getElementsByClassName('collapsible');
|
||||
if (!targets.length) {
|
||||
return;
|
||||
}
|
||||
return target = targets[0];
|
||||
}
|
||||
};
|
||||
$ = jQuery;
|
||||
JSONView = {
|
||||
collapse: function(el) {
|
||||
if (el.innerHTML === '-') {
|
||||
return Collapser.collapse(el);
|
||||
}
|
||||
},
|
||||
expand: function(el) {
|
||||
if (el.innerHTML === '+') {
|
||||
return Collapser.expand(el);
|
||||
}
|
||||
},
|
||||
toggle: function(el) {
|
||||
return Collapser.toggle(el);
|
||||
}
|
||||
};
|
||||
return $.fn.JSONView = function() {
|
||||
var args, defaultOptions, formatter, json, method, options, outputDoc;
|
||||
args = arguments;
|
||||
if (JSONView[args[0]] != null) {
|
||||
method = args[0];
|
||||
return this.each(function() {
|
||||
var $this, level;
|
||||
$this = $(this);
|
||||
if (args[1] != null) {
|
||||
level = args[1];
|
||||
return $this.find(".jsonview .collapsible.level" + level).siblings('.collapser').each(function() {
|
||||
return JSONView[method](this);
|
||||
});
|
||||
} else {
|
||||
return $this.find('.jsonview > ul > li > .collapsible').siblings('.collapser').each(function() {
|
||||
return JSONView[method](this);
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
json = args[0];
|
||||
options = args[1] || {};
|
||||
defaultOptions = {
|
||||
collapsed: false,
|
||||
nl2br: false
|
||||
};
|
||||
options = $.extend(defaultOptions, options);
|
||||
formatter = new JSONFormatter({
|
||||
nl2br: options.nl2br
|
||||
});
|
||||
if (Object.prototype.toString.call(json) === '[object String]') {
|
||||
json = JSON.parse(json);
|
||||
}
|
||||
outputDoc = formatter.jsonToHTML(json);
|
||||
return this.each(function() {
|
||||
var $this, item, items, _i, _len, _results;
|
||||
$this = $(this);
|
||||
$this.html(outputDoc);
|
||||
items = $this[0].getElementsByClassName('collapsible');
|
||||
_results = [];
|
||||
for (_i = 0, _len = items.length; _i < _len; _i++) {
|
||||
item = items[_i];
|
||||
if (item.parentNode.nodeName === 'LI') {
|
||||
_results.push(Collapser.bindEvent(item.parentNode, options.collapsed));
|
||||
} else {
|
||||
_results.push(void 0);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
});
|
||||
}
|
||||
};
|
||||
})(jQuery);
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
|
After Width: | Height: | Size: 7.4 KiB |
@@ -0,0 +1,138 @@
|
||||
/**
|
||||
* layer皮肤
|
||||
* Copyright (c) 2019 ruoyi
|
||||
*/
|
||||
html #layui_layer_skinmoonstylecss {
|
||||
display: none;
|
||||
position: absolute;
|
||||
width: 1989px;
|
||||
}
|
||||
|
||||
body .layer-ext-moon[type="dialog"] {
|
||||
min-width: 320px;
|
||||
}
|
||||
body .layer-ext-moon-msg[type="dialog"]{min-width:200px;}
|
||||
body .layer-ext-moon .layui-layer-title {
|
||||
background: #F8F8F8;
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
body .layer-ext-moon .layui-layer-content .layui-layer-ico {
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
top:18.5px;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-ico0 {
|
||||
background: url(default.png) no-repeat -96px 0;
|
||||
;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-ico1 {
|
||||
background: url(default.png) no-repeat -224px 0;
|
||||
;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-ico2 {
|
||||
background: url(default.png) no-repeat -192px 0;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-ico3 {
|
||||
background: url(default.png) no-repeat -160px 0;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-ico4 {
|
||||
background: url(default.png) no-repeat -320px 0;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-ico5 {
|
||||
background: url(default.png) no-repeat -288px 0;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-ico6 {
|
||||
background: url(default.png) -256px 0;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-ico7 {
|
||||
background: url(default.png) no-repeat -128px 0;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-setwin {
|
||||
top: 15px;
|
||||
right: 15px;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-setwin a {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-setwin .layui-layer-min cite:hover {
|
||||
background-color: #56abe4;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-setwin .layui-layer-max {
|
||||
background: url(default.png) no-repeat -80px 0;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-setwin .layui-layer-max:hover {
|
||||
background: url(default.png) no-repeat -64px 0;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin {
|
||||
background: url(default.png) no-repeat -32px 0;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin:hover {
|
||||
background: url(default.png) no-repeat -16px 0;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-setwin .layui-layer-close1,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2 {
|
||||
background: url(default.png) 0 0;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-setwin .layui-layer-close1:hover,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2:hover {
|
||||
background: url(default.png) -48px 0;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-padding{padding-top: 24px;}
|
||||
body .layer-ext-moon .layui-layer-btn {
|
||||
text-align: right;
|
||||
padding: 10px 15px 12px;
|
||||
background: #f0f4f7;
|
||||
border-top: 1px #c7c7c7 solid;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-btn a {
|
||||
font-size: 12px;
|
||||
font-weight: normal;
|
||||
margin: 0 3px;
|
||||
margin-right: 7px;
|
||||
margin-left: 7px;
|
||||
padding: 0 15px;
|
||||
color: #fff;
|
||||
border: 1px solid #0064b6;
|
||||
background: #0071ce;
|
||||
border-radius: 3px;
|
||||
display: inline-block;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
background-repeat: no-repeat;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-btn .layui-layer-btn0 {
|
||||
background: #0071ce;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-btn .layui-layer-btn1 {
|
||||
background: #fff;
|
||||
color: #404a58;
|
||||
border: 1px solid #c0c4cd;
|
||||
border-radius: 3px;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-btn .layui-layer-btn2 {
|
||||
background: #f60;
|
||||
color: #fff;
|
||||
border: 1px solid #f60;
|
||||
border-radius: 3px;
|
||||
}
|
||||
body .layer-ext-moon .layui-layer-btn .layui-layer-btn3 {
|
||||
background: #f00;
|
||||
color: #fff;
|
||||
border: 1px solid #f00;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
body .layer-ext-moon .layui-layer-title span.layui-layer-tabnow{
|
||||
height:47px;
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1,28 +1,46 @@
|
||||
(function ($) {
|
||||
(function($) {
|
||||
$.extend($.summernote.lang, {
|
||||
'zh-CN': {
|
||||
font: {
|
||||
bold: '粗体',
|
||||
italic: '斜体',
|
||||
underline: '下划线',
|
||||
strikethrough: '删除线',
|
||||
clear: '清除格式',
|
||||
height: '行高',
|
||||
name: '字体',
|
||||
strikethrough: '删除线',
|
||||
subscript: '下标',
|
||||
superscript: '上标',
|
||||
size: '字号'
|
||||
},
|
||||
image: {
|
||||
image: '图片',
|
||||
insert: '插入图片',
|
||||
resizeFull: '调整至 100%',
|
||||
resizeHalf: '调整至 50%',
|
||||
resizeQuarter: '调整至 25%',
|
||||
floatLeft: '左浮动',
|
||||
floatRight: '右浮动',
|
||||
floatNone: '不浮动',
|
||||
dragImageHere: '将图片拖至此处',
|
||||
resizeFull: '缩放至 100%',
|
||||
resizeHalf: '缩放至 50%',
|
||||
resizeQuarter: '缩放至 25%',
|
||||
floatLeft: '靠左浮动',
|
||||
floatRight: '靠右浮动',
|
||||
floatNone: '取消浮动',
|
||||
shapeRounded: '形状: 圆角',
|
||||
shapeCircle: '形状: 圆',
|
||||
shapeThumbnail: '形状: 缩略图',
|
||||
shapeNone: '形状: 无',
|
||||
dragImageHere: '将图片拖拽至此处',
|
||||
dropImage: '拖拽图片或文本',
|
||||
selectFromFiles: '从本地上传',
|
||||
url: '图片地址'
|
||||
maximumFileSize: '文件大小最大值',
|
||||
maximumFileSizeError: '文件大小超出最大值。',
|
||||
url: '图片地址',
|
||||
remove: '移除图片',
|
||||
original: '原始图片'
|
||||
},
|
||||
video: {
|
||||
video: '视频',
|
||||
videoLink: '视频链接',
|
||||
insert: '插入视频',
|
||||
url: '视频地址',
|
||||
providers: '(优酷, 腾讯, Instagram, DailyMotion, Youtube等)'
|
||||
},
|
||||
link: {
|
||||
link: '链接',
|
||||
@@ -33,22 +51,22 @@
|
||||
url: '链接地址',
|
||||
openInNewWindow: '在新窗口打开'
|
||||
},
|
||||
video: {
|
||||
video: '视频',
|
||||
videoLink: '视频链接',
|
||||
insert: '插入视频',
|
||||
url: '视频地址',
|
||||
providers: '(优酷, Instagram, DailyMotion, Youtube等)'
|
||||
},
|
||||
table: {
|
||||
table: '表格'
|
||||
table: '表格',
|
||||
addRowAbove: '在上方插入行',
|
||||
addRowBelow: '在下方插入行',
|
||||
addColLeft: '在左侧插入列',
|
||||
addColRight: '在右侧插入列',
|
||||
delRow: '删除行',
|
||||
delCol: '删除列',
|
||||
delTable: '删除表格'
|
||||
},
|
||||
hr: {
|
||||
insert: '水平线'
|
||||
},
|
||||
style: {
|
||||
style: '样式',
|
||||
normal: '普通',
|
||||
p: '普通',
|
||||
blockquote: '引用',
|
||||
pre: '代码',
|
||||
h1: '标题 1',
|
||||
@@ -92,11 +110,45 @@
|
||||
textFormatting: '文本格式',
|
||||
action: '动作',
|
||||
paragraphFormatting: '段落格式',
|
||||
documentStyle: '文档样式'
|
||||
documentStyle: '文档样式',
|
||||
extraKeys: '额外按键'
|
||||
},
|
||||
help: {
|
||||
insertParagraph: '插入段落',
|
||||
undo: '撤销',
|
||||
redo: '重做',
|
||||
tab: '增加缩进',
|
||||
untab: '减少缩进',
|
||||
bold: '粗体',
|
||||
italic: '斜体',
|
||||
underline: '下划线',
|
||||
strikethrough: '删除线',
|
||||
removeFormat: '清除格式',
|
||||
justifyLeft: '左对齐',
|
||||
justifyCenter: '居中对齐',
|
||||
justifyRight: '右对齐',
|
||||
justifyFull: '两端对齐',
|
||||
insertUnorderedList: '无序列表',
|
||||
insertOrderedList: '有序列表',
|
||||
outdent: '减少缩进',
|
||||
indent: '增加缩进',
|
||||
formatPara: '设置选中内容样式为 普通',
|
||||
formatH1: '设置选中内容样式为 标题1',
|
||||
formatH2: '设置选中内容样式为 标题2',
|
||||
formatH3: '设置选中内容样式为 标题3',
|
||||
formatH4: '设置选中内容样式为 标题4',
|
||||
formatH5: '设置选中内容样式为 标题5',
|
||||
formatH6: '设置选中内容样式为 标题6',
|
||||
insertHorizontalRule: '插入水平线',
|
||||
'linkDialog.show': '显示链接对话框'
|
||||
},
|
||||
history: {
|
||||
undo: '撤销',
|
||||
redo: '重做'
|
||||
},
|
||||
specialChar: {
|
||||
specialChar: '特殊字符',
|
||||
select: '选取特殊字符'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
/*! Summernote v0.8.8 | (c) 2013- Alan Hong and other contributors | MIT license */
|
||||
/*! Summernote v0.8.11 | (c) 2013- Alan Hong and other contributors | MIT license */
|
||||
|
||||
!function(a){a.extend(a.summernote.lang,{"zh-CN":{font:{bold:"粗体",italic:"斜体",underline:"下划线",clear:"清除格式",height:"行高",name:"字体",strikethrough:"删除线",subscript:"下标",superscript:"上标",size:"字号"},image:{image:"图片",insert:"插入图片",resizeFull:"缩放至 100%",resizeHalf:"缩放至 50%",resizeQuarter:"缩放至 25%",floatLeft:"靠左浮动",floatRight:"靠右浮动",floatNone:"取消浮动",shapeRounded:"形状: 圆角",shapeCircle:"形状: 圆",shapeThumbnail:"形状: 缩略图",shapeNone:"形状: 无",dragImageHere:"将图片拖拽至此处",selectFromFiles:"从本地上传",maximumFileSize:"文件大小最大值",maximumFileSizeError:"文件大小超出最大值。",url:"图片地址",remove:"移除图片"},video:{video:"视频",videoLink:"视频链接",insert:"插入视频",url:"视频地址",providers:"(优酷, 腾讯, Instagram, DailyMotion, Youtube等)"},link:{link:"链接",insert:"插入链接",unlink:"去除链接",edit:"编辑链接",textToDisplay:"显示文本",url:"链接地址",openInNewWindow:"在新窗口打开"},table:{table:"表格"},hr:{insert:"水平线"},style:{style:"样式",p:"普通",blockquote:"引用",pre:"代码",h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",h5:"标题 5",h6:"标题 6"},lists:{unordered:"无序列表",ordered:"有序列表"},options:{help:"帮助",fullscreen:"全屏",codeview:"源代码"},paragraph:{paragraph:"段落",outdent:"减少缩进",indent:"增加缩进",left:"左对齐",center:"居中对齐",right:"右对齐",justify:"两端对齐"},color:{recent:"最近使用",more:"更多",background:"背景",foreground:"前景",transparent:"透明",setTransparent:"透明",reset:"重置",resetToDefault:"默认"},shortcut:{shortcuts:"快捷键",close:"关闭",textFormatting:"文本格式",action:"动作",paragraphFormatting:"段落格式",documentStyle:"文档样式",extraKeys:"额外按键"},history:{undo:"撤销",redo:"重做"},help:{insertParagraph:"插入段落",undo:"撤销",redo:"重做",tab:"增加缩进",untab:"减少缩进",bold:"粗体",italic:"斜体",underline:"下划线",strikethrough:"删除线",removeFormat:"清除格式",justifyLeft:"左对齐",justifyCenter:"居中对齐",justifyRight:"右对齐",justifyFull:"两端对齐",insertUnorderedList:"无序列表",insertOrderedList:"有序列表",outdent:"减少缩进",indent:"增加缩进",formatPara:"设置选中内容样式为 普通",formatH1:"设置选中内容样式为 标题1",formatH2:"设置选中内容样式为 标题2",formatH3:"设置选中内容样式为 标题3",formatH4:"设置选中内容样式为 标题4",formatH5:"设置选中内容样式为 标题5",formatH6:"设置选中内容样式为 标题6",insertHorizontalRule:"插入水平线","linkDialog.show":"显示链接对话框"}}})}(jQuery);
|
||||
!function(e){e.extend(e.summernote.lang,{"zh-CN":{font:{bold:"粗体",italic:"斜体",underline:"下划线",clear:"清除格式",height:"行高",name:"字体",strikethrough:"删除线",subscript:"下标",superscript:"上标",size:"字号"},image:{image:"图片",insert:"插入图片",resizeFull:"缩放至 100%",resizeHalf:"缩放至 50%",resizeQuarter:"缩放至 25%",floatLeft:"靠左浮动",floatRight:"靠右浮动",floatNone:"取消浮动",shapeRounded:"形状: 圆角",shapeCircle:"形状: 圆",shapeThumbnail:"形状: 缩略图",shapeNone:"形状: 无",dragImageHere:"将图片拖拽至此处",dropImage:"拖拽图片或文本",selectFromFiles:"从本地上传",maximumFileSize:"文件大小最大值",maximumFileSizeError:"文件大小超出最大值。",url:"图片地址",remove:"移除图片",original:"原始图片"},video:{video:"视频",videoLink:"视频链接",insert:"插入视频",url:"视频地址",providers:"(优酷, 腾讯, Instagram, DailyMotion, Youtube等)"},link:{link:"链接",insert:"插入链接",unlink:"去除链接",edit:"编辑链接",textToDisplay:"显示文本",url:"链接地址",openInNewWindow:"在新窗口打开"},table:{table:"表格",addRowAbove:"在上方插入行",addRowBelow:"在下方插入行",addColLeft:"在左侧插入列",addColRight:"在右侧插入列",delRow:"删除行",delCol:"删除列",delTable:"删除表格"},hr:{insert:"水平线"},style:{style:"样式",p:"普通",blockquote:"引用",pre:"代码",h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",h5:"标题 5",h6:"标题 6"},lists:{unordered:"无序列表",ordered:"有序列表"},options:{help:"帮助",fullscreen:"全屏",codeview:"源代码"},paragraph:{paragraph:"段落",outdent:"减少缩进",indent:"增加缩进",left:"左对齐",center:"居中对齐",right:"右对齐",justify:"两端对齐"},color:{recent:"最近使用",more:"更多",background:"背景",foreground:"前景",transparent:"透明",setTransparent:"透明",reset:"重置",resetToDefault:"默认"},shortcut:{shortcuts:"快捷键",close:"关闭",textFormatting:"文本格式",action:"动作",paragraphFormatting:"段落格式",documentStyle:"文档样式",extraKeys:"额外按键"},help:{insertParagraph:"插入段落",undo:"撤销",redo:"重做",tab:"增加缩进",untab:"减少缩进",bold:"粗体",italic:"斜体",underline:"下划线",strikethrough:"删除线",removeFormat:"清除格式",justifyLeft:"左对齐",justifyCenter:"居中对齐",justifyRight:"右对齐",justifyFull:"两端对齐",insertUnorderedList:"无序列表",insertOrderedList:"有序列表",outdent:"减少缩进",indent:"增加缩进",formatPara:"设置选中内容样式为 普通",formatH1:"设置选中内容样式为 标题1",formatH2:"设置选中内容样式为 标题2",formatH3:"设置选中内容样式为 标题3",formatH4:"设置选中内容样式为 标题4",formatH5:"设置选中内容样式为 标题5",formatH6:"设置选中内容样式为 标题6",insertHorizontalRule:"插入水平线","linkDialog.show":"显示链接对话框"},history:{undo:"撤销",redo:"重做"},specialChar:{specialChar:"特殊字符",select:"选取特殊字符"}}})}(jQuery);
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
+3
-2
File diff suppressed because one or more lines are too long
@@ -84,3 +84,64 @@ body.signin {
|
||||
width:auto
|
||||
}
|
||||
}
|
||||
/*
|
||||
登录界面check样式
|
||||
*/
|
||||
.checkbox-custom {
|
||||
position: relative;
|
||||
padding: 0 15px 0 25px;
|
||||
margin-bottom: 7px;
|
||||
display: inline-block;
|
||||
}
|
||||
/*
|
||||
将初始的checkbox的样式改变
|
||||
*/
|
||||
.checkbox-custom input[type="checkbox"] {
|
||||
opacity: 0; /*将初始的checkbox隐藏起来*/
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
z-index: 2;
|
||||
margin: -6px 0 0 0;
|
||||
top: 50%;
|
||||
left: 3px;
|
||||
}
|
||||
/*
|
||||
设计新的checkbox,位置
|
||||
*/
|
||||
.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,将新的checkbox关联起来
|
||||
*/
|
||||
.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; /*改变了rememberme的字体*/
|
||||
margin-bottom: 0;
|
||||
text-align: left;
|
||||
}
|
||||
+1
-1
@@ -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 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}}
|
||||
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}
|
||||
@@ -0,0 +1,822 @@
|
||||
/*
|
||||
*
|
||||
* SKIN blue 若依管理系统
|
||||
* NAME - blue/green/purple/red/yellow
|
||||
*
|
||||
*/
|
||||
/** 蓝色主题 skin-blue **/
|
||||
.skin-blue .navbar {
|
||||
background-color: #3c8dbc
|
||||
}
|
||||
|
||||
.skin-blue .navbar .nav>li>a {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-blue .navbar .nav>li>a:hover,
|
||||
.skin-blue .navbar .nav>li>a:active,
|
||||
.skin-blue .navbar .nav>li>a:focus,
|
||||
.skin-blue .navbar .nav .open>a,
|
||||
.skin-blue .navbar .nav .open>a:hover,
|
||||
.skin-blue .navbar .nav .open>a:focus,
|
||||
.skin-blue .navbar .nav>.active>a {
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
color: #f6f6f6
|
||||
}
|
||||
|
||||
.skin-blue .navbar .sidebar-toggle {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-blue .navbar .sidebar-toggle:hover {
|
||||
color: #f6f6f6;
|
||||
background: rgba(0, 0, 0, 0.1)
|
||||
}
|
||||
|
||||
.skin-blue .navbar .sidebar-toggle {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-blue .navbar .sidebar-toggle:hover {
|
||||
background-color: #367fa9
|
||||
}
|
||||
|
||||
@media ( max-width :767px) {
|
||||
.skin-blue .navbar .dropdown-menu li.divider {
|
||||
background-color: rgba(255, 255, 255, 0.1)
|
||||
}
|
||||
.skin-blue .navbar .dropdown-menu li a {
|
||||
color: #fff
|
||||
}
|
||||
.skin-blue .navbar .dropdown-menu li a:hover {
|
||||
background: #367fa9
|
||||
}
|
||||
}
|
||||
|
||||
.skin-blue .logo {
|
||||
background-color: #367fa9;
|
||||
color: #fff;
|
||||
border-bottom: 0 solid transparent
|
||||
}
|
||||
|
||||
.skin-blue .logo:hover {
|
||||
background-color: #357ca5
|
||||
}
|
||||
|
||||
.skin-blue li.user-header {
|
||||
background-color: #3c8dbc
|
||||
}
|
||||
|
||||
.skin-blue .content-header {
|
||||
background: transparent
|
||||
}
|
||||
|
||||
.skin-blue .wrapper,
|
||||
.skin-blue .main-sidebar,
|
||||
.skin-blue .left-side {
|
||||
background-color: #222d32
|
||||
}
|
||||
|
||||
.skin-blue .user-panel>.info,
|
||||
.skin-blue .user-panel>.info>a {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-blue .nav>li.header {
|
||||
color: #4b646f;
|
||||
background: #1a2226
|
||||
}
|
||||
|
||||
.skin-blue .nav>li.active {
|
||||
color: #fff;
|
||||
background: #293846;
|
||||
border-left: 3px solid #3c8dbc;
|
||||
}
|
||||
|
||||
.skin-blue .nav>li.active:last-child {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.skin-blue .nav>li>.treeview-menu {
|
||||
margin: 0 1px;
|
||||
background: #2c3b41
|
||||
}
|
||||
|
||||
.skin-blue .sidebar a {
|
||||
color: #b8c7ce
|
||||
}
|
||||
|
||||
.skin-blue .sidebar a:hover {
|
||||
text-decoration: none
|
||||
}
|
||||
|
||||
.skin-blue .treeview-menu>li>a {
|
||||
color: #8aa4af
|
||||
}
|
||||
|
||||
.skin-blue .treeview-menu>li.active>a,
|
||||
.skin-blue .treeview-menu>li>a:hover {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-blue .sidebar-form {
|
||||
border-radius: 3px;
|
||||
border: 1px solid #374850;
|
||||
margin: 10px 10px
|
||||
}
|
||||
|
||||
.skin-blue .sidebar-form input[type="text"],
|
||||
.skin-blue .sidebar-form .btn {
|
||||
box-shadow: none;
|
||||
background-color: #374850;
|
||||
border: 1px solid transparent;
|
||||
height: 35px
|
||||
}
|
||||
|
||||
.skin-blue .sidebar-form input[type="text"] {
|
||||
color: #666;
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 2px
|
||||
}
|
||||
|
||||
.skin-blue .sidebar-form input[type="text"]:focus,
|
||||
.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
|
||||
background-color: #fff;
|
||||
color: #666
|
||||
}
|
||||
|
||||
.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
|
||||
border-left-color: #fff
|
||||
}
|
||||
|
||||
.skin-blue .sidebar-form .btn {
|
||||
color: #999;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
border-bottom-left-radius: 0
|
||||
}
|
||||
|
||||
.skin-blue.layout-top-nav>.logo {
|
||||
background-color: #3c8dbc;
|
||||
color: #fff;
|
||||
border-bottom: 0 solid transparent
|
||||
}
|
||||
|
||||
.skin-blue.layout-top-nav>.logo:hover {
|
||||
background-color: #3b8ab8
|
||||
}
|
||||
|
||||
.skin-blue .content-tabs {
|
||||
border-bottom: solid 2px #e7eaec;
|
||||
}
|
||||
|
||||
.skin-blue.layout-top-nav>.logo {
|
||||
background-color: #3c8dbc;
|
||||
color: #fff;
|
||||
border-bottom: 0 solid transparent
|
||||
}
|
||||
|
||||
.skin-blue.layout-top-nav>.logo:hover {
|
||||
background-color: #3b8ab8
|
||||
}
|
||||
|
||||
/** 绿色主题 skin-green **/
|
||||
.skin-green .navbar {
|
||||
background-color: #00a65a;
|
||||
}
|
||||
|
||||
.skin-green .content-tabs {
|
||||
border-bottom: solid 2px #e7eaec;
|
||||
}
|
||||
|
||||
.skin-green .navbar .nav>li>a {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-green .navbar .nav>li>a:hover,
|
||||
.skin-green .navbar .nav>li>a:active,
|
||||
.skin-green .navbar .nav>li>a:focus,
|
||||
.skin-green .navbar .nav .open>a,
|
||||
.skin-green .navbar .nav .open>a:hover,
|
||||
.skin-green .navbar .nav .open>a:focus,
|
||||
.skin-green .navbar .nav>.active>a {
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
color: #f6f6f6
|
||||
}
|
||||
|
||||
.skin-green .navbar .sidebar-toggle {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-green .navbar .sidebar-toggle:hover {
|
||||
color: #f6f6f6;
|
||||
background: rgba(0, 0, 0, 0.1)
|
||||
}
|
||||
|
||||
.skin-green .navbar .sidebar-toggle {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-green .navbar .sidebar-toggle:hover {
|
||||
background-color: #008d4c
|
||||
}
|
||||
|
||||
@media ( max-width :767px) {
|
||||
.skin-green .navbar .dropdown-menu li.divider {
|
||||
background-color: rgba(255, 255, 255, 0.1)
|
||||
}
|
||||
.skin-green .navbar .dropdown-menu li a {
|
||||
color: #fff
|
||||
}
|
||||
.skin-green .navbar .dropdown-menu li a:hover {
|
||||
background: #008d4c
|
||||
}
|
||||
}
|
||||
|
||||
.skin-green .logo {
|
||||
background-color: #008d4c;
|
||||
color: #fff;
|
||||
border-bottom: 0 solid transparent
|
||||
}
|
||||
|
||||
.skin-green .logo:hover {
|
||||
background-color: #008749
|
||||
}
|
||||
|
||||
.skin-green li.user-header {
|
||||
background-color: #00a65a
|
||||
}
|
||||
|
||||
.skin-green .content-header {
|
||||
background: transparent
|
||||
}
|
||||
|
||||
.skin-green .wrapper,
|
||||
.skin-green .main-sidebar,
|
||||
.skin-green .left-side {
|
||||
background-color: #222d32
|
||||
}
|
||||
|
||||
.skin-green .user-panel>.info,
|
||||
.skin-green .user-panel>.info>a {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-green .nav>li.header {
|
||||
color: #4b646f;
|
||||
background: #1a2226;
|
||||
}
|
||||
|
||||
.skin-green .nav>li.active {
|
||||
color: #fff;
|
||||
background: #293846;
|
||||
border-left: 3px solid #00a65a;
|
||||
}
|
||||
|
||||
.skin-green .nav>li.active:last-child {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.skin-green .nav>li>.treeview-menu {
|
||||
margin: 0 1px;
|
||||
background: #2c3b41
|
||||
}
|
||||
|
||||
.skin-green .sidebar a {
|
||||
color: #b8c7ce
|
||||
}
|
||||
|
||||
.skin-green .sidebar a:hover {
|
||||
text-decoration: none
|
||||
}
|
||||
|
||||
.skin-green .treeview-menu>li>a {
|
||||
color: #8aa4af
|
||||
}
|
||||
|
||||
.skin-green .treeview-menu>li.active>a,
|
||||
.skin-green .treeview-menu>li>a:hover {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-green .sidebar-form {
|
||||
border-radius: 3px;
|
||||
border: 1px solid #374850;
|
||||
margin: 10px 10px
|
||||
}
|
||||
|
||||
.skin-green .sidebar-form input[type="text"],
|
||||
.skin-green .sidebar-form .btn {
|
||||
box-shadow: none;
|
||||
background-color: #374850;
|
||||
border: 1px solid transparent;
|
||||
height: 35px
|
||||
}
|
||||
|
||||
.skin-green .sidebar-form input[type="text"] {
|
||||
color: #666;
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 2px
|
||||
}
|
||||
|
||||
.skin-green .sidebar-form input[type="text"]:focus,
|
||||
.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
|
||||
background-color: #fff;
|
||||
color: #666
|
||||
}
|
||||
|
||||
.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
|
||||
border-left-color: #fff
|
||||
}
|
||||
|
||||
.skin-green .sidebar-form .btn {
|
||||
color: #999;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
border-bottom-left-radius: 0
|
||||
}
|
||||
|
||||
/** 红色主题 skin-red **/
|
||||
.skin-red .navbar {
|
||||
background-color: #dd4b39
|
||||
}
|
||||
|
||||
.skin-red .navbar .nav>li>a {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-red .navbar .nav>li>a:hover,
|
||||
.skin-red .navbar .nav>li>a:active,
|
||||
.skin-red .navbar .nav>li>a:focus,
|
||||
.skin-red .navbar .nav .open>a,
|
||||
.skin-red .navbar .nav .open>a:hover,
|
||||
.skin-red .navbar .nav .open>a:focus,
|
||||
.skin-red .navbar .nav>.active>a {
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
color: #f6f6f6
|
||||
}
|
||||
|
||||
.skin-red .navbar .sidebar-toggle {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-red .navbar .sidebar-toggle:hover {
|
||||
color: #f6f6f6;
|
||||
background: rgba(0, 0, 0, 0.1)
|
||||
}
|
||||
|
||||
.skin-red .navbar .sidebar-toggle {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-red .navbar .sidebar-toggle:hover {
|
||||
background-color: #d73925
|
||||
}
|
||||
|
||||
@media ( max-width :767px) {
|
||||
.skin-red .navbar .dropdown-menu li.divider {
|
||||
background-color: rgba(255, 255, 255, 0.1)
|
||||
}
|
||||
.skin-red .navbar .dropdown-menu li a {
|
||||
color: #fff
|
||||
}
|
||||
.skin-red .navbar .dropdown-menu li a:hover {
|
||||
background: #d73925
|
||||
}
|
||||
}
|
||||
|
||||
.skin-red .logo {
|
||||
background-color: #d73925;
|
||||
color: #fff;
|
||||
border-bottom: 0 solid transparent
|
||||
}
|
||||
|
||||
.skin-red .logo:hover {
|
||||
background-color: #d33724
|
||||
}
|
||||
|
||||
.skin-red li.user-header {
|
||||
background-color: #dd4b39
|
||||
}
|
||||
|
||||
.skin-red .content-header {
|
||||
background: transparent
|
||||
}
|
||||
|
||||
.skin-red .wrapper,
|
||||
.skin-red .main-sidebar,
|
||||
.skin-red .left-side {
|
||||
background-color: #222d32
|
||||
}
|
||||
|
||||
.skin-red .user-panel>.info,
|
||||
.skin-red .user-panel>.info>a {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-red .nav>li.header {
|
||||
color: #4b646f;
|
||||
background: #1a2226
|
||||
}
|
||||
|
||||
.skin-red .nav>li.active {
|
||||
color: #fff;
|
||||
border-left: 3px solid #dd4b39;
|
||||
background: #293846;
|
||||
}
|
||||
|
||||
.skin-red .nav>li.active:last-child {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.skin-red .content-tabs {
|
||||
border-bottom: solid 2px #e7eaec;
|
||||
}
|
||||
|
||||
.skin-red .nav>li>.treeview-menu {
|
||||
margin: 0 1px;
|
||||
background: #2c3b41
|
||||
}
|
||||
|
||||
.skin-red .sidebar a {
|
||||
color: #b8c7ce
|
||||
}
|
||||
|
||||
.skin-red .sidebar a:hover {
|
||||
text-decoration: none
|
||||
}
|
||||
|
||||
.skin-red .treeview-menu>li>a {
|
||||
color: #8aa4af
|
||||
}
|
||||
|
||||
.skin-red .treeview-menu>li.active>a,
|
||||
.skin-red .treeview-menu>li>a:hover {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-red .sidebar-form {
|
||||
border-radius: 3px;
|
||||
border: 1px solid #374850;
|
||||
margin: 10px 10px
|
||||
}
|
||||
|
||||
.skin-red .sidebar-form input[type="text"],
|
||||
.skin-red .sidebar-form .btn {
|
||||
box-shadow: none;
|
||||
background-color: #374850;
|
||||
border: 1px solid transparent;
|
||||
height: 35px
|
||||
}
|
||||
|
||||
.skin-red .sidebar-form input[type="text"] {
|
||||
color: #fff;
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 2px
|
||||
}
|
||||
|
||||
.skin-red .sidebar-form input[type="text"]:focus,
|
||||
.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
|
||||
background-color: #fff;
|
||||
color: #666
|
||||
}
|
||||
|
||||
.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
|
||||
border-left-color: #fff
|
||||
}
|
||||
|
||||
.skin-red .sidebar-form .btn {
|
||||
color: #999;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
border-bottom-left-radius: 0
|
||||
}
|
||||
|
||||
/** 黄色主题 skin-red **/
|
||||
.skin-yellow .navbar {
|
||||
background-color: #f39c12
|
||||
}
|
||||
|
||||
.skin-yellow .navbar .nav>li>a {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-yellow .navbar .nav>li>a:hover,
|
||||
.skin-yellow .navbar .nav>li>a:active,
|
||||
.skin-yellow .navbar .nav>li>a:focus,
|
||||
.skin-yellow .navbar .nav .open>a,
|
||||
.skin-yellow .navbar .nav .open>a:hover,
|
||||
.skin-yellow .navbar .nav .open>a:focus,
|
||||
.skin-yellow .navbar .nav>.active>a {
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
color: #f6f6f6
|
||||
}
|
||||
|
||||
.skin-yellow .navbar .sidebar-toggle {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-yellow .navbar .sidebar-toggle:hover {
|
||||
color: #f6f6f6;
|
||||
background: rgba(0, 0, 0, 0.1)
|
||||
}
|
||||
|
||||
.skin-yellow .navbar .sidebar-toggle {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-yellow .navbar .sidebar-toggle:hover {
|
||||
background-color: #e08e0b
|
||||
}
|
||||
|
||||
@media ( max-width :767px) {
|
||||
.skin-yellow .navbar .dropdown-menu li.divider {
|
||||
background-color: rgba(255, 255, 255, 0.1)
|
||||
}
|
||||
.skin-yellow .navbar .dropdown-menu li a {
|
||||
color: #fff
|
||||
}
|
||||
.skin-yellow .navbar .dropdown-menu li a:hover {
|
||||
background: #e08e0b
|
||||
}
|
||||
}
|
||||
|
||||
.skin-yellow .logo {
|
||||
background-color: #e08e0b;
|
||||
color: #fff;
|
||||
border-bottom: 0 solid transparent
|
||||
}
|
||||
|
||||
.skin-yellow .logo:hover {
|
||||
background-color: #db8b0b
|
||||
}
|
||||
|
||||
.skin-yellow li.user-header {
|
||||
background-color: #f39c12
|
||||
}
|
||||
|
||||
.skin-yellow .content-header {
|
||||
background: transparent
|
||||
}
|
||||
|
||||
.skin-yellow .wrapper,
|
||||
.skin-yellow .main-sidebar,
|
||||
.skin-yellow .left-side {
|
||||
background-color: #222d32
|
||||
}
|
||||
|
||||
.skin-yellow .user-panel>.info,
|
||||
.skin-yellow .user-panel>.info>a {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-yellow .nav>li.header {
|
||||
color: #4b646f;
|
||||
background: #1a2226
|
||||
}
|
||||
|
||||
.skin-yellow .nav>li.active {
|
||||
color: #fff;
|
||||
background: #293846;
|
||||
border-left: 3px solid #f39c12;
|
||||
}
|
||||
|
||||
.skin-yellow .nav>li.active:last-child {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.skin-yellow .content-tabs {
|
||||
|
||||
border-bottom: solid 2px #e7eaec;
|
||||
}
|
||||
|
||||
.skin-yellow .nav>li>.treeview-menu {
|
||||
margin: 0 1px;
|
||||
background: #2c3b41
|
||||
}
|
||||
|
||||
.skin-yellow .sidebar a {
|
||||
color: #b8c7ce
|
||||
}
|
||||
|
||||
.skin-yellow .sidebar a:hover {
|
||||
text-decoration: none
|
||||
}
|
||||
|
||||
.skin-yellow .treeview-menu>li>a {
|
||||
color: #8aa4af
|
||||
}
|
||||
|
||||
.skin-yellow .treeview-menu>li.active>a,
|
||||
.skin-yellow .treeview-menu>li>a:hover {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-yellow .sidebar-form {
|
||||
border-radius: 3px;
|
||||
border: 1px solid #374850;
|
||||
margin: 10px 10px
|
||||
}
|
||||
|
||||
.skin-yellow .sidebar-form input[type="text"],
|
||||
.skin-yellow .sidebar-form .btn {
|
||||
box-shadow: none;
|
||||
background-color: #374850;
|
||||
border: 1px solid transparent;
|
||||
height: 35px
|
||||
}
|
||||
|
||||
.skin-yellow .sidebar-form input[type="text"] {
|
||||
color: #666;
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 2px
|
||||
}
|
||||
|
||||
.skin-yellow .sidebar-form input[type="text"]:focus,
|
||||
.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
|
||||
background-color: #fff;
|
||||
color: #666
|
||||
}
|
||||
|
||||
.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
|
||||
border-left-color: #fff
|
||||
}
|
||||
|
||||
.skin-yellow .sidebar-form .btn {
|
||||
color: #999;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
border-bottom-left-radius: 0
|
||||
}
|
||||
|
||||
/** 紫色主题 skin-purple **/
|
||||
.skin-purple .navbar {
|
||||
background-color: #605ca8
|
||||
}
|
||||
|
||||
.skin-purple .navbar .nav>li>a {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-purple .navbar .nav>li>a:hover,
|
||||
.skin-purple .navbar .nav>li>a:active,
|
||||
.skin-purple .navbar .nav>li>a:focus,
|
||||
.skin-purple .navbar .nav .open>a,
|
||||
.skin-purple .navbar .nav .open>a:hover,
|
||||
.skin-purple .navbar .nav .open>a:focus,
|
||||
.skin-purple .navbar .nav>.active>a {
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
color: #f6f6f6
|
||||
}
|
||||
|
||||
.skin-purple .navbar .sidebar-toggle {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-purple .navbar .sidebar-toggle:hover {
|
||||
color: #f6f6f6;
|
||||
background: rgba(0, 0, 0, 0.1)
|
||||
}
|
||||
|
||||
.skin-purple .navbar .sidebar-toggle {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-purple .navbar .sidebar-toggle:hover {
|
||||
background-color: #555299
|
||||
}
|
||||
|
||||
@media ( max-width :767px) {
|
||||
.skin-purple .navbar .dropdown-menu li.divider {
|
||||
background-color: rgba(255, 255, 255, 0.1)
|
||||
}
|
||||
.skin-purple .navbar .dropdown-menu li a {
|
||||
color: #fff
|
||||
}
|
||||
.skin-purple .navbar .dropdown-menu li a:hover {
|
||||
background: #555299
|
||||
}
|
||||
}
|
||||
|
||||
.skin-purple .logo {
|
||||
background-color: #555299;
|
||||
color: #fff;
|
||||
border-bottom: 0 solid transparent
|
||||
}
|
||||
|
||||
.skin-purple .logo:hover {
|
||||
background-color: #545096
|
||||
}
|
||||
|
||||
.skin-purple li.user-header {
|
||||
background-color: #605ca8
|
||||
}
|
||||
|
||||
.skin-purple .content-header {
|
||||
background: transparent
|
||||
}
|
||||
|
||||
.skin-purple .wrapper,
|
||||
.skin-purple .main-sidebar,
|
||||
.skin-purple .left-side {
|
||||
background-color: #222d32
|
||||
}
|
||||
|
||||
.skin-purple .user-panel>.info,
|
||||
.skin-purple .user-panel>.info>a {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-purple .nav>li.header {
|
||||
color: #4b646f;
|
||||
background: #1a2226
|
||||
}
|
||||
|
||||
.skin-purple .nav>li.active {
|
||||
color: #fff;
|
||||
background: #293846;
|
||||
border-left: 3px solid #605ca8;
|
||||
}
|
||||
|
||||
.skin-purple .nav>li.active:last-child {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
.skin-purple .content-tabs {
|
||||
|
||||
border-bottom: solid 2px #e7eaec;
|
||||
}
|
||||
|
||||
.skin-purple .nav>li>.treeview-menu {
|
||||
margin: 0 1px;
|
||||
background: #2c3b41
|
||||
}
|
||||
|
||||
.skin-purple .sidebar a {
|
||||
color: #b8c7ce
|
||||
}
|
||||
|
||||
.skin-purple .sidebar a:hover {
|
||||
text-decoration: none
|
||||
}
|
||||
|
||||
.skin-purple .treeview-menu>li>a {
|
||||
color: #8aa4af
|
||||
}
|
||||
|
||||
.skin-purple .treeview-menu>li.active>a,
|
||||
.skin-purple .treeview-menu>li>a:hover {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.skin-purple .sidebar-form {
|
||||
border-radius: 3px;
|
||||
border: 1px solid #374850;
|
||||
margin: 10px 10px
|
||||
}
|
||||
|
||||
.skin-purple .sidebar-form input[type="text"],
|
||||
.skin-purple .sidebar-form .btn {
|
||||
box-shadow: none;
|
||||
background-color: #374850;
|
||||
border: 1px solid transparent;
|
||||
height: 35px
|
||||
}
|
||||
|
||||
.skin-purple .sidebar-form input[type="text"] {
|
||||
color: #666;
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 2px
|
||||
}
|
||||
|
||||
.skin-purple .sidebar-form input[type="text"]:focus,
|
||||
.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
|
||||
background-color: #fff;
|
||||
color: #666
|
||||
}
|
||||
|
||||
.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn {
|
||||
border-left-color: #fff
|
||||
}
|
||||
|
||||
.skin-purple .sidebar-form .btn {
|
||||
color: #999;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
border-bottom-left-radius: 0
|
||||
}
|
||||
@@ -47,28 +47,44 @@ a:focus {
|
||||
}
|
||||
|
||||
.nav.navbar-right>li>a {
|
||||
color: #999c9e;
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
height: 50px;
|
||||
padding: 18px 15px;
|
||||
}
|
||||
|
||||
.nav>li.active>a {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.navbar-default .nav>li>a:hover, .navbar-default .nav>li>a:focus {
|
||||
background-color: #293846;
|
||||
color: white;
|
||||
.nav.navbar-right>li>a>.label {
|
||||
position: absolute;
|
||||
top: 9px;
|
||||
right: 5px;
|
||||
text-align: center;
|
||||
font-size: 9px;
|
||||
padding: 2px 4px;
|
||||
line-height: .9;
|
||||
}
|
||||
.nav.navbar-right>li>a:hover {
|
||||
background-color: #367fa9;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.nav .open>a, .nav .open>a:hover, .nav .open>a:focus {
|
||||
background: #fff;
|
||||
.navbar-default .nav>li>a:hover,
|
||||
.navbar-default .nav>li>a:focus {
|
||||
background-color: #293846;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav>li>a i {
|
||||
margin-right: 6px;
|
||||
.nav .open>a,
|
||||
.nav .open>a:hover,
|
||||
.nav .open>a:focus {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
border: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.navbar-default {
|
||||
@@ -77,12 +93,12 @@ a:focus {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.navbar-top-links li {
|
||||
display: inline-block;
|
||||
.nav.navbar-top-links li {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.navbar-top-links li:last-child {
|
||||
margin-right: 30px;
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
body.body-small .navbar-top-links li:last-child {
|
||||
@@ -179,7 +195,7 @@ body.body-small .navbar-top-links li:last-child {
|
||||
}
|
||||
|
||||
.nav-header {
|
||||
padding: 33px 25px;
|
||||
padding: 34px 25px 20px 25px;
|
||||
background: url("patterns/header-profile.png") no-repeat;
|
||||
}
|
||||
|
||||
@@ -211,7 +227,7 @@ body.body-small .navbar-top-links li:last-child {
|
||||
|
||||
.minimalize-styl-2 {
|
||||
padding: 4px 12px;
|
||||
margin: 14px 5px 5px 20px;
|
||||
margin: 12px 5px 5px 15px;
|
||||
font-size: 14px;
|
||||
float: left;
|
||||
}
|
||||
@@ -368,10 +384,6 @@ body.mini-navbar .navbar-default .nav>li>.nav-second-level li a {
|
||||
z-index: 2030;
|
||||
}
|
||||
|
||||
.navbar-fixed-top, .navbar-static-top {
|
||||
background: #f3f3f4;
|
||||
}
|
||||
|
||||
.fixed-nav #wrapper {
|
||||
padding-top: 60px;
|
||||
box-sizing: border-box;
|
||||
@@ -460,18 +472,6 @@ body.body-small.fixed-sidebar.mini-navbar .navbar-static-side {
|
||||
.fixed-sidebar.mini-navbar .nav li.active {
|
||||
border-left-width: 0;
|
||||
}
|
||||
/*.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level, .canvas-menu.mini-navbar .nav li:hover>.nav-second-level*/
|
||||
/*{*/
|
||||
/*position: absolute;*/
|
||||
/*left: 70px;*/
|
||||
/*top: 40px;*/
|
||||
/*background-color: #2f4050;*/
|
||||
/*padding: 10px 10px 0 10px;*/
|
||||
/*font-size: 12px;*/
|
||||
/*display: block;*/
|
||||
/*min-width: 140px;*/
|
||||
/*border-radius: 2px;*/
|
||||
/*}*/
|
||||
|
||||
/*伸缩菜单*/
|
||||
.fixed-sidebar.mini-navbar .nav li:hover>a> span.nav-label {
|
||||
@@ -485,7 +485,6 @@ body.body-small.fixed-sidebar.mini-navbar .navbar-static-side {
|
||||
.fixed-sidebar.mini-navbar .nav li:hover>.nav-second-level {
|
||||
top: 40px;
|
||||
font-size: 12px;
|
||||
/*padding: 10px 10px 0 10px;*/
|
||||
background-color: #2f4050;
|
||||
}
|
||||
|
||||
@@ -2319,16 +2318,6 @@ table.dataTable thead .sorting:after {
|
||||
.google-map {
|
||||
height: 300px;
|
||||
}
|
||||
/* Validation */
|
||||
label.error {
|
||||
color: #cc5965;
|
||||
display: inline-block;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.form-control.error {
|
||||
border: 1px dotted #cc5965;
|
||||
}
|
||||
/* ngGrid */
|
||||
.gridStyle {
|
||||
border: 1px solid #d4d4d4;
|
||||
@@ -5507,8 +5496,8 @@ del {
|
||||
}
|
||||
|
||||
20% {
|
||||
-webkit-transform: scaleY (1);
|
||||
transform: scaleY (1);
|
||||
-webkit-transform: scaleY(1);
|
||||
transform: scaleY(1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5567,20 +5556,20 @@ del {
|
||||
transform: translateX(42px) translateY(42px) rotate(-179deg);
|
||||
}
|
||||
|
||||
50 .1 % {
|
||||
-webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
|
||||
transform: translateX(42px) translateY(42px) rotate(-180deg);
|
||||
}
|
||||
50.1% {
|
||||
-webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
|
||||
transform: translateX(42px) translateY(42px) rotate(-180deg);
|
||||
}
|
||||
|
||||
75% {
|
||||
-webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0 .5 );
|
||||
transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0 .5 );
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0 .5 );
|
||||
transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0 .5 );
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(-360deg);
|
||||
transform: rotate(-360deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(-360deg);
|
||||
transform: rotate(-360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-wanderingCubeMove {
|
||||
@@ -6567,391 +6556,24 @@ body.rtls .top-navigation .footer.fixed, body.rtls.top-navigation .footer.fixed
|
||||
.rtls .ltr-support {
|
||||
direction: ltr;
|
||||
}
|
||||
/*
|
||||
*
|
||||
* This is style for skin config
|
||||
* Use only in demo theme
|
||||
*
|
||||
*/
|
||||
.skin-setttings .title {
|
||||
background: #efefef;
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
font-weight: 600;
|
||||
display: block;
|
||||
padding: 10px 15px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.setings-item {
|
||||
padding: 10px 30px;
|
||||
}
|
||||
|
||||
.setings-item.nb {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.setings-item.skin {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.setings-item .switch {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.skin-name a {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.setings-item a {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.default-skin, .blue-skin, .ultra-skin, .yellow-skin {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.default-skin {
|
||||
font-weight: 600;
|
||||
background: #1ab394;
|
||||
}
|
||||
|
||||
.default-skin:hover {
|
||||
background: #199d82;
|
||||
}
|
||||
|
||||
.blue-skin {
|
||||
font-weight: 600;
|
||||
background: url("patterns/header-profile-skin-blue.png") repeat scroll 0 0;
|
||||
}
|
||||
|
||||
.blue-skin:hover {
|
||||
background: #0d8ddb;
|
||||
}
|
||||
|
||||
.yellow-skin {
|
||||
font-weight: 600;
|
||||
background: url("patterns/header-profile-skin-yellow.png") repeat scroll 0 100%;
|
||||
}
|
||||
|
||||
.yellow-skin:hover {
|
||||
background: #ce8735;
|
||||
}
|
||||
|
||||
.content-tabs {
|
||||
border-bottom: solid 2px #2f4050;
|
||||
}
|
||||
|
||||
.page-tabs a {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.page-tabs a i {
|
||||
color: #ccc;
|
||||
margin-left: 2px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.page-tabs a.active {
|
||||
background: #2f4050;
|
||||
color: #a7b1c2;
|
||||
background: #eaedf1;
|
||||
color: #23508e;
|
||||
}
|
||||
|
||||
.page-tabs a.active:hover, .page-tabs a.active i:hover {
|
||||
background: #293846;
|
||||
color: #fff;
|
||||
}
|
||||
/*
|
||||
*
|
||||
* SKIN blue 若依管理系统
|
||||
* NAME - blue/purple
|
||||
*
|
||||
*/
|
||||
.skin-blue .minimalize-styl-2 {
|
||||
margin: 14px 5px 5px 30px;
|
||||
}
|
||||
|
||||
.skin-blue .navbar-top-links li:last-child {
|
||||
margin-right: 30px;
|
||||
}
|
||||
|
||||
.skin-blue.fixed-nav .minimalize-styl-2 {
|
||||
margin: 14px 5px 5px 15px;
|
||||
}
|
||||
|
||||
.skin-blue .spin-icon {
|
||||
background: #0e9aef !important;
|
||||
}
|
||||
|
||||
.skin-blue .nav-header {
|
||||
background: #0e9aef;
|
||||
background: url('patterns/header-profile-skin-blue.png');
|
||||
}
|
||||
|
||||
.skin-blue.mini-navbar .nav-second-level {
|
||||
background: #3e495f;
|
||||
}
|
||||
|
||||
.skin-blue .breadcrumb {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.skin-blue .page-heading {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.skin-blue .nav>li.active {
|
||||
background: #3a4459;
|
||||
}
|
||||
|
||||
.skin-blue .nav>li>a {
|
||||
color: #9ea6b9;
|
||||
}
|
||||
|
||||
.skin-blue .nav>li.active>a {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.skin-blue .navbar-minimalize {
|
||||
background: #0e9aef;
|
||||
border-color: #0e9aef;
|
||||
}
|
||||
|
||||
body.skin-blue {
|
||||
background: #3e495f;
|
||||
}
|
||||
|
||||
.skin-blue .navbar-static-top {
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.skin-blue .dashboard-header {
|
||||
background: transparent;
|
||||
border-bottom: none !important;
|
||||
border-top: none;
|
||||
padding: 20px 30px 10px 30px;
|
||||
}
|
||||
|
||||
.fixed-nav.skin-blue .navbar-fixed-top {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.skin-blue .wrapper-content {
|
||||
padding: 30px 15px;
|
||||
}
|
||||
|
||||
.skin-blue #page-wrapper {
|
||||
background: #f4f6fa;
|
||||
}
|
||||
|
||||
.skin-blue .ibox-title, .skin-blue .ibox-content {
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
.skin-blue .ibox-content:last-child {
|
||||
border-style: solid solid solid solid;
|
||||
}
|
||||
|
||||
.skin-blue .nav>li.active {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.skin-blue .nav-header {
|
||||
padding: 35px 25px 25px 25px;
|
||||
}
|
||||
|
||||
.skin-blue .nav-header a.dropdown-toggle {
|
||||
color: #fff;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.skin-blue .nav-header a.dropdown-toggle .text-muted {
|
||||
color: #fff;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.skin-blue .profile-element {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.skin-blue .img-circle {
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.skin-blue .navbar-default .nav>li>a:hover, .skin-blue .navbar-default .nav>li>a:focus {
|
||||
background: #39aef5;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.skin-blue .nav.nav-tabs>li.active>a {
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.skin-blue .content-tabs {
|
||||
border-bottom: solid 2px #39aef5;
|
||||
}
|
||||
|
||||
.skin-blue .nav.nav-tabs>li.active {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.skin-blue .page-tabs a.active {
|
||||
background: #39aef5;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.skin-blue .page-tabs a.active:hover, .skin-blue .page-tabs a.active i:hover {
|
||||
background: #0e9aef;
|
||||
color: #fff;
|
||||
}
|
||||
/*
|
||||
*
|
||||
* SKIN Yellow 若依管理系统
|
||||
* NAME - Yellow/purple
|
||||
*
|
||||
*/
|
||||
.skin-yellow .minimalize-styl-2 {
|
||||
margin: 14px 5px 5px 30px;
|
||||
}
|
||||
|
||||
.skin-yellow .navbar-top-links li:last-child {
|
||||
margin-right: 30px;
|
||||
}
|
||||
|
||||
.skin-yellow.fixed-nav .minimalize-styl-2 {
|
||||
margin: 14px 5px 5px 15px;
|
||||
}
|
||||
|
||||
.skin-yellow .spin-icon {
|
||||
background: #ecba52 !important;
|
||||
}
|
||||
|
||||
body.boxed-layout.skin-yellow #wrapper {
|
||||
background: #3e2c42;
|
||||
}
|
||||
|
||||
.skin-yellow .nav-header {
|
||||
background: #ecba52;
|
||||
background: url('patterns/header-profile-skin-yellow.png');
|
||||
}
|
||||
|
||||
.skin-yellow.mini-navbar .nav-second-level {
|
||||
background: #3e2c42;
|
||||
}
|
||||
|
||||
.skin-yellow .breadcrumb {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.skin-yellow .page-heading {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.skin-yellow .nav>li.active {
|
||||
background: #38283c;
|
||||
}
|
||||
|
||||
.fixed-nav.skin-yellow .navbar-fixed-top {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.skin-yellow .nav>li>a {
|
||||
color: #948b96;
|
||||
}
|
||||
|
||||
.skin-yellow .nav>li.active>a {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.skin-yellow .navbar-minimalize {
|
||||
background: #ecba52;
|
||||
border-color: #ecba52;
|
||||
}
|
||||
|
||||
body.skin-yellow {
|
||||
background: #3e2c42;
|
||||
}
|
||||
|
||||
.skin-yellow .navbar-static-top {
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.skin-yellow .dashboard-header {
|
||||
background: transparent;
|
||||
border-bottom: none !important;
|
||||
border-top: none;
|
||||
padding: 20px 30px 10px 30px;
|
||||
}
|
||||
|
||||
.skin-yellow .wrapper-content {
|
||||
padding: 30px 15px;
|
||||
}
|
||||
|
||||
.skin-yellow #page-wrapper {
|
||||
background: #f4f6fa;
|
||||
}
|
||||
|
||||
.skin-yellow .ibox-title, .skin-yellow .ibox-content {
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
.skin-yellow .ibox-content:last-child {
|
||||
border-style: solid solid solid solid;
|
||||
}
|
||||
|
||||
.skin-yellow .nav>li.active {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.skin-yellow .nav-header {
|
||||
padding: 35px 25px 25px 25px;
|
||||
}
|
||||
|
||||
.skin-yellow .nav-header a.dropdown-toggle {
|
||||
color: #fff;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.skin-yellow .nav-header a.dropdown-toggle .text-muted {
|
||||
color: #fff;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.skin-yellow .profile-element {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.skin-yellow .img-circle {
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.skin-yellow .navbar-default .nav>li>a:hover, .skin-yellow .navbar-default .nav>li>a:focus {
|
||||
background: #38283c;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.skin-yellow .nav.nav-tabs>li.active>a {
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.skin-yellow .nav.nav-tabs>li.active {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.skin-yellow .content-tabs {
|
||||
border-bottom: solid 2px #3e2c42;
|
||||
}
|
||||
|
||||
.skin-yellow .nav.nav-tabs>li.active {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.skin-yellow .page-tabs a.active {
|
||||
background: #3e2c42;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.skin-yellow .page-tabs a.active:hover, .skin-yellow .page-tabs a.active i:hover {
|
||||
background: #38283c;
|
||||
color: #fff;
|
||||
.page-tabs a.active:hover,
|
||||
.page-tabs a.active i:hover {
|
||||
background: #eaedf1;
|
||||
color: #23508e;
|
||||
}
|
||||
|
||||
@media ( min-width : 768px) {
|
||||
@@ -7279,7 +6901,8 @@ body.skin-yellow {
|
||||
}
|
||||
|
||||
.navbar-header {
|
||||
width: 60%;
|
||||
width: 10%;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.bs-glyphicons {
|
||||
@@ -7347,3 +6970,99 @@ body.skin-yellow {
|
||||
border-color: #cccccc!important;
|
||||
}
|
||||
|
||||
.folder-list li.active a {
|
||||
color: #2791df;
|
||||
background: #f5f5f5;
|
||||
}
|
||||
|
||||
.nav .logo {
|
||||
background-color: #367fa9;
|
||||
color: #fff;
|
||||
border-bottom: 0 solid transparent;
|
||||
-webkit-transition: width .3s ease-in-out;
|
||||
-o-transition: width .3s ease-in-out;
|
||||
transition: width .3s ease-in-out;
|
||||
display: block;
|
||||
height: 50px;
|
||||
font-size: 20px;
|
||||
line-height: 50px;
|
||||
text-align: center;
|
||||
width: 220px;
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
padding: 0 15px;
|
||||
font-weight: 300;
|
||||
overflow: hidden
|
||||
}
|
||||
|
||||
.logo-mini {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.logo-lg {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.roleList {
|
||||
color: #d5d5d5;
|
||||
margin-right: 10px;
|
||||
padding-top: 10px;
|
||||
line-height: 1;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
width: 110px;
|
||||
}
|
||||
|
||||
.sidebar-collapse .user-panel {
|
||||
white-space: nowrap;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 15px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.sidebar-collapse .user-panel .image>img {
|
||||
width: 100%;
|
||||
max-width: 45px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.sidebar-collapse .user-panel>.info {
|
||||
padding: 5px 5px 5px 15px;
|
||||
line-height: 1;
|
||||
position: absolute;
|
||||
left: 55px;
|
||||
}
|
||||
|
||||
.sidebar-collapse .user-panel>.info a {
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.sidebar-collapse .user-panel>.info>p {
|
||||
font-weight: 600;
|
||||
margin-bottom: 9px;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.user-panel>.info>a>.fa,
|
||||
.user-panel>.info>a>.ion,
|
||||
.user-panel>.info>a>.glyphicon {
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
.nav>li:hover .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#content-main.max {
|
||||
height: calc(100% - 110px);
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
left: 0px;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
z-index: 9998;
|
||||
margin: 0;
|
||||
}
|
||||
@@ -1,9 +1,188 @@
|
||||
/**
|
||||
* 通用css样式布局处理
|
||||
* Copyright (c) 2018 ruoyi
|
||||
* Copyright (c) 2019 ruoyi
|
||||
*/
|
||||
|
||||
/** 用户管理 样式布局 */
|
||||
/** 基础通用 **/
|
||||
.pt5 {
|
||||
padding-top: 5px;
|
||||
}
|
||||
.pr5 {
|
||||
padding-right: 5px;
|
||||
}
|
||||
.pb5 {
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
.mt5 {
|
||||
margin-top: 5px;
|
||||
}
|
||||
.mr5 {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.mb5 {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.ml5 {
|
||||
margin-left: 5px;
|
||||
}
|
||||
.mt10 {
|
||||
margin-top: 10px;
|
||||
}
|
||||
.mr10 {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.mb10 {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.ml0 {
|
||||
margin-left: 10px;
|
||||
}
|
||||
.mt20 {
|
||||
margin-top: 20px;
|
||||
}
|
||||
.mr20 {
|
||||
margin-right: 20px;
|
||||
}
|
||||
.mb20 {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.ml20 {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.section-content {
|
||||
min-height: 250px;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
padding: 5px 5px 5px 5px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.ibox {
|
||||
margin-bottom: 25px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
height: 100%;
|
||||
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
|
||||
}
|
||||
|
||||
.list-group-striped > .list-group-item {
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
border-radius: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0
|
||||
}
|
||||
|
||||
.ibox-title-gray {
|
||||
height: 41px;
|
||||
background-color: #f0f3f4;
|
||||
color: #333;
|
||||
font-weight: 700;
|
||||
border-radius: 2px 2px 0 0;
|
||||
padding: 13px !important;
|
||||
border-bottom: 1px solid #eee;
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.dashboard-header h5 {
|
||||
padding: 8px 0 0 0;
|
||||
display: inline-block;
|
||||
font-size: 14px;
|
||||
text-overflow: ellipsis;
|
||||
float: left;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.ibox-title-gray h5 {
|
||||
display: inline-block;
|
||||
font-size: 14px;
|
||||
margin: 0 0 7px;
|
||||
padding: 0;
|
||||
text-overflow: ellipsis;
|
||||
float: left;
|
||||
}
|
||||
|
||||
/* 导航页签 */
|
||||
.nav-tabs-custom {
|
||||
margin-bottom: 20px;
|
||||
background: #fff;
|
||||
box-shadow: 0 1px 1px rgba(0,0,0,0.1);
|
||||
border-radius: 3px
|
||||
}
|
||||
|
||||
.nav-tabs-custom>.nav-tabs {
|
||||
margin: 0;
|
||||
border-bottom-color: #f4f4f4;
|
||||
border-top-right-radius: 3px;
|
||||
border-top-left-radius: 3px
|
||||
}
|
||||
|
||||
.nav-tabs-custom>.nav-tabs>li {
|
||||
border-top: 3px solid transparent;
|
||||
margin-bottom: -2px;
|
||||
margin-right: 5px
|
||||
}
|
||||
|
||||
.nav-tabs-custom>.nav-tabs>li.disabled>a {
|
||||
color: #777
|
||||
}
|
||||
|
||||
.nav-tabs-custom>.nav-tabs>li>a {
|
||||
color: #444;
|
||||
font-weight: normal;
|
||||
border-radius: 0
|
||||
}
|
||||
|
||||
.nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover {
|
||||
background: transparent;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.nav-tabs-custom>.nav-tabs>li>a:hover {
|
||||
color: #999
|
||||
}
|
||||
|
||||
.nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active {
|
||||
border-color: transparent
|
||||
}
|
||||
|
||||
.nav-tabs-custom>.nav-tabs>li.active {
|
||||
border-top-color: #1890ff
|
||||
}
|
||||
|
||||
.nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a {
|
||||
background-color: #fff;
|
||||
color: #444
|
||||
}
|
||||
|
||||
.nav-tabs-custom>.nav-tabs>li.active>a {
|
||||
border-top-color: transparent;
|
||||
border-bottom-color: transparent;
|
||||
border-left-color: #f4f4f4;
|
||||
border-right-color: #f4f4f4
|
||||
}
|
||||
|
||||
.nav-tabs-custom>.tab-content {
|
||||
background: #fff;
|
||||
padding: 10px;
|
||||
border-bottom-right-radius: 3px;
|
||||
border-bottom-left-radius: 3px
|
||||
}
|
||||
|
||||
/** 弹层组件 禁用样式 **/
|
||||
.layer-disabled {
|
||||
border: 1px #dedede solid !important;
|
||||
background-color: #f1f1f1 !important;
|
||||
color: #333 !important;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/** 用户管理 样式布局 **/
|
||||
.box {
|
||||
position: relative;
|
||||
border-radius: 3px;
|
||||
@@ -91,7 +270,7 @@
|
||||
margin: 5px 0 5px -25px
|
||||
}
|
||||
|
||||
/** select2 样式修改 */
|
||||
/** select2 样式修改 **/
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: #1AB394;
|
||||
border-color: #1AB394;
|
||||
@@ -112,15 +291,20 @@
|
||||
padding-right: 10px
|
||||
}
|
||||
|
||||
/** 表单验证 样式布局 */
|
||||
/** 表单验证 样式布局 **/
|
||||
label.error {
|
||||
position: absolute;
|
||||
right: 18px;
|
||||
top: 7px;
|
||||
top: 10px;
|
||||
color: #ef392b;
|
||||
font-size: 12px
|
||||
}
|
||||
|
||||
.input-group label.error {
|
||||
z-index:99;
|
||||
right: 42px
|
||||
}
|
||||
|
||||
.Validform_error,input.error,select.error {
|
||||
background-color: #fbe2e2;
|
||||
border-color: #c66161;
|
||||
@@ -143,7 +327,7 @@ label.error {
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
/** 复选框&单选框 */
|
||||
/** 复选框&单选框 **/
|
||||
.check-box,.radio-box {
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
@@ -160,7 +344,7 @@ label.error {
|
||||
left: 0
|
||||
}
|
||||
|
||||
/* iCheck */
|
||||
/** iCheck **/
|
||||
.icheckbox-blue,.iradio-blue {
|
||||
display: block;
|
||||
margin: 0;
|
||||
@@ -214,7 +398,7 @@ label.error {
|
||||
background-position: -180px 0
|
||||
}
|
||||
|
||||
/** 遮罩层 */
|
||||
/** 遮罩层 **/
|
||||
.loaderbox {
|
||||
display: inline-block;
|
||||
min-width: 125px;
|
||||
@@ -281,7 +465,7 @@ label.error {
|
||||
}
|
||||
}
|
||||
|
||||
/** 表单查询条件 */
|
||||
/** 表单查询条件 **/
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
@@ -352,7 +536,7 @@ label {
|
||||
background: transparent;
|
||||
outline: none;
|
||||
height: 30px;
|
||||
width: 280px;
|
||||
width: 200px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
@@ -371,17 +555,26 @@ label {
|
||||
background: transparent;
|
||||
outline: none;
|
||||
height: 30px;
|
||||
width: 280px;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.select-list .select-time input {
|
||||
width: 133px;
|
||||
width: 93px;
|
||||
}
|
||||
|
||||
.select-time label,.select-time span,.select-time input {
|
||||
float: left;
|
||||
}
|
||||
|
||||
@media (max-width:767px) {
|
||||
.select-time label,.select-time span,.select-time input {
|
||||
float: none;
|
||||
}
|
||||
.select-list .select-time input {
|
||||
width: 200px;
|
||||
}
|
||||
}
|
||||
|
||||
.select-time label {
|
||||
margin-top: 5px;
|
||||
}
|
||||
@@ -409,7 +602,7 @@ label {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/** 表格查询数据 */
|
||||
/** 表格查询数据 **/
|
||||
.table-striped {
|
||||
min-height: 75%;
|
||||
}
|
||||
@@ -430,14 +623,22 @@ label {
|
||||
}
|
||||
|
||||
.table-striped .table>thead:first-child>tr:first-child>th {
|
||||
color: #333;
|
||||
font-weight: normal;
|
||||
font-size: 13px
|
||||
}
|
||||
.table-striped table thead {
|
||||
background-color: #eff3f8;
|
||||
}
|
||||
|
||||
.table-bordered td,.table-bordered th {
|
||||
border: 1px solid #ddd!important
|
||||
}
|
||||
|
||||
/** 首页样式 */
|
||||
.fixed-table-container thead th >.both{
|
||||
display: inline-block
|
||||
}
|
||||
|
||||
/** 首页样式 **/
|
||||
.ax_close_max {
|
||||
position: fixed;
|
||||
top: 5px;
|
||||
@@ -446,3 +647,71 @@ label {
|
||||
display: none;
|
||||
color: #ccc;
|
||||
}
|
||||
.navbar-right > .user-menu > .dropdown-menu {
|
||||
border-top-right-radius:0;
|
||||
border-top-left-radius:0;
|
||||
padding:1px 0 0 0;
|
||||
border-top-width:0;
|
||||
width:138px;
|
||||
}
|
||||
.navbar-right > .user-menu .user-image {
|
||||
float:left;
|
||||
width:27px;
|
||||
height:27px;
|
||||
border-radius:50%;
|
||||
margin-right:8px;
|
||||
margin-top:-3px;
|
||||
}
|
||||
@media (max-width:767px) {
|
||||
.navbar-right > .user-menu .user-image {
|
||||
float:none;
|
||||
margin-right:0;
|
||||
margin-top:-8px;
|
||||
line-height:10px;
|
||||
}
|
||||
}.dropdown-menu > li > a > .glyphicon,.dropdown-menu > li > a > .fa,.dropdown-menu > li > a > .ion {
|
||||
margin-right:10px;
|
||||
}
|
||||
.dropdown-menu > li > a:hover {
|
||||
background-color:#e1e3e9;
|
||||
color:#333;
|
||||
}
|
||||
.dropdown-menu > .divider {
|
||||
background-color:#eee;
|
||||
}
|
||||
|
||||
/** 表单布局 **/
|
||||
.form-header {
|
||||
font-size:15px;
|
||||
color:#6379bb;
|
||||
border-bottom:1px solid #ddd;
|
||||
margin:8px 10px 25px 10px;
|
||||
padding-bottom:5px
|
||||
}
|
||||
|
||||
.form-content {
|
||||
background-color: #ffffff;
|
||||
color: inherit;
|
||||
padding: 10px 15px 15px 15px;
|
||||
border-color: #e7eaec;
|
||||
-webkit-border-image: none;
|
||||
-o-border-image: none;
|
||||
border-image: none;
|
||||
border-width: 1px 0px;
|
||||
}
|
||||
|
||||
/** 表格跳转样式 **/
|
||||
.pageGo input {
|
||||
height: 32px;
|
||||
width: 50px;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
text-align: center;
|
||||
display: block;
|
||||
float:left;
|
||||
}
|
||||
.pageGo button {
|
||||
height: 32px;
|
||||
display: block;
|
||||
float:left;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
/**
|
||||
* 菜单处理
|
||||
* 首页方法封装处理
|
||||
* Copyright (c) 2019 ruoyi
|
||||
*/
|
||||
layer.config({
|
||||
extend: 'moon/style.css',
|
||||
skin: 'layer-ext-moon'
|
||||
});
|
||||
|
||||
$(function() {
|
||||
// MetsiMenu
|
||||
$('#side-menu').metisMenu();
|
||||
@@ -45,6 +51,7 @@ function() {
|
||||
if ($(this).width() < 769) {
|
||||
$('body').addClass('mini-navbar');
|
||||
$('.navbar-static-side').fadeIn();
|
||||
$(".sidebar-collapse .logo").addClass("hide");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -55,12 +62,14 @@ function NavToggle() {
|
||||
function SmoothlyMenu() {
|
||||
if (!$('body').hasClass('mini-navbar')) {
|
||||
$('#side-menu').hide();
|
||||
$(".sidebar-collapse .logo").removeClass("hide");
|
||||
setTimeout(function() {
|
||||
$('#side-menu').fadeIn(500);
|
||||
},
|
||||
100);
|
||||
} else if ($('body').hasClass('fixed-sidebar')) {
|
||||
$('#side-menu').hide();
|
||||
$(".sidebar-collapse .logo").addClass("hide");
|
||||
setTimeout(function() {
|
||||
$('#side-menu').fadeIn(500);
|
||||
},
|
||||
@@ -115,14 +124,14 @@ $(function() {
|
||||
|
||||
//查看左侧隐藏的选项卡
|
||||
function scrollTabLeft() {
|
||||
var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left')));
|
||||
var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left')) + 50);
|
||||
// 可视区域非tab宽度
|
||||
var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs"));
|
||||
//可视区域tab宽度
|
||||
var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
|
||||
//实际滚动宽度
|
||||
var scrollVal = 0;
|
||||
if ($(".page-tabs-content").width() < visibleWidth) {
|
||||
if (($(".page-tabs-content").width() + 50) < visibleWidth) {
|
||||
return false;
|
||||
} else {
|
||||
var tabElement = $(".menuTab:first");
|
||||
@@ -240,7 +249,7 @@ $(function() {
|
||||
function closeTab() {
|
||||
var closeTabId = $(this).parents('.menuTab').data('id');
|
||||
var currentWidth = $(this).parents('.menuTab').width();
|
||||
|
||||
var panelUrl = $(this).parents('.menuTab').data('panel');
|
||||
// 当前元素处于活动状态
|
||||
if ($(this).parents('.menuTab').hasClass('active')) {
|
||||
|
||||
@@ -298,6 +307,16 @@ $(function() {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if($.common.isNotEmpty(panelUrl)){
|
||||
$('.menuTab[data-id="' + panelUrl + '"]').addClass('active').siblings('.menuTab').removeClass('active');
|
||||
$('.mainContent .RuoYi_iframe').each(function() {
|
||||
if ($(this).data('id') == panelUrl) {
|
||||
$(this).show().siblings('.RuoYi_iframe').hide();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
// 当前元素不处于活动状态
|
||||
@@ -312,8 +331,8 @@ $(function() {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
scrollToTab($('.menuTab.active'));
|
||||
}
|
||||
scrollToTab($('.menuTab.active'));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
/**
|
||||
* 通用方法封装处理
|
||||
* Copyright (c) 2018 ruoyi
|
||||
* Copyright (c) 2019 ruoyi
|
||||
*/
|
||||
|
||||
$(function() {
|
||||
// select2复选框事件绑定
|
||||
if ($.fn.select2 !== undefined) {
|
||||
@@ -73,12 +72,18 @@ $(function() {
|
||||
layui.use('laydate', function() {
|
||||
var laydate = layui.laydate;
|
||||
var times = $(".time-input");
|
||||
// 控制控件外观
|
||||
var type = times.attr("data-type") || 'date';
|
||||
// 控制回显格式
|
||||
var format = times.attr("data-format") || 'yyyy-MM-dd';
|
||||
for (var i = 0; i < times.length; i++) {
|
||||
var time = times[i];
|
||||
laydate.render({
|
||||
elem: time,
|
||||
theme: 'molv',
|
||||
trigger: 'click',
|
||||
type: type,
|
||||
format: format,
|
||||
done: function(value, date) {}
|
||||
});
|
||||
}
|
||||
@@ -97,19 +102,15 @@ $(function() {
|
||||
$.tree.searchNode(e);
|
||||
}).bind("input propertychange", $.tree.searchNode);
|
||||
}
|
||||
// 复选框后按钮样式状态变更
|
||||
$("#bootstrap-table").on("check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table", function () {
|
||||
var ids = $("#bootstrap-table").bootstrapTable("getSelections");
|
||||
$('#toolbar .btn-del').toggleClass('disabled', !ids.length);
|
||||
$('#toolbar .btn-edit').toggleClass('disabled', ids.length!=1);;
|
||||
});
|
||||
// tree表格树 展开/折叠
|
||||
var expandFlag = false;
|
||||
var expandFlag;
|
||||
$("#expandAllBtn").click(function() {
|
||||
if (expandFlag) {
|
||||
$('#bootstrap-tree-table').bootstrapTreeTable('expandAll');
|
||||
var dataExpand = $.common.isEmpty($.table._option.expandAll) ? true : $.table._option.expandAll;
|
||||
expandFlag = $.common.isEmpty(expandFlag) ? dataExpand : expandFlag;
|
||||
if (!expandFlag) {
|
||||
$('#' + $.table._option.id).bootstrapTreeTable('expandAll');
|
||||
} else {
|
||||
$('#bootstrap-tree-table').bootstrapTreeTable('collapseAll');
|
||||
$('#' + $.table._option.id).bootstrapTreeTable('collapseAll');
|
||||
}
|
||||
expandFlag = expandFlag ? false: true;
|
||||
})
|
||||
@@ -124,8 +125,25 @@ var refreshItem = function(){
|
||||
target.attr('src', url).ready();
|
||||
}
|
||||
|
||||
/** 关闭选项卡 */
|
||||
var closeItem = function(){
|
||||
var topWindow = $(window.parent.document);
|
||||
var panelUrl = window.frameElement.getAttribute('data-panel');
|
||||
$('.page-tabs-content .active i', topWindow).click();
|
||||
if($.common.isNotEmpty(panelUrl)){
|
||||
$('.menuTab[data-id="' + panelUrl + '"]', topWindow).addClass('active').siblings('.menuTab').removeClass('active');
|
||||
$('.mainContent .RuoYi_iframe', topWindow).each(function() {
|
||||
if ($(this).data('id') == panelUrl) {
|
||||
$(this).show().siblings('.RuoYi_iframe').hide();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/** 创建选项卡 */
|
||||
function createMenuItem(dataUrl, menuName) {
|
||||
var panelUrl = window.frameElement.getAttribute('data-id');
|
||||
dataIndex = $.common.random(1,100),
|
||||
flag = true;
|
||||
if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false;
|
||||
@@ -150,12 +168,17 @@ function createMenuItem(dataUrl, menuName) {
|
||||
});
|
||||
// 选项卡菜单不存在
|
||||
if (flag) {
|
||||
var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
|
||||
var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '" data-panel="' + panelUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
|
||||
$('.menuTab', topWindow).removeClass('active');
|
||||
|
||||
// 添加选项卡对应的iframe
|
||||
var str1 = '<iframe class="RuoYi_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" seamless></iframe>';
|
||||
var str1 = '<iframe class="RuoYi_iframe" name="iframe' + dataIndex + '" width="100%" height="100%" src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" data-panel="' + panelUrl + '" seamless></iframe>';
|
||||
$('.mainContent', topWindow).find('iframe.RuoYi_iframe').hide().parents('.mainContent').append(str1);
|
||||
|
||||
window.parent.$.modal.loading("数据加载中,请稍后...");
|
||||
$('.mainContent iframe:visible', topWindow).load(function () {
|
||||
window.parent.$.modal.closeLoading();
|
||||
});
|
||||
|
||||
// 添加选项卡
|
||||
$('.menuTabs .page-tabs-content', topWindow).append(str);
|
||||
@@ -191,3 +214,7 @@ $.ajaxSetup({
|
||||
}
|
||||
}
|
||||
});
|
||||
layer.config({
|
||||
extend: 'moon/style.css',
|
||||
skin: 'layer-ext-moon'
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* 通用js方法封装处理
|
||||
* Copyright (c) 2018 ruoyi
|
||||
* Copyright (c) 2019 ruoyi
|
||||
*/
|
||||
(function ($) {
|
||||
$.extend({
|
||||
@@ -9,118 +9,289 @@
|
||||
// 表格封装处理
|
||||
table: {
|
||||
_option: {},
|
||||
_params: {},
|
||||
// 初始化表格参数
|
||||
init: function(options) {
|
||||
var defaults = {
|
||||
id: "bootstrap-table",
|
||||
type: 0, // 0 代表bootstrapTable 1代表bootstrapTreeTable
|
||||
height: undefined,
|
||||
sidePagination: "server",
|
||||
sortName: "",
|
||||
sortOrder: "asc",
|
||||
pagination: true,
|
||||
pageSize: 10,
|
||||
toolbar: "toolbar",
|
||||
striped: false,
|
||||
escape: false,
|
||||
showFooter: false,
|
||||
search: false,
|
||||
showSearch: true,
|
||||
showPageGo: false,
|
||||
showRefresh: true,
|
||||
showColumns: true,
|
||||
showToggle: true,
|
||||
showExport: false,
|
||||
clickToSelect: false,
|
||||
rememberSelected: false,
|
||||
fixedColumns: false,
|
||||
fixedNumber: 0,
|
||||
rightFixedColumns: false,
|
||||
rightFixedNumber: 0,
|
||||
queryParams: $.table.queryParams,
|
||||
};
|
||||
var options = $.extend(defaults, options);
|
||||
$.table._option = options;
|
||||
$.table._params = $.common.isEmpty(options.queryParams) ? $.table.queryParams : options.queryParams;
|
||||
_sortOrder = $.common.isEmpty(options.sortOrder) ? "asc" : options.sortOrder;
|
||||
_sortName = $.common.isEmpty(options.sortName) ? "" : options.sortName;
|
||||
_striped = $.common.isEmpty(options.striped) ? false : options.striped;
|
||||
_escape = $.common.isEmpty(options.escape) ? false : options.escape;
|
||||
$('#bootstrap-table').bootstrapTable({
|
||||
$('#' + options.id).bootstrapTable({
|
||||
url: options.url, // 请求后台的URL(*)
|
||||
contentType: "application/x-www-form-urlencoded", // 编码类型
|
||||
method: 'post', // 请求方式(*)
|
||||
cache: false, // 是否使用缓存
|
||||
striped: _striped, // 是否显示行间隔色
|
||||
height: options.height, // 表格的高度
|
||||
striped: options.striped, // 是否显示行间隔色
|
||||
sortable: true, // 是否启用排序
|
||||
sortStable: true, // 设置为 true 将获得稳定的排序
|
||||
sortName: _sortName, // 排序列名称
|
||||
sortOrder: _sortOrder, // 排序方式 asc 或者 desc
|
||||
pagination: $.common.visible(options.pagination), // 是否显示分页(*)
|
||||
sortName: options.sortName, // 排序列名称
|
||||
sortOrder: options.sortOrder, // 排序方式 asc 或者 desc
|
||||
pagination: options.pagination, // 是否显示分页(*)
|
||||
pageNumber: 1, // 初始化加载第一页,默认第一页
|
||||
pageSize: 10, // 每页的记录行数(*)
|
||||
pageSize: options.pageSize, // 每页的记录行数(*)
|
||||
pageList: [10, 25, 50], // 可供选择的每页的行数(*)
|
||||
escape: _escape, // 转义HTML字符串
|
||||
escape: options.escape, // 转义HTML字符串
|
||||
showFooter: options.showFooter, // 是否显示表尾
|
||||
iconSize: 'outline', // 图标大小:undefined默认的按钮尺寸 xs超小按钮sm小按钮lg大按钮
|
||||
toolbar: '#toolbar', // 指定工作栏
|
||||
sidePagination: "server", // 启用服务端分页
|
||||
search: $.common.visible(options.search), // 是否显示搜索框功能
|
||||
showSearch: $.common.visible(options.showSearch), // 是否显示检索信息
|
||||
showRefresh: $.common.visible(options.showRefresh), // 是否显示刷新按钮
|
||||
showColumns: $.common.visible(options.showColumns), // 是否显示隐藏某列下拉框
|
||||
showToggle: $.common.visible(options.showToggle), // 是否显示详细视图和列表视图的切换按钮
|
||||
showExport: $.common.visible(options.showExport), // 是否支持导出文件
|
||||
queryParams: $.table._params, // 传递参数(*)
|
||||
toolbar: '#' + options.toolbar, // 指定工作栏
|
||||
sidePagination: options.sidePagination, // server启用服务端分页client客户端分页
|
||||
search: options.search, // 是否显示搜索框功能
|
||||
showSearch: options.showSearch, // 是否显示检索信息
|
||||
showPageGo: options.showPageGo, // 是否显示跳转页
|
||||
showRefresh: options.showRefresh, // 是否显示刷新按钮
|
||||
showColumns: options.showColumns, // 是否显示隐藏某列下拉框
|
||||
showToggle: options.showToggle, // 是否显示详细视图和列表视图的切换按钮
|
||||
showExport: options.showExport, // 是否支持导出文件
|
||||
clickToSelect: options.clickToSelect, // 是否启用点击选中行
|
||||
rememberSelected: options.rememberSelected, // 启用翻页记住前面的选择
|
||||
fixedColumns: options.fixedColumns, // 是否启用冻结列(左侧)
|
||||
fixedNumber: options.fixedNumber, // 列冻结的个数(左侧)
|
||||
rightFixedColumns: options.rightFixedColumns, // 是否启用冻结列(右侧)
|
||||
rightFixedNumber: options.rightFixedNumber, // 列冻结的个数(右侧)
|
||||
queryParams: options.queryParams, // 传递参数(*)
|
||||
columns: options.columns, // 显示列信息(*)
|
||||
responseHandler: $.table.responseHandler // 回调函数
|
||||
responseHandler: $.table.responseHandler, // 在加载服务器发送来的数据之前处理函数
|
||||
onLoadSuccess: $.table.onLoadSuccess, // 当所有数据被加载时触发处理函数
|
||||
});
|
||||
},
|
||||
// 查询条件
|
||||
queryParams: function(params) {
|
||||
return {
|
||||
// 传递参数查询参数
|
||||
pageSize: params.limit,
|
||||
pageNum: params.offset / params.limit + 1,
|
||||
searchValue: params.search,
|
||||
orderByColumn: params.sort,
|
||||
isAsc: params.order
|
||||
pageSize: params.limit,
|
||||
pageNum: params.offset / params.limit + 1,
|
||||
searchValue: params.search,
|
||||
orderByColumn: params.sort,
|
||||
isAsc: params.order
|
||||
};
|
||||
},
|
||||
// 请求获取数据后处理回调函数
|
||||
responseHandler: function(res) {
|
||||
if (res.code == 0) {
|
||||
return { rows: res.rows, total: res.total };
|
||||
if ($.common.isNotEmpty($.table._option.sidePagination) && $.table._option.sidePagination == 'client') {
|
||||
return res.rows;
|
||||
} else {
|
||||
return { rows: res.rows, total: res.total };
|
||||
}
|
||||
} else {
|
||||
$.modal.alertWarning(res.msg);
|
||||
return { rows: [], total: 0 };
|
||||
$.modal.alertWarning(res.msg);
|
||||
return { rows: [], total: 0 };
|
||||
}
|
||||
},
|
||||
// 当所有数据被加载时触发
|
||||
onLoadSuccess: function(data) {
|
||||
// 浮动提示框特效
|
||||
$("[data-toggle='tooltip']").tooltip();
|
||||
// 触发行点击事件 加载成功事件
|
||||
$("#" + $.table._option.id).on("check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table load-success.bs.table", function () {
|
||||
// 工具栏按钮控制
|
||||
var rows = $.common.isEmpty($.table._option.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.uniqueId);
|
||||
$('#' + $.table._option.toolbar + ' .btn-del').toggleClass('disabled', !rows.length);
|
||||
$('#' + $.table._option.toolbar + ' .btn-edit').toggleClass('disabled', rows.length!=1);
|
||||
});
|
||||
// 绑定选中事件、取消事件、全部选中、全部取消
|
||||
$("#" + $.table._option.id).on("check.bs.table check-all.bs.table uncheck.bs.table uncheck-all.bs.table", function (e, rows) {
|
||||
// 复选框分页保留保存选中数组
|
||||
var rows = $.common.isEmpty($.table._option.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.uniqueId);
|
||||
if ($.common.isNotEmpty($.table._option.rememberSelected) && $.table._option.rememberSelected) {
|
||||
func = $.inArray(e.type, ['check', 'check-all']) > -1 ? 'union' : 'difference';
|
||||
selectionIds = _[func](selectionIds, rows);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 表格销毁
|
||||
destroy: function (tableId) {
|
||||
var currentId = $.common.isEmpty(tableId) ? $.table._option.id : tableId;
|
||||
$("#" + currentId).bootstrapTable('destroy');
|
||||
},
|
||||
// 序列号生成
|
||||
serialNumber: function (index) {
|
||||
var table = $('#' + $.table._option.id).bootstrapTable('getOptions');
|
||||
var pageSize = table.pageSize;
|
||||
var pageNumber = table.pageNumber;
|
||||
return pageSize * (pageNumber - 1) + index + 1;
|
||||
},
|
||||
// 列超出指定长度浮动提示
|
||||
tooltip: function (value, length) {
|
||||
var _length = $.common.isEmpty(length) ? 20 : length;
|
||||
var _text = "";
|
||||
var _value = $.common.nullToStr(value);
|
||||
if (_value.length > _length) {
|
||||
_text = _value.substr(0, _length) + "...";
|
||||
} else {
|
||||
_text = _value;
|
||||
}
|
||||
return '<a href="#" class="tooltip-show" data-toggle="tooltip" title="' + _value + '">' + _text +'</a>';
|
||||
},
|
||||
// 下拉按钮切换
|
||||
dropdownToggle: function (value) {
|
||||
var actions = [];
|
||||
actions.push('<div class="btn-group">');
|
||||
actions.push('<button type="button" class="btn btn-xs dropdown-toggle" data-toggle="dropdown" aria-expanded="false">');
|
||||
actions.push('<i class="fa fa-cog"></i> <span class="fa fa-chevron-down"></span></button>');
|
||||
actions.push('<ul class="dropdown-menu">');
|
||||
actions.push(value.replace(/<a/g,"<li><a").replace(/<\/a>/g,"</a></li>"));
|
||||
actions.push('</ul>');
|
||||
actions.push('</div>');
|
||||
return actions.join('');
|
||||
},
|
||||
// 搜索-默认第一个form
|
||||
search: function(formId) {
|
||||
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
|
||||
var params = $("#bootstrap-table").bootstrapTable('getOptions');
|
||||
var params = $("#" + $.table._option.id).bootstrapTable('getOptions');
|
||||
params.queryParams = function(params) {
|
||||
var search = {};
|
||||
$.each($("#" + currentId).serializeArray(), function(i, field) {
|
||||
search[field.name] = field.value;
|
||||
});
|
||||
search.pageSize = params.limit;
|
||||
search.pageNum = params.offset / params.limit + 1;
|
||||
search.searchValue = params.search;
|
||||
search.orderByColumn = params.sort;
|
||||
search.isAsc = params.order;
|
||||
var search = {};
|
||||
$.each($("#" + currentId).serializeArray(), function(i, field) {
|
||||
search[field.name] = field.value;
|
||||
});
|
||||
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;
|
||||
}
|
||||
$("#bootstrap-table").bootstrapTable('refresh', params);
|
||||
$("#" + $.table._option.id).bootstrapTable('refresh', params);
|
||||
},
|
||||
// 下载-默认第一个form
|
||||
// 导出数据
|
||||
exportExcel: function(formId) {
|
||||
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
|
||||
$.modal.loading("正在导出数据,请稍后...");
|
||||
$.post($.table._option.exportUrl, $("#" + currentId).serializeArray(), function(result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
window.location.href = ctx + "common/download?fileName=" + result.msg + "&delete=" + true;
|
||||
} else {
|
||||
$.modal.alertError(result.msg);
|
||||
}
|
||||
$.modal.closeLoading();
|
||||
$.modal.confirm("确定导出所有" + $.table._option.modalName + "吗?", function() {
|
||||
var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
|
||||
$.modal.loading("正在导出数据,请稍后...");
|
||||
$.post($.table._option.exportUrl, $("#" + currentId).serializeArray(), function(result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
|
||||
} else if (result.code == web_status.WARNING) {
|
||||
$.modal.alertWarning(result.msg)
|
||||
} else {
|
||||
$.modal.alertError(result.msg);
|
||||
}
|
||||
$.modal.closeLoading();
|
||||
});
|
||||
});
|
||||
},
|
||||
// 下载模板
|
||||
importTemplate: function() {
|
||||
$.get($.table._option.importTemplateUrl, function(result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
|
||||
} else if (result.code == web_status.WARNING) {
|
||||
$.modal.alertWarning(result.msg)
|
||||
} else {
|
||||
$.modal.alertError(result.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 导入数据
|
||||
importExcel: function(formId) {
|
||||
var currentId = $.common.isEmpty(formId) ? 'importForm' : formId;
|
||||
$.form.reset(currentId);
|
||||
layer.open({
|
||||
type: 1,
|
||||
area: ['400px', '230px'],
|
||||
fix: false,
|
||||
//不固定
|
||||
maxmin: true,
|
||||
shade: 0.3,
|
||||
title: '导入' + $.table._option.modalName + '数据',
|
||||
content: $('#' + currentId),
|
||||
btn: ['<i class="fa fa-check"></i> 导入', '<i class="fa fa-remove"></i> 取消'],
|
||||
// 弹层外区域关闭
|
||||
shadeClose: true,
|
||||
btn1: function(index, layero){
|
||||
var file = layero.find('#file').val();
|
||||
if (file == '' || (!$.common.endWith(file, '.xls') && !$.common.endWith(file, '.xlsx'))){
|
||||
$.modal.msgWarning("请选择后缀为 “xls”或“xlsx”的文件。");
|
||||
return false;
|
||||
}
|
||||
var index = layer.load(2, {shade: false});
|
||||
$.modal.disable();
|
||||
var formData = new FormData();
|
||||
formData.append("file", $('#file')[0].files[0]);
|
||||
formData.append("updateSupport", $("input[name='updateSupport']").is(':checked'));
|
||||
$.ajax({
|
||||
url: $.table._option.importUrl,
|
||||
data: formData,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
type: 'POST',
|
||||
success: function (result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
$.modal.closeAll();
|
||||
$.modal.alertSuccess(result.msg);
|
||||
$.table.refresh();
|
||||
} else if (result.code == web_status.WARNING) {
|
||||
layer.close(index);
|
||||
$.modal.enable();
|
||||
$.modal.alertWarning(result.msg)
|
||||
} else {
|
||||
layer.close(index);
|
||||
$.modal.enable();
|
||||
$.modal.alertError(result.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
// 刷新表格
|
||||
refresh: function() {
|
||||
$("#bootstrap-table").bootstrapTable('refresh', {
|
||||
$("#" + $.table._option.id).bootstrapTable('refresh', {
|
||||
silent: true
|
||||
});
|
||||
},
|
||||
// 查询表格指定列值
|
||||
selectColumns: function(column) {
|
||||
return $.map($('#bootstrap-table').bootstrapTable('getSelections'), function (row) {
|
||||
var rows = $.map($('#' + $.table._option.id).bootstrapTable('getSelections'), function (row) {
|
||||
return row[column];
|
||||
});
|
||||
if ($.common.isNotEmpty($.table._option.rememberSelected) && $.table._option.rememberSelected) {
|
||||
rows = rows.concat(selectionIds);
|
||||
}
|
||||
return $.common.uniqueFn(rows);
|
||||
},
|
||||
// 查询表格首列值
|
||||
selectFirstColumns: function() {
|
||||
return $.map($('#bootstrap-table').bootstrapTable('getSelections'), function (row) {
|
||||
var rows = $.map($('#' + $.table._option.id).bootstrapTable('getSelections'), function (row) {
|
||||
return row[$.table._option.columns[1].field];
|
||||
});
|
||||
if ($.common.isNotEmpty($.table._option.rememberSelected) && $.table._option.rememberSelected) {
|
||||
rows = rows.concat(selectionIds);
|
||||
}
|
||||
return $.common.uniqueFn(rows);
|
||||
},
|
||||
// 回显数据字典
|
||||
selectDictLabel: function(datas, value) {
|
||||
var actions = [];
|
||||
$.each(datas, function(index, dict) {
|
||||
if (dict.dictValue == value) {
|
||||
if (dict.dictValue == ('' + value)) {
|
||||
actions.push("<span class='badge badge-" + dict.listClass + "'>" + dict.dictLabel + "</span>");
|
||||
return false;
|
||||
}
|
||||
@@ -129,35 +300,49 @@
|
||||
},
|
||||
// 显示表格指定列
|
||||
showColumn: function(column) {
|
||||
$("#bootstrap-table").bootstrapTable('showColumn', column);
|
||||
$("#" + $.table._option.id).bootstrapTable('showColumn', column);
|
||||
},
|
||||
// 隐藏表格指定列
|
||||
hideColumn: function(column) {
|
||||
$("#bootstrap-table").bootstrapTable('hideColumn', column);
|
||||
$("#" + $.table._option.id).bootstrapTable('hideColumn', column);
|
||||
}
|
||||
},
|
||||
// 表格树封装处理
|
||||
treeTable: {
|
||||
_option: {},
|
||||
// 初始化表格
|
||||
init: function(options) {
|
||||
var defaults = {
|
||||
id: "bootstrap-tree-table",
|
||||
type: 1, // 0 代表bootstrapTable 1代表bootstrapTreeTable
|
||||
height: 0,
|
||||
rootIdValue: null,
|
||||
ajaxParams: {},
|
||||
toolbar: "toolbar",
|
||||
striped: false,
|
||||
expandColumn: 1,
|
||||
showRefresh: true,
|
||||
showColumns: true,
|
||||
expandAll: true,
|
||||
expandFirst: true
|
||||
};
|
||||
var options = $.extend(defaults, options);
|
||||
$.table._option = options;
|
||||
_striped = $.common.isEmpty(options.striped) ? false : options.striped;
|
||||
_expandColumn = $.common.isEmpty(options.expandColumn) ? '1' : options.expandColumn;
|
||||
var treeTable = $('#bootstrap-tree-table').bootstrapTreeTable({
|
||||
var treeTable = $('#' + options.id).bootstrapTreeTable({
|
||||
code: options.code, // 用于设置父子关系
|
||||
parentCode: options.parentCode, // 用于设置父子关系
|
||||
type: 'get', // 请求方式(*)
|
||||
url: options.url, // 请求后台的URL(*)
|
||||
ajaxParams: {}, // 请求数据的ajax的data属性
|
||||
expandColumn: _expandColumn, // 在哪一列上面显示展开按钮
|
||||
striped: _striped, // 是否显示行间隔色
|
||||
ajaxParams: options.ajaxParams, // 请求数据的ajax的data属性
|
||||
rootIdValue: options.rootIdValue, // 设置指定根节点id值
|
||||
height: options.height, // 表格树的高度
|
||||
expandColumn: options.expandColumn, // 在哪一列上面显示展开按钮
|
||||
striped: options.striped, // 是否显示行间隔色
|
||||
bordered: true, // 是否显示边框
|
||||
toolbar: '#toolbar', // 指定工作栏
|
||||
showRefresh: $.common.visible(options.showRefresh), // 是否显示刷新按钮
|
||||
showColumns: $.common.visible(options.showColumns), // 是否显示隐藏某列下拉框
|
||||
expandAll: $.common.visible(options.expandAll), // 是否全部展开
|
||||
expandFirst: $.common.visible(options.expandFirst), // 是否默认第一级展开--expandAll为false时生效
|
||||
toolbar: '#' + options.toolbar, // 指定工作栏
|
||||
showRefresh: options.showRefresh, // 是否显示刷新按钮
|
||||
showColumns: options.showColumns, // 是否显示隐藏某列下拉框
|
||||
expandAll: options.expandAll, // 是否全部展开
|
||||
expandFirst: options.expandFirst, // 是否默认第一级展开--expandAll为false时生效
|
||||
columns: options.columns
|
||||
});
|
||||
$._treeTable = treeTable;
|
||||
@@ -281,6 +466,10 @@
|
||||
var index = parent.layer.getFrameIndex(window.name);
|
||||
parent.layer.close(index);
|
||||
},
|
||||
// 关闭全部窗体
|
||||
closeAll: function () {
|
||||
layer.closeAll();
|
||||
},
|
||||
// 确认窗体
|
||||
confirm: function (content, callBack) {
|
||||
layer.confirm(content, {
|
||||
@@ -294,7 +483,7 @@
|
||||
});
|
||||
},
|
||||
// 弹出层指定宽度
|
||||
open: function (title, url, width, height) {
|
||||
open: function (title, url, width, height, callback) {
|
||||
//如果是移动端,就使用自适应大小弹窗
|
||||
if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {
|
||||
width = 'auto';
|
||||
@@ -312,6 +501,12 @@
|
||||
if ($.common.isEmpty(height)) {
|
||||
height = ($(window).height() - 50);
|
||||
};
|
||||
if ($.common.isEmpty(callback)) {
|
||||
callback = function(index, layero) {
|
||||
var iframeWin = layero.find('iframe')[0];
|
||||
iframeWin.contentWindow.submitHandler();
|
||||
}
|
||||
}
|
||||
layer.open({
|
||||
type: 2,
|
||||
area: [width + 'px', height + 'px'],
|
||||
@@ -324,10 +519,7 @@
|
||||
btn: ['确定', '关闭'],
|
||||
// 弹层外区域关闭
|
||||
shadeClose: true,
|
||||
yes: function(index, layero) {
|
||||
var iframeWin = layero.find('iframe')[0];
|
||||
iframeWin.contentWindow.submitHandler();
|
||||
},
|
||||
yes: callback,
|
||||
cancel: function(index) {
|
||||
return true;
|
||||
}
|
||||
@@ -384,11 +576,33 @@
|
||||
shade: 0.3,
|
||||
title: title,
|
||||
content: url,
|
||||
btn: ['确定', '关闭'],
|
||||
// 弹层外区域关闭
|
||||
shadeClose: true
|
||||
shadeClose: true,
|
||||
yes: function(index, layero) {
|
||||
var iframeWin = layero.find('iframe')[0];
|
||||
iframeWin.contentWindow.submitHandler();
|
||||
},
|
||||
cancel: function(index) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
layer.full(index);
|
||||
},
|
||||
// 选卡页方式打开
|
||||
openTab: function (title, url) {
|
||||
createMenuItem(url, title);
|
||||
},
|
||||
// 禁用按钮
|
||||
disable: function() {
|
||||
var doc = window.top == window.parent ? window.document : window.parent.document;
|
||||
$("a[class*=layui-layer-btn]", doc).addClass("layer-disabled");
|
||||
},
|
||||
// 启用按钮
|
||||
enable: function() {
|
||||
var doc = window.top == window.parent ? window.document : window.parent.document;
|
||||
$("a[class*=layui-layer-btn]", doc).removeClass("layer-disabled");
|
||||
},
|
||||
// 打开遮罩层
|
||||
loading: function (message) {
|
||||
$.blockUI({ message: '<div class="loaderbox"><div class="loading-activity"></div> ' + message + '</div>' });
|
||||
@@ -408,12 +622,14 @@
|
||||
operate: {
|
||||
// 提交数据
|
||||
submit: function(url, type, dataType, data) {
|
||||
$.modal.loading("正在处理中,请稍后...");
|
||||
var config = {
|
||||
url: url,
|
||||
type: type,
|
||||
dataType: dataType,
|
||||
data: data,
|
||||
beforeSend: function () {
|
||||
$.modal.loading("正在处理中,请稍后...");
|
||||
},
|
||||
success: function(result) {
|
||||
$.operate.ajaxSuccess(result);
|
||||
}
|
||||
@@ -424,6 +640,10 @@
|
||||
post: function(url, data) {
|
||||
$.operate.submit(url, "post", "json", data);
|
||||
},
|
||||
// get请求传输
|
||||
get: function(url) {
|
||||
$.operate.submit(url, "get", "json", "");
|
||||
},
|
||||
// 详细信息
|
||||
detail: function(id, width, height) {
|
||||
var _url = $.common.isEmpty(id) ? $.table._option.detailUrl : $.table._option.detailUrl.replace("{id}", id);
|
||||
@@ -443,24 +663,26 @@
|
||||
shade: 0.3,
|
||||
title: $.table._option.modalName + "详细",
|
||||
content: _url,
|
||||
btn: '关闭',
|
||||
btn: ['关闭'],
|
||||
// 弹层外区域关闭
|
||||
shadeClose: true,
|
||||
success: function(layer) {
|
||||
layer[0].childNodes[3].childNodes[0].attributes[0].value='layui-layer-btn1';
|
||||
},
|
||||
btn1: function(index) {
|
||||
layer.close(index);
|
||||
}
|
||||
cancel: function(index){
|
||||
return true;
|
||||
}
|
||||
});
|
||||
},
|
||||
// 删除信息
|
||||
remove: function(id) {
|
||||
$.modal.confirm("确定删除该条" + $.table._option.modalName + "信息吗?", function() {
|
||||
var url = $.common.isEmpty(id) ? $.table._option.removeUrl : $.table._option.removeUrl.replace("{id}", id);
|
||||
var data = { "ids": id };
|
||||
$.operate.submit(url, "post", "json", data);
|
||||
var url = $.common.isEmpty(id) ? $.table._option.removeUrl : $.table._option.removeUrl.replace("{id}", id);
|
||||
if($.table._option.type == table_type.bootstrapTreeTable) {
|
||||
$.operate.get(url);
|
||||
} else {
|
||||
var data = { "ids": id };
|
||||
$.operate.submit(url, "post", "json", data);
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
// 批量删除信息
|
||||
removeAll: function() {
|
||||
@@ -484,39 +706,40 @@
|
||||
},
|
||||
// 添加信息
|
||||
add: function(id) {
|
||||
var url = $.common.isEmpty(id) ? $.table._option.createUrl : $.table._option.createUrl.replace("{id}", id);
|
||||
$.modal.open("添加" + $.table._option.modalName, url);
|
||||
$.modal.open("添加" + $.table._option.modalName, $.operate.addUrl(id));
|
||||
},
|
||||
// 修改信息
|
||||
edit: function(id) {
|
||||
var url = "/404.html";
|
||||
if ($.common.isNotEmpty(id)) {
|
||||
url = $.table._option.updateUrl.replace("{id}", id);
|
||||
} else {
|
||||
var id = $.common.isEmpty($.table._option.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.uniqueId);
|
||||
if (id.length == 0) {
|
||||
$.modal.alertWarning("请至少选择一条记录");
|
||||
return;
|
||||
}
|
||||
url = $.table._option.updateUrl.replace("{id}", id);
|
||||
}
|
||||
$.modal.open("修改" + $.table._option.modalName, url);
|
||||
},
|
||||
// 工具栏表格树修改
|
||||
editTree: function() {
|
||||
var row = $('#bootstrap-tree-table').bootstrapTreeTable('getSelections')[0];
|
||||
if ($.common.isEmpty(row)) {
|
||||
$.modal.alertWarning("请至少选择一条记录");
|
||||
return;
|
||||
}
|
||||
var url = $.table._option.updateUrl.replace("{id}", row[$.table._option.uniqueId]);
|
||||
$.modal.open("修改" + $.table._option.modalName, url);
|
||||
// 添加信息,以tab页展现
|
||||
addTab: function (id) {
|
||||
$.modal.openTab("添加" + $.table._option.modalName, $.operate.addUrl(id));
|
||||
},
|
||||
// 添加信息 全屏
|
||||
addFull: function(id) {
|
||||
var url = $.common.isEmpty(id) ? $.table._option.createUrl : $.table._option.createUrl.replace("{id}", id);
|
||||
$.modal.openFull("添加" + $.table._option.modalName, url);
|
||||
},
|
||||
// 添加访问地址
|
||||
addUrl: function(id) {
|
||||
var url = $.common.isEmpty(id) ? $.table._option.createUrl : $.table._option.createUrl.replace("{id}", id);
|
||||
return url;
|
||||
},
|
||||
// 修改信息
|
||||
edit: function(id) {
|
||||
if($.common.isEmpty(id) && $.table._option.type == table_type.bootstrapTreeTable) {
|
||||
var row = $('#' + $.table._option.id).bootstrapTreeTable('getSelections')[0];
|
||||
if ($.common.isEmpty(row)) {
|
||||
$.modal.alertWarning("请至少选择一条记录");
|
||||
return;
|
||||
}
|
||||
var url = $.table._option.updateUrl.replace("{id}", row[$.table._option.uniqueId]);
|
||||
$.modal.open("修改" + $.table._option.modalName, url);
|
||||
} else {
|
||||
$.modal.open("修改" + $.table._option.modalName, $.operate.editUrl(id));
|
||||
}
|
||||
},
|
||||
// 修改信息,以tab页展现
|
||||
editTab: function(id) {
|
||||
$.modal.openTab("修改" + $.table._option.modalName, $.operate.editUrl(id));
|
||||
},
|
||||
// 修改信息 全屏
|
||||
editFull: function(id) {
|
||||
var url = "/404.html";
|
||||
@@ -528,26 +751,88 @@
|
||||
}
|
||||
$.modal.openFull("修改" + $.table._option.modalName, url);
|
||||
},
|
||||
// 保存信息
|
||||
// 修改访问地址
|
||||
editUrl: function(id) {
|
||||
var url = "/404.html";
|
||||
if ($.common.isNotEmpty(id)) {
|
||||
url = $.table._option.updateUrl.replace("{id}", id);
|
||||
} else {
|
||||
var id = $.common.isEmpty($.table._option.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.uniqueId);
|
||||
if (id.length == 0) {
|
||||
$.modal.alertWarning("请至少选择一条记录");
|
||||
return;
|
||||
}
|
||||
url = $.table._option.updateUrl.replace("{id}", id);
|
||||
}
|
||||
return url;
|
||||
},
|
||||
// 保存信息 刷新表格
|
||||
save: function(url, data) {
|
||||
$.modal.loading("正在处理中,请稍后...");
|
||||
var config = {
|
||||
url: url,
|
||||
type: "post",
|
||||
dataType: "json",
|
||||
data: data,
|
||||
beforeSend: function () {
|
||||
$.modal.loading("正在处理中,请稍后...");
|
||||
$.modal.disable();
|
||||
},
|
||||
success: function(result) {
|
||||
$.operate.successCallback(result);
|
||||
}
|
||||
};
|
||||
$.ajax(config)
|
||||
},
|
||||
// 保存信息 弹出提示框
|
||||
saveModal: function(url, data) {
|
||||
var config = {
|
||||
url: url,
|
||||
type: "post",
|
||||
dataType: "json",
|
||||
data: data,
|
||||
beforeSend: function () {
|
||||
$.modal.loading("正在处理中,请稍后...");
|
||||
},
|
||||
success: function(result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
$.modal.alertSuccess(result.msg)
|
||||
} else if (result.code == web_status.WARNING) {
|
||||
$.modal.alertWarning(result.msg)
|
||||
} else {
|
||||
$.modal.alertError(result.msg);
|
||||
}
|
||||
$.modal.closeLoading();
|
||||
}
|
||||
};
|
||||
$.ajax(config)
|
||||
},
|
||||
// 保存选项卡信息
|
||||
saveTab: function(url, data) {
|
||||
var config = {
|
||||
url: url,
|
||||
type: "post",
|
||||
dataType: "json",
|
||||
data: data,
|
||||
beforeSend: function () {
|
||||
$.modal.loading("正在处理中,请稍后...");
|
||||
},
|
||||
success: function(result) {
|
||||
$.operate.successTabCallback(result);
|
||||
}
|
||||
};
|
||||
$.ajax(config)
|
||||
},
|
||||
// 保存结果弹出msg刷新table表格
|
||||
ajaxSuccess: function (result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
if (result.code == web_status.SUCCESS && $.table._option.type == table_type.bootstrapTable) {
|
||||
$.modal.msgSuccess(result.msg);
|
||||
$.table.refresh();
|
||||
} else {
|
||||
} else if (result.code == web_status.SUCCESS && $.table._option.type == table_type.bootstrapTreeTable) {
|
||||
$.modal.msgSuccess(result.msg);
|
||||
$.treeTable.refresh();
|
||||
} else if (result.code == web_status.WARNING) {
|
||||
$.modal.alertWarning(result.msg)
|
||||
} else {
|
||||
$.modal.alertError(result.msg);
|
||||
}
|
||||
$.modal.closeLoading();
|
||||
@@ -556,7 +841,9 @@
|
||||
saveSuccess: function (result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
$.modal.msgReload("保存成功,正在刷新数据请稍后……", modal_status.SUCCESS);
|
||||
} else {
|
||||
} else if (result.code == web_status.WARNING) {
|
||||
$.modal.alertWarning(result.msg)
|
||||
} else {
|
||||
$.modal.alertError(result.msg);
|
||||
}
|
||||
$.modal.closeLoading();
|
||||
@@ -564,17 +851,43 @@
|
||||
// 成功回调执行事件(父窗体静默更新)
|
||||
successCallback: function(result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
if (window.parent.$("#bootstrap-table").length > 0) {
|
||||
var parent = window.parent;
|
||||
if (parent.$.table._option.type == table_type.bootstrapTable) {
|
||||
$.modal.close();
|
||||
window.parent.$.modal.msgSuccess(result.msg);
|
||||
window.parent.$.table.refresh();
|
||||
} else if (window.parent.$("#bootstrap-tree-table").length > 0) {
|
||||
parent.$.modal.msgSuccess(result.msg);
|
||||
parent.$.table.refresh();
|
||||
} else if (parent.$.table._option.type == table_type.bootstrapTreeTable) {
|
||||
$.modal.close();
|
||||
window.parent.$.modal.msgSuccess(result.msg);
|
||||
window.parent.$.treeTable.refresh();
|
||||
parent.$.modal.msgSuccess(result.msg);
|
||||
parent.$.treeTable.refresh();
|
||||
} else {
|
||||
$.modal.msgReload("保存成功,正在刷新数据请稍后……", modal_status.SUCCESS);
|
||||
}
|
||||
} else if (result.code == web_status.WARNING) {
|
||||
$.modal.alertWarning(result.msg)
|
||||
} else {
|
||||
$.modal.alertError(result.msg);
|
||||
}
|
||||
$.modal.closeLoading();
|
||||
$.modal.enable();
|
||||
},
|
||||
// 选项卡成功回调执行事件(父窗体静默更新)
|
||||
successTabCallback: function(result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
var topWindow = $(window.parent.document);
|
||||
var currentId = $('.page-tabs-content', topWindow).find('.active').attr('data-panel');
|
||||
var $contentWindow = $('.RuoYi_iframe[data-id="' + currentId + '"]', topWindow)[0].contentWindow;
|
||||
$.modal.close();
|
||||
$contentWindow.$.modal.msgSuccess(result.msg);
|
||||
$contentWindow.$(".layui-layer-padding").removeAttr("style");
|
||||
if ($contentWindow.$.table._option.type == table_type.bootstrapTable) {
|
||||
$contentWindow.$.table.refresh();
|
||||
} else if ($contentWindow.$.table._option.type == table_type.bootstrapTreeTable) {
|
||||
$contentWindow.$.treeTable.refresh();
|
||||
}
|
||||
closeItem();
|
||||
} else if (result.code == web_status.WARNING) {
|
||||
$.modal.alertWarning(result.msg)
|
||||
} else {
|
||||
$.modal.alertError(result.msg);
|
||||
}
|
||||
@@ -602,54 +915,56 @@
|
||||
_lastValue: {},
|
||||
// 初始化树结构
|
||||
init: function(options) {
|
||||
var defaults = {
|
||||
id: "tree", // 属性ID
|
||||
expandLevel: 0, // 展开等级节点
|
||||
view: {
|
||||
selectedMulti: false, // 设置是否允许同时选中多个节点
|
||||
nameIsHTML: true // 设置 name 属性是否支持 HTML 脚本
|
||||
},
|
||||
check: {
|
||||
enable: false, // 置 zTree 的节点上是否显示 checkbox / radio
|
||||
nocheckInherit: true, // 设置子节点是否自动继承
|
||||
},
|
||||
data: {
|
||||
key: {
|
||||
title: "title" // 节点数据保存节点提示信息的属性名称
|
||||
},
|
||||
simpleData: {
|
||||
enable: true // true / false 分别表示 使用 / 不使用 简单数据模式
|
||||
}
|
||||
},
|
||||
};
|
||||
var options = $.extend(defaults, options);
|
||||
$.tree._option = options;
|
||||
// 属性ID
|
||||
var _id = $.common.isEmpty(options.id) ? "tree" : options.id;
|
||||
// 展开等级节点
|
||||
var _expandLevel = $.common.isEmpty(options.expandLevel) ? 0 : options.expandLevel;
|
||||
// 树结构初始化加载
|
||||
var setting = {
|
||||
check: options.check,
|
||||
view: { selectedMulti: false, nameIsHTML: true },
|
||||
data: { key: { title: "title" }, simpleData: { enable: true } },
|
||||
callback: { onClick: options.onClick }
|
||||
};
|
||||
var setting = {
|
||||
callback: {
|
||||
onClick: options.onClick, // 用于捕获节点被点击的事件回调函数
|
||||
onCheck: options.onCheck, // 用于捕获 checkbox / radio 被勾选 或 取消勾选的事件回调函数
|
||||
onDblClick: options.onDblClick // 用于捕获鼠标双击之后的事件回调函数
|
||||
},
|
||||
check: options.check,
|
||||
view: options.view,
|
||||
data: options.data
|
||||
};
|
||||
$.get(options.url, function(data) {
|
||||
var treeName = $("#treeName").val();
|
||||
var treeId = $("#treeId").val();
|
||||
tree = $.fn.zTree.init($("#" + _id), setting, data);
|
||||
tree = $.fn.zTree.init($("#" + options.id), setting, data);
|
||||
$._tree = tree;
|
||||
// 展开第一级节点
|
||||
var nodes = tree.getNodesByParam("level", 0);
|
||||
var nodes = tree.getNodesByParam("level", options.expandLevel - 1);
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
if(_expandLevel > 0) {
|
||||
tree.expandNode(nodes[i], true, false, false);
|
||||
}
|
||||
$.tree.selectByIdName(treeId, treeName, nodes[i]);
|
||||
tree.expandNode(nodes[i], true, false, false);
|
||||
}
|
||||
// 展开第二级节点
|
||||
nodes = tree.getNodesByParam("level", 1);
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
if(_expandLevel > 1) {
|
||||
tree.expandNode(nodes[i], true, false, false);
|
||||
}
|
||||
$.tree.selectByIdName(treeId, treeName, nodes[i]);
|
||||
}
|
||||
// 展开第三级节点
|
||||
nodes = tree.getNodesByParam("level", 2);
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
if(_expandLevel > 2) {
|
||||
tree.expandNode(nodes[i], true, false, false);
|
||||
}
|
||||
$.tree.selectByIdName(treeId, treeName, nodes[i]);
|
||||
}
|
||||
}, null, null, "正在加载,请稍后...");
|
||||
var node = tree.getNodesByParam("id", treeId, null)[0];
|
||||
$.tree.selectByIdName(treeId, node);
|
||||
});
|
||||
},
|
||||
// 搜索节点
|
||||
searchNode: function() {
|
||||
// 取得输入的关键字的值
|
||||
var value = $.common.trim($("#keyword").val());
|
||||
if ($.tree._lastValue === value) {
|
||||
if ($.tree._lastValue == value) {
|
||||
return;
|
||||
}
|
||||
// 保存最后一次搜索名称
|
||||
@@ -665,11 +980,9 @@
|
||||
$.tree.updateNodes($._tree.getNodesByParamFuzzy("name", value));
|
||||
},
|
||||
// 根据Id和Name选中指定节点
|
||||
selectByIdName: function(treeId, treeName, node) {
|
||||
if ($.common.isNotEmpty(treeName) && $.common.isNotEmpty(treeId)) {
|
||||
if (treeId == node.id && treeName == node.name) {
|
||||
$._tree.selectNode(node, true);
|
||||
}
|
||||
selectByIdName: function(treeId, node) {
|
||||
if ($.common.isNotEmpty(treeId) && treeId == node.id) {
|
||||
$._tree.selectNode(node, true);
|
||||
}
|
||||
},
|
||||
// 显示所有节点
|
||||
@@ -744,6 +1057,17 @@
|
||||
}
|
||||
return true;
|
||||
},
|
||||
// 不允许最后层级节点选择
|
||||
notAllowLastLevel: function(_tree) {
|
||||
var nodes = _tree.getSelectedNodes();
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
if (nodes[i].level == nodes.length + 1) {
|
||||
$.modal.msgError("不能选择最后层级节点(" + nodes[i].name + ")");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
// 隐藏/显示搜索栏
|
||||
toggleSearch: function() {
|
||||
$('#search').slideToggle(200);
|
||||
@@ -773,6 +1097,13 @@
|
||||
isNotEmpty: function (value) {
|
||||
return !$.common.isEmpty(value);
|
||||
},
|
||||
// 空对象转字符串
|
||||
nullToStr: function(value) {
|
||||
if ($.common.isEmpty(value)) {
|
||||
return "-";
|
||||
}
|
||||
return value;
|
||||
},
|
||||
// 是否显示数据 为空默认为显示
|
||||
visible: function (value) {
|
||||
if ($.common.isEmpty(value) || value == true) {
|
||||
@@ -787,26 +1118,60 @@
|
||||
}
|
||||
return value.toString().replace(/(^\s*)|(\s*$)|\r|\n/g, "");
|
||||
},
|
||||
// 字符串格式化(%s )
|
||||
sprintf: function (str) {
|
||||
var args = arguments, flag = true, i = 1;
|
||||
str = str.replace(/%s/g, function () {
|
||||
var arg = args[i++];
|
||||
if (typeof arg === 'undefined') {
|
||||
flag = false;
|
||||
return '';
|
||||
}
|
||||
return arg;
|
||||
});
|
||||
return flag ? str : '';
|
||||
},
|
||||
// 指定随机数返回
|
||||
random: function (min, max) {
|
||||
return Math.floor((Math.random() * max) + min);
|
||||
},
|
||||
// 判断字符串是否是以start开头
|
||||
startWith: function(value, start) {
|
||||
var reg = new RegExp("^" + start);
|
||||
return reg.test(value)
|
||||
},
|
||||
// 判断字符串是否是以end结尾
|
||||
endWith: function(value, end) {
|
||||
var reg = new RegExp(end + "$");
|
||||
return reg.test(value)
|
||||
},
|
||||
// 数组去重
|
||||
uniqueFn: function(array) {
|
||||
var result = [];
|
||||
var hashObj = {};
|
||||
for (var i = 0; i < array.length; i++) {
|
||||
if (!hashObj[array[i]]) {
|
||||
hashObj[array[i]] = true;
|
||||
result.push(array[i]);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
});
|
||||
})(jQuery);
|
||||
|
||||
/** 表格类型 */
|
||||
table_type = {
|
||||
bootstrapTable: 0,
|
||||
bootstrapTreeTable: 1
|
||||
};
|
||||
|
||||
/** 消息状态码 */
|
||||
web_status = {
|
||||
SUCCESS: 0,
|
||||
FAIL: 500
|
||||
FAIL: 500,
|
||||
WARNING: 301
|
||||
};
|
||||
|
||||
/** 弹窗状态码 */
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
|
||||
$(function() {
|
||||
validateRule();
|
||||
$(".i-checks").iCheck({checkboxClass:"icheckbox_square-green-login"});
|
||||
$('.imgcode').click(function() {
|
||||
var url = ctx + "captcha/captchaImage?type=" + captchaType + "&s=" + Math.random();
|
||||
$(".imgcode").attr("src", url);
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
<h3 class="font-bold">您没有访问权限!</h3>
|
||||
|
||||
<div class="error-desc">
|
||||
对不起,您正在寻找的页面已经找到。尝试检查URL的错误,然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。
|
||||
<a href="javascript:top.document.location.href='/'" class="btn btn-primary m-t">主页</a>
|
||||
对不起,您没有访问权限,请不要进行非法操作!您可以返回主页面
|
||||
<a href="javascript:top.document.location.href='/'" class="btn btn-outline btn-primary btn-xs">返回主页</a>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/jquery.min.js?v=2.1.4"></script>
|
||||
|
||||
@@ -1,29 +1,32 @@
|
||||
<head th:fragment="header">
|
||||
<!-- 通用CSS -->
|
||||
<head th:fragment=header(title)>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title></title>
|
||||
<meta name="keywords" content="">
|
||||
<meta name="description" content="">
|
||||
<title th:text="${title}"></title>
|
||||
<link rel="shortcut icon" href="favicon.ico">
|
||||
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
|
||||
<!-- bootstrap-table 表格插件样式 -->
|
||||
<link th:href="@{/ajax/libs/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/ajax/libs/bootstrap-treetable/bootstrap-treetable.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/ajax/libs/bootstrap-table/extensions/columns/bootstrap-table-fixed-columns.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/css/animate.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/css/style.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/ajax/libs/select/select2.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/ruoyi/css/ry-ui.css}" rel="stylesheet"/>
|
||||
</head>
|
||||
|
||||
<!-- 通用JS -->
|
||||
<div th:fragment="footer">
|
||||
<script th:src="@{/js/jquery.min.js}"></script>
|
||||
<script th:src="@{/js/bootstrap.min.js}"></script>
|
||||
|
||||
<!-- bootstrap-table 表格插件 -->
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/bootstrap-table.min.js}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js}"></script>
|
||||
<script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js}"></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 表单验证插件 -->
|
||||
<script th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script>
|
||||
<script th:src="@{/ajax/libs/validate/messages_zh.min.js}"></script>
|
||||
@@ -35,11 +38,69 @@
|
||||
<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/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/layui/layui.js}"></script>
|
||||
<script th:src="@{/ruoyi/js/common.js?v=3.1.0}"></script>
|
||||
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.1.0}"></script>
|
||||
<script th:src="@{/ruoyi/js/common.js?v=3.3.0}"></script>
|
||||
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.3.0}"></script>
|
||||
<script src="http://tajs.qq.com/stats?sId=62048022"></script>
|
||||
<script th:inline="javascript"> var ctx = [[@{/}]]; </script>
|
||||
</div>
|
||||
|
||||
<!-- ztree树插件 -->
|
||||
<div th:fragment="ztree-css">
|
||||
<link th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="ztree-js">
|
||||
<script th:src="@{/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js}"></script>
|
||||
</div>
|
||||
|
||||
<!-- select下拉框插件 -->
|
||||
<div th:fragment="select2-css">
|
||||
<link th:href="@{/ajax/libs/select/select2.css}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="select2-js">
|
||||
<script th:src="@{/ajax/libs/select/select2.js}"></script>
|
||||
</div>
|
||||
|
||||
<!-- datetimepicker日期和时间插件 -->
|
||||
<div th:fragment="datetimepicker-css">
|
||||
<link th:href="@{/ajax/libs/datapicker/bootstrap-datetimepicker.min.css}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="datetimepicker-js">
|
||||
<script th:src="@{/ajax/libs//datapicker/bootstrap-datetimepicker.min.js}"></script>
|
||||
</div>
|
||||
|
||||
<!-- ui布局插件 -->
|
||||
<div th:fragment="layout-latest-css">
|
||||
<link th:href="@{/ajax/libs/jquery-layout/jquery.layout-latest.css}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="layout-latest-js">
|
||||
<script th:src="@{/ajax/libs/jquery-layout/jquery.layout-latest.js}"></script>
|
||||
</div>
|
||||
|
||||
<!-- summernote富文本编辑器插件 -->
|
||||
<div th:fragment="summernote-css">
|
||||
<link th:href="@{/ajax/libs/summernote/summernote.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/ajax/libs/summernote/summernote-bs3.css}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="summernote-js">
|
||||
<script th:src="@{/ajax/libs/summernote/summernote.min.js}"></script>
|
||||
<script th:src="@{/ajax/libs/summernote/summernote-zh-CN.js}"></script>
|
||||
</div>
|
||||
|
||||
<!-- cropbox图像裁剪插件 -->
|
||||
<div th:fragment="cropbox-css">
|
||||
<link th:href="@{/ajax/libs/cropbox/cropbox.css}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="cropbox-js">
|
||||
<script th:src="@{/ajax/libs/cropbox/cropbox.js}"></script>
|
||||
</div>
|
||||
|
||||
<!-- jsonview格式化和语法高亮JSON格式数据查看插件 -->
|
||||
<div th:fragment="jsonview-css">
|
||||
<link th:href="@{/ajax/libs/jsonview/jquery.jsonview.css}" rel="stylesheet"/>
|
||||
</div>
|
||||
<div th:fragment="jsonview-js">
|
||||
<script th:src="@{/ajax/libs/jsonview/jquery.jsonview.js}"></script>
|
||||
</div>
|
||||
@@ -15,7 +15,8 @@
|
||||
<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="@{/ruoyi/css/ry-ui.css?v=3.1.0}" rel="stylesheet"/>
|
||||
<link th:href="@{/css/skins.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/ruoyi/css/ry-ui.css?v=3.3.0}" rel="stylesheet"/>
|
||||
<style type="text/css">
|
||||
.nav > li:hover .dropdown-menu {display: block;}
|
||||
#content-main.max { height: calc(100% - 110px); overflow: hidden; width: 100%; height: 100%; left: 0px; position: absolute; top: 0px; z-index: 9998; margin: 0; }
|
||||
@@ -31,19 +32,24 @@
|
||||
</div>
|
||||
<div class="sidebar-collapse">
|
||||
<ul class="nav" id="side-menu">
|
||||
<li class="nav-header">
|
||||
<div class="dropdown profile-element"> <span>
|
||||
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}" alt="image" class="img-circle" height="60" width="60"/></span>
|
||||
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
|
||||
<span class="clear"><span class="block m-t-xs"><strong class="font-bold" th:text="${user.userName}">用户</strong></span>
|
||||
<span class="text-muted text-xs block"><span th:text="${user.dept?.deptName}">部门</span> <b class="caret"></b></span> </span> </a>
|
||||
<ul class="dropdown-menu animated fadeInRight m-t-xs">
|
||||
<li><a class="menuItem" th:href="@{/system/user/profile}">个人信息</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a th:href="@{logout}">退出</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li class="logo">
|
||||
<span class="logo-lg">RuoYi</span>
|
||||
</li>
|
||||
<li>
|
||||
<div class="user-panel">
|
||||
<a class="menuItem" title="个人中心" th:href="@{/system/user/profile}">
|
||||
<div class="hide" th:text="个人中心"></div>
|
||||
<div class="pull-left image">
|
||||
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}" 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>
|
||||
</li>
|
||||
<li class="active">
|
||||
<a href="index.html"><i class="fa fa-home"></i> <span class="nav-label">主页</span> <span class="fa arrow"></span></a>
|
||||
<ul class="nav nav-second-level">
|
||||
@@ -74,20 +80,36 @@
|
||||
<!--右侧部分开始-->
|
||||
<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">
|
||||
<nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
|
||||
<div class="navbar-header">
|
||||
|
||||
<a class="navbar-minimalize minimalize-styl-2 btn btn-default " href="#" title="收起菜单">
|
||||
<a class="navbar-minimalize minimalize-styl-2" style="color:#FFF;" href="#" title="收起菜单">
|
||||
<i class="fa fa-bars"></i>
|
||||
</a>
|
||||
</div>
|
||||
<ul class="nav navbar-top-links navbar-right welcome-message">
|
||||
<li>
|
||||
<span class="m-r-sm text-muted">欢迎来到若依管理后台.</span>
|
||||
</li>
|
||||
<li><a id="fullScreen"><i class="fa fa-arrows-alt"></i>全屏</a></li>
|
||||
<li><a th:href="@{logout}"><i class="fa fa-sign-out"></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="全屏显示" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏显示</a></li>
|
||||
<li class="dropdown user-menu">
|
||||
<a href="javascript:" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">
|
||||
<img th:src="(${user.avatar} == '') ? @{/img/profile.jpg} : @{/profile/avatar/} + ${user.avatar}" class="user-image">
|
||||
<span class="hidden-xs">[[${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()" class="menuItem">
|
||||
<i class="fa fa-key"></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>
|
||||
@@ -135,9 +157,18 @@
|
||||
<script th:src="@{/js/plugins/metisMenu/jquery.metisMenu.js}"></script>
|
||||
<script th:src="@{/js/plugins/slimscroll/jquery.slimscroll.min.js}"></script>
|
||||
<script th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
|
||||
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
|
||||
<script src="http://tajs.qq.com/stats?sId=62048022"></script>
|
||||
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.1.0}"></script>
|
||||
<script th:src="@{/ruoyi/js/ry-ui.js?v=3.3.0}"></script>
|
||||
<script th:src="@{/ruoyi/index.js}"></script>
|
||||
<script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script>
|
||||
<script th:inline="javascript">
|
||||
var ctx = [[@{/}]];
|
||||
/*用户管理-重置密码*/
|
||||
function resetPwd() {
|
||||
var url = ctx + 'system/user/profile/resetPwd';
|
||||
$.modal.open("重置密码", url, '800', '500');
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,12 +7,11 @@
|
||||
<title>若依管理系统</title>
|
||||
<meta name="keywords" content="若依,若依开源,若依框架,若依系统,ruoyi">
|
||||
<meta name="description" content="若依基于SpringBoot2.0的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖">
|
||||
<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/ajax/libs/iCheck/custom.css" th:href="@{/ajax/libs/iCheck/custom.css}" rel="stylesheet"/>
|
||||
<link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=3.1.0}" 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/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=3.3.0}" rel="stylesheet"/>
|
||||
<!--[if lt IE 9]>
|
||||
<meta http-equiv="refresh" content="0;ie.html" />
|
||||
<![endif]-->
|
||||
@@ -49,10 +48,10 @@
|
||||
<h4 class="no-margins">登录:</h4>
|
||||
<p class="m-t-md">你若不离不弃,我必生死相依</p>
|
||||
<input type="text" name="username" class="form-control uname" placeholder="用户名" value="admin" />
|
||||
<input type="password" name="password" class="form-control pword m-b" placeholder="密码" value="admin123" />
|
||||
<div class="row" th:if="${captchaEnabled==true}">
|
||||
<input type="password" name="password" class="form-control pword" placeholder="密码" value="admin123" />
|
||||
<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">
|
||||
<input type="text" name="validateCode" class="form-control code" placeholder="验证码" maxlength="5" autocomplete="off">
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<a href="javascript:void(0);" title="点击更换验证码">
|
||||
@@ -60,14 +59,16 @@
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<input class="i-checks" type="checkbox" name="rememberme" /> 记住我
|
||||
<div class="checkbox-custom" th:classappend="${captchaEnabled==false} ? 'm-t'">
|
||||
<input type="checkbox" id="rememberme" name="rememberme"> <label for="rememberme">记住我</label>
|
||||
</div>
|
||||
<button class="btn btn-success btn-block" id="btnSubmit" data-loading="正在验证登录,请稍后...">登录</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="signup-footer">
|
||||
<div class="pull-left">
|
||||
© 2018 All Rights Reserved. RuoYi <br>
|
||||
© 2019 All Rights Reserved. RuoYi <br>
|
||||
<a href="http://www.miitbeian.gov.cn/" target="_blank" rel="nofollow">粤ICP备18046899号</a><br>
|
||||
</div>
|
||||
</div>
|
||||
@@ -80,10 +81,9 @@
|
||||
<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/iCheck/icheck.min.js" th:src="@{/ajax/libs/iCheck/icheck.min.js}"></script>
|
||||
<script src="../static/ajax/libs/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
|
||||
<script src="http://tajs.qq.com/stats?sId=62048022"></script>
|
||||
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=3.1.0}"></script>
|
||||
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=3.3.0}"></script>
|
||||
<script src="../static/ruoyi/login.js" th:src="@{/ruoyi/login.js}"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -16,9 +16,11 @@
|
||||
<div class="row border-bottom white-bg dashboard-header">
|
||||
<div class="col-sm-12">
|
||||
<blockquote class="text-warning" style="font-size:14px">
|
||||
领取阿里云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>
|
||||
<h4 class="text-danger">云产品通用红包,可叠加官网常规优惠使用。</h4>
|
||||
领取阿里云通用云产品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>
|
||||
领取腾讯云通用云产品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>
|
||||
<h4 class="text-danger">云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)</h4>
|
||||
</blockquote>
|
||||
|
||||
<hr>
|
||||
@@ -77,7 +79,7 @@
|
||||
<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>
|
||||
<p><i class="fa fa-qq"></i> QQ群:<s>满1389287</s> <a href="https://jq.qq.com/?_wv=1027&k=5cHeRVW" target="_blank">1679294</a>
|
||||
<p><i class="fa fa-qq"></i> QQ群:<s>满1389287</s> <s>满1679294</s> <s>满1529866</s> <a href="https://jq.qq.com/?_wv=1027&k=5g75dCU" target="_blank">1772718</a>
|
||||
</p>
|
||||
<p><i class="fa fa-weixin"></i> 微信:<a href="javascript:;">/ *若依</a>
|
||||
</p>
|
||||
@@ -94,13 +96,99 @@
|
||||
<div class="ibox-content no-padding">
|
||||
<div class="panel-body">
|
||||
<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="#v33">v3.3.0</a><code class="pull-right">2019.04.01</code>
|
||||
</h5>
|
||||
</div>
|
||||
<div id="v33" class="panel-collapse collapse in">
|
||||
<div class="panel-body">
|
||||
<ol>
|
||||
<li>新增线程池统一管理</li>
|
||||
<li>新增支持左右冻结列</li>
|
||||
<li>新增表格字符超长浮动提示</li>
|
||||
<li>升级datepicker拓展并汉化</li>
|
||||
<li>升级druid到最新版本v1.1.14</li>
|
||||
<li>修复个人头像为图片服务器跨域问题</li>
|
||||
<li>修改上传文件按日期存储</li>
|
||||
<li>新增表格客户端分页选项</li>
|
||||
<li>新增表格的高度参数</li>
|
||||
<li>新增表格销毁方法</li>
|
||||
<li>新增表格下拉按钮切换方法</li>
|
||||
<li>新增表格分页跳转到指定页码</li>
|
||||
<li>新增表格启用点击选中行参数</li>
|
||||
<li>修复表格数据重新加载未触发部分按钮禁用</li>
|
||||
<li>使用jsonview展示操作日志参数</li>
|
||||
<li>新增方法(addTab、editTab)</li>
|
||||
<li>修改用户管理界面为Tab打开方式</li>
|
||||
<li>表单验证代码优化</li>
|
||||
<li>修复@Excel注解 prompt 属性使用报错</li>
|
||||
<li>修复combo属性Excel兼容性问题</li>
|
||||
<li>新增@Excel导入导出支持父类字段</li>
|
||||
<li>修复关闭最后选项卡无法激活滚动问题</li>
|
||||
<li>增加日期控件显示类型及回显格式扩展选项</li>
|
||||
<li>修复定时任务执行失败后入库状态为成功状态</li>
|
||||
<li>支持定时任务并发开关控制</li>
|
||||
<li>优化权限校验失败普通请求跳转页面</li>
|
||||
<li>捕获线程池执行任务抛出的异常</li>
|
||||
<li>修复IE浏览器导出功能报错</li>
|
||||
<li>新增角色管理分配用户功能</li>
|
||||
<li>新增表格翻页记住前面的选择</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="#v32">v3.2.0</a><code class="pull-right">2019.01.18</code>
|
||||
</h5>
|
||||
</div>
|
||||
<div id="v32" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<ol>
|
||||
<li>部门修改时不允许选择最后节点</li>
|
||||
<li>修复部门菜单排序字段无效</li>
|
||||
<li>修复光驱磁盘导致服务监控异常</li>
|
||||
<li>登录界面去除check插件</li>
|
||||
<li>验证码文本字符间距修正</li>
|
||||
<li>升级SpringBoot到最新版本2.1.1</li>
|
||||
<li>升级MYSQL驱动</li>
|
||||
<li>修正登录必填项位置偏移</li>
|
||||
<li>Session会话检查优化</li>
|
||||
<li>Excel注解支持多级获取</li>
|
||||
<li>新增序列号生成方法</li>
|
||||
<li>修复WAR部署tomcat退出线程异常</li>
|
||||
<li>全屏操作增加默认确认/关闭</li>
|
||||
<li>修复个人信息可能导致漏洞</li>
|
||||
<li>字典数据根据下拉选择新增类型</li>
|
||||
<li>升级Summernote到最新版本v0.8.11</li>
|
||||
<li>新增用户数据导入</li>
|
||||
<li>首页主题样式更换</li>
|
||||
<li>layer扩展主题更换</li>
|
||||
<li>用户管理移动端默认隐藏左侧布局</li>
|
||||
<li>详细信息弹出层显示在顶层</li>
|
||||
<li>表格支持切换状态(用户/角色/定时任务)</li>
|
||||
<li>Druid数据源支持配置继承</li>
|
||||
<li>修正部分iPhone手机端表格适配问题</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="#v31">v3.1.0</a><code class="pull-right">2018.12.03</code>
|
||||
</h5>
|
||||
</div>
|
||||
<div id="v31" class="panel-collapse collapse in">
|
||||
<div id="v31" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<ol>
|
||||
<li>新增内网不获取IP地址</li>
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
|
||||
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<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 search-collapse">
|
||||
@@ -38,7 +37,7 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
|
||||
<div class="btn-group-sm" id="toolbar" role="group">
|
||||
<a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="monitor:logininfor:remove">
|
||||
<i class="fa fa-remove"></i> 删除
|
||||
</a>
|
||||
@@ -56,7 +55,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div th:include="include :: footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var datas = [[${@dict.getType('sys_common_status')}]];
|
||||
var prefix = ctx + "monitor/logininfor";
|
||||
@@ -70,9 +69,9 @@
|
||||
sortName: "loginTime",
|
||||
sortOrder: "desc",
|
||||
modalName: "登录日志",
|
||||
search: false,
|
||||
showExport: false,
|
||||
escape: true,
|
||||
showPageGo: true,
|
||||
rememberSelected: true,
|
||||
columns: [{
|
||||
checkbox: true
|
||||
},
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
|
||||
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<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 search-collapse">
|
||||
@@ -26,7 +25,7 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
|
||||
<div class="btn-group-sm" id="toolbar" role="group">
|
||||
<a class="btn btn-danger btn-del disabled" onclick="javascript:batchForceLogout()" shiro:hasPermission="monitor:online:batchForceLogout">
|
||||
<i class="fa fa-sign-out"></i> 强退
|
||||
</a>
|
||||
@@ -37,7 +36,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div th:include="include :: footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var forceFlag = [[${@permission.hasPermi('monitor:online:forceLogout')}]];
|
||||
var prefix = ctx + "monitor/online";
|
||||
@@ -48,11 +47,17 @@
|
||||
exportUrl: prefix + "/export",
|
||||
sortName: "lastAccessTime",
|
||||
sortOrder: "desc",
|
||||
search: false,
|
||||
showExport: true,
|
||||
escape: true,
|
||||
columns: [{
|
||||
checkbox: true
|
||||
},
|
||||
{
|
||||
title: "序号",
|
||||
formatter: function (value, row, index) {
|
||||
return $.table.serialNumber(index);
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'sessionId',
|
||||
title: '会话编号'
|
||||
@@ -71,7 +76,7 @@
|
||||
title: '主机'
|
||||
},
|
||||
{
|
||||
field: 'longinLocation',
|
||||
field: 'loginLocation',
|
||||
title: '登录地点'
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
|
||||
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('操作日志详细')" />
|
||||
<th:block th:include="include :: jsonview-css" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m-t" id="signupForm">
|
||||
@@ -42,13 +43,16 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include :: footer"></div>
|
||||
|
||||
<th:block th:include="include :: footer" />
|
||||
<th:block th:include="include :: jsonview-js" />
|
||||
<script th:inline="javascript">
|
||||
$(function() {
|
||||
var text = [[${operLog.operParam}]];
|
||||
var result = JSON.stringify(JSON.parse(text), null, 2);
|
||||
$("#operParam").html(result);
|
||||
var json = [[${operLog.operParam}]];
|
||||
if ($.common.isNotEmpty(json) && json.length < 2000) {
|
||||
$("#operParam").JSONView(json);
|
||||
} else {
|
||||
$("#operParam").text(json);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
|
||||
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<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 search-collapse">
|
||||
@@ -38,14 +37,14 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
|
||||
<a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="monitor:logininfor:remove">
|
||||
<div class="btn-group-sm" id="toolbar" role="group">
|
||||
<a class="btn btn-danger btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="monitor:operlog:remove">
|
||||
<i class="fa fa-remove"></i> 删除
|
||||
</a>
|
||||
<a class="btn btn-danger" onclick="$.operate.clean()" shiro:hasPermission="monitor:logininfor:remove">
|
||||
<a class="btn btn-danger" onclick="$.operate.clean()" shiro:hasPermission="monitor:operlog:remove">
|
||||
<i class="fa fa-trash"></i> 清空
|
||||
</a>
|
||||
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:logininfor:export">
|
||||
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="monitor:operlog:export">
|
||||
<i class="fa fa-download"></i> 导出
|
||||
</a>
|
||||
</div>
|
||||
@@ -56,7 +55,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div th:include="include :: footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var detailFlag = [[${@permission.hasPermi('monitor:operlog:detail')}]];
|
||||
var datas = [[${@dict.getType('sys_oper_type')}]];
|
||||
@@ -72,9 +71,9 @@
|
||||
sortName: "operTime",
|
||||
sortOrder: "desc",
|
||||
modalName: "操作日志",
|
||||
search: false,
|
||||
showExport: false,
|
||||
escape: true,
|
||||
showPageGo: true,
|
||||
rememberSelected: true,
|
||||
columns: [{
|
||||
checkbox: true
|
||||
},
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
|
||||
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<body class="gray-bg" id="test">
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('服务器监控')" />
|
||||
</head>
|
||||
<body class="gray-bg">
|
||||
<div class="wrapper wrapper-content">
|
||||
<div class="col-sm-12">
|
||||
<div class="row">
|
||||
@@ -234,7 +234,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<div th:include="include :: footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script>
|
||||
$(".modal").appendTo("body"), $("[data-toggle=popover]").popover(), $(".collapse-link").click(function() {
|
||||
var div_ibox = $(this).closest("div.ibox"),
|
||||
|
||||
@@ -1,26 +1,27 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<head>
|
||||
<th:block th:include="include :: header('新增参数')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-config-add" name="form-config-add">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">参数名称:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="configName" name="configName" class="form-control" type="text">
|
||||
<input id="configName" name="configName" class="form-control" type="text" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">参数键名:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="configKey" name="configKey" class="form-control" type="text">
|
||||
<input id="configKey" name="configKey" class="form-control" type="text" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">参数键值:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="configValue" name="configValue" class="form-control" type="text">
|
||||
<input id="configValue" name="configValue" class="form-control" type="text" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -40,14 +41,14 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script type="text/javascript">
|
||||
var prefix = ctx + "system/config";
|
||||
|
||||
$("#form-config-add").validate({
|
||||
onkeyup: false,
|
||||
rules: {
|
||||
configKey: {
|
||||
required: true,
|
||||
remote: {
|
||||
url: prefix + "/checkConfigKeyUnique",
|
||||
type: "post",
|
||||
@@ -62,18 +63,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
configName: {
|
||||
required: true
|
||||
},
|
||||
configValue: {
|
||||
required: true
|
||||
},
|
||||
},
|
||||
messages: {
|
||||
"configKey": {
|
||||
remote: "参数键名已经存在"
|
||||
}
|
||||
}
|
||||
},
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<head>
|
||||
<th:block th:include="include :: header('参数列表')" />
|
||||
</head>
|
||||
<body class="gray-bg">
|
||||
|
||||
<div class="container-div">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 search-collapse">
|
||||
@@ -37,7 +37,7 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
|
||||
<div class="btn-group-sm" id="toolbar" role="group">
|
||||
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:config:add">
|
||||
<i class="fa fa-plus"></i> 新增
|
||||
</a>
|
||||
@@ -56,7 +56,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div th:include="include :: footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var editFlag = [[${@permission.hasPermi('system:config:edit')}]];
|
||||
var removeFlag = [[${@permission.hasPermi('system:config:remove')}]];
|
||||
@@ -73,8 +73,6 @@
|
||||
sortName: "createTime",
|
||||
sortOrder: "desc",
|
||||
modalName: "参数",
|
||||
search: false,
|
||||
showExport: false,
|
||||
columns: [{
|
||||
checkbox: true
|
||||
},
|
||||
@@ -102,6 +100,14 @@
|
||||
return $.table.selectDictLabel(datas, value);
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'remark',
|
||||
title: '备注',
|
||||
align: 'center',
|
||||
formatter: function(value, row, index) {
|
||||
return $.table.tooltip(value);
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'createTime',
|
||||
title: '创建时间'
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<head>
|
||||
<th:block th:include="include :: header('修改参数')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-config-edit" th:object="${config}">
|
||||
@@ -9,19 +10,19 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">参数名称:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="configName" name="configName" th:field="*{configName}" class="form-control" type="text">
|
||||
<input id="configName" name="configName" th:field="*{configName}" class="form-control" type="text" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">参数键名:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="configKey" name="configKey" th:field="*{configKey}" class="form-control" type="text">
|
||||
<input id="configKey" name="configKey" th:field="*{configKey}" class="form-control" type="text" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">参数键值:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="configValue" name="configValue" th:field="*{configValue}" class="form-control" type="text">
|
||||
<input id="configValue" name="configValue" th:field="*{configValue}" class="form-control" type="text" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -41,14 +42,14 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script type="text/javascript">
|
||||
var prefix = ctx + "system/config";
|
||||
|
||||
$("#form-config-edit").validate({
|
||||
onkeyup: false,
|
||||
rules: {
|
||||
configKey: {
|
||||
required: true,
|
||||
remote: {
|
||||
url: prefix + "/checkConfigKeyUnique",
|
||||
type: "post",
|
||||
@@ -66,18 +67,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
configName: {
|
||||
required: true
|
||||
},
|
||||
configValue: {
|
||||
required: true
|
||||
},
|
||||
},
|
||||
messages: {
|
||||
"configKey": {
|
||||
remote: "参数键名已经存在"
|
||||
}
|
||||
}
|
||||
},
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<head>
|
||||
<th:block th:include="include :: header('新增部门')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-dept-add">
|
||||
@@ -9,19 +10,22 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label ">上级部门:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" onclick="selectDeptTree()" id="treeName" readonly="true" th:value="${dept.deptName}"/>
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" onclick="selectDeptTree()" id="treeName" readonly="true" th:value="${dept.deptName}">
|
||||
<span class="input-group-addon"><i class="fa fa-search"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">部门名称:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="deptName" id="deptName">
|
||||
<input class="form-control" type="text" name="deptName" id="deptName" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">显示排序:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="orderNum">
|
||||
<input class="form-control" type="text" name="orderNum" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -53,14 +57,14 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script type="text/javascript">
|
||||
var prefix = ctx + "system/dept";
|
||||
|
||||
$("#form-dept-add").validate({
|
||||
onkeyup: false,
|
||||
rules:{
|
||||
deptName:{
|
||||
required:true,
|
||||
remote: {
|
||||
url: prefix + "/checkDeptNameUnique",
|
||||
type: "post",
|
||||
@@ -79,7 +83,6 @@
|
||||
}
|
||||
},
|
||||
orderNum:{
|
||||
required:true,
|
||||
digits:true
|
||||
},
|
||||
email:{
|
||||
@@ -93,7 +96,8 @@
|
||||
"deptName": {
|
||||
remote: "部门已经存在"
|
||||
}
|
||||
}
|
||||
},
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
|
||||
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<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">
|
||||
@@ -28,11 +28,11 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
|
||||
<div class="btn-group-sm" id="toolbar" role="group">
|
||||
<a class="btn btn-success" onclick="$.operate.add(100)" shiro:hasPermission="system:dept:add">
|
||||
<i class="fa fa-plus"></i> 新增
|
||||
</a>
|
||||
<a class="btn btn-primary" onclick="$.operate.editTree()" shiro:hasPermission="system:dept:edit">
|
||||
<a class="btn btn-primary" onclick="$.operate.edit()" shiro:hasPermission="system:dept:edit">
|
||||
<i class="fa fa-edit"></i> 修改
|
||||
</a>
|
||||
<a class="btn btn-info" id="expandAllBtn">
|
||||
@@ -44,7 +44,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div th:include="include :: footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var addFlag = [[${@permission.hasPermi('system:dept:add')}]];
|
||||
var editFlag = [[${@permission.hasPermi('system:dept:edit')}]];
|
||||
@@ -95,10 +95,10 @@
|
||||
formatter: function(value, row, index) {
|
||||
if (row.parentId != 0) {
|
||||
var actions = [];
|
||||
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.deptId + '\')"><i class="fa fa-edit">编辑</i></a> ');
|
||||
actions.push('<a class="btn btn-info btn-xs ' + addFlag + '" href="#" onclick="$.operate.add(\'' + row.deptId + '\')"><i class="fa fa-plus">新增</i></a> ');
|
||||
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="remove(\'' + row.deptId + '\')"><i class="fa fa-remove">删除</i></a>');
|
||||
return actions.join('');
|
||||
actions.push('<a class="' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.deptId + '\')"><i class="fa fa-edit"></i>编辑</a>');
|
||||
actions.push('<a class="' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.deptId + '\')"><i class="fa fa-trash"></i>删除</a>');
|
||||
actions.push('<a class="' + addFlag + '" href="#" onclick="$.operate.add(\'' + row.deptId + '\')"><i class="fa fa-plus"></i>添加下级部门</a>');
|
||||
return $.table.dropdownToggle(actions.join(''));
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
@@ -107,23 +107,6 @@
|
||||
};
|
||||
$.treeTable.init(options);
|
||||
});
|
||||
|
||||
function remove(id) {
|
||||
$.modal.confirm("确定删除该条" + $.table._option.modalName + "信息吗?", function() {
|
||||
$.ajax({
|
||||
type : 'post',
|
||||
url: prefix + "/remove/" + id,
|
||||
success : function(result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
$.modal.msgSuccess(result.msg);
|
||||
$.treeTable.refresh();
|
||||
} else {
|
||||
$.modal.msgError(result.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,7 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<head>
|
||||
<th:block th:include="include :: header('修改部门')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-dept-edit" th:object="${dept}">
|
||||
@@ -10,19 +11,22 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label ">上级部门:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" id="treeName" onclick="selectDeptTree()" readonly="true" th:field="*{parentName}"/>
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" id="treeName" onclick="selectDeptTree()" readonly="true" th:field="*{parentName}">
|
||||
<span class="input-group-addon"><i class="fa fa-search"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">部门名称:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="deptName" th:field="*{deptName}" id="deptName">
|
||||
<input class="form-control" type="text" name="deptName" th:field="*{deptName}" id="deptName" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">显示排序:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}">
|
||||
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -54,14 +58,14 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script type="text/javascript">
|
||||
var prefix = ctx + "system/dept";
|
||||
|
||||
$("#form-dept-edit").validate({
|
||||
onkeyup: false,
|
||||
rules:{
|
||||
deptName:{
|
||||
required:true,
|
||||
remote: {
|
||||
url: prefix + "/checkDeptNameUnique",
|
||||
type: "post",
|
||||
@@ -83,7 +87,6 @@
|
||||
}
|
||||
},
|
||||
orderNum:{
|
||||
required:true,
|
||||
digits:true
|
||||
},
|
||||
email:{
|
||||
@@ -97,7 +100,8 @@
|
||||
"deptName": {
|
||||
remote: "部门已经存在"
|
||||
}
|
||||
}
|
||||
},
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
@@ -123,10 +127,13 @@
|
||||
}
|
||||
|
||||
function doSubmit(index, layero){
|
||||
var body = layer.getChildFrame('body', index);
|
||||
$("#treeId").val(body.find('#treeId').val());
|
||||
$("#treeName").val(body.find('#treeName').val());
|
||||
layer.close(index);
|
||||
var tree = layero.find("iframe")[0].contentWindow.$._tree;
|
||||
if ($.tree.notAllowLastLevel(tree)) {
|
||||
var body = layer.getChildFrame('body', index);
|
||||
$("#treeId").val(body.find('#treeId').val());
|
||||
$("#treeName").val(body.find('#treeName').val());
|
||||
layer.close(index);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<link th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
|
||||
<head>
|
||||
<th:block th:include="include :: header('部门树选择')" />
|
||||
<th:block th:include="include :: ztree-css" />
|
||||
</head>
|
||||
<style>
|
||||
body{height:auto;font-family: "Microsoft YaHei";}
|
||||
button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
|
||||
body{height:auto;font-family: "Microsoft YaHei";}
|
||||
button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
|
||||
</style>
|
||||
<body class="hold-transition box box-main">
|
||||
<input id="treeId" name="treeId" type="hidden" th:value="${dept.deptId}"/>
|
||||
@@ -24,8 +25,8 @@ button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
|
||||
</div>
|
||||
<div id="tree" class="ztree treeselect"></div>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<script th:src="@{/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js}"></script>
|
||||
<th:block th:include="include :: footer" />
|
||||
<th:block th:include="include :: ztree-js" />
|
||||
<script th:inline="javascript">
|
||||
$(function() {
|
||||
var url = ctx + "system/dept/treeData";
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<head>
|
||||
<th:block th:include="include :: header('新增字典数据')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-dict-add">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label ">字典标签:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="dictLabel" id="dictLabel"/>
|
||||
<input class="form-control" type="text" name="dictLabel" id="dictLabel" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label ">字典键值:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="dictValue" id="dictValue"/>
|
||||
<input class="form-control" type="text" name="dictValue" id="dictValue" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -32,7 +33,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">字典排序:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="dictSort">
|
||||
<input class="form-control" type="text" name="dictSort" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -76,23 +77,17 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script type="text/javascript">
|
||||
var prefix = ctx + "system/dict/data";
|
||||
|
||||
$("#form-dict-add").validate({
|
||||
rules:{
|
||||
dictLabel:{
|
||||
required:true,
|
||||
},
|
||||
dictValue:{
|
||||
required:true,
|
||||
},
|
||||
dictSort:{
|
||||
required:true,
|
||||
digits:true
|
||||
},
|
||||
}
|
||||
},
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
|
||||
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<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 search-collapse">
|
||||
@@ -34,8 +33,8 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
|
||||
<a class="btn btn-success" th:onclick="'javascript:$.operate.add(\''+${dict.dictType}+'\')'" shiro:hasPermission="system:dict:add">
|
||||
<div class="btn-group-sm" id="toolbar" role="group">
|
||||
<a class="btn btn-success" onclick="add()" shiro:hasPermission="system:dict:add">
|
||||
<i class="fa fa-plus"></i> 新增
|
||||
</a>
|
||||
<a class="btn btn-primary btn-edit disabled" onclick="$.operate.edit()" shiro:hasPermission="system:dict:edit">
|
||||
@@ -54,8 +53,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div th:include="include :: footer"></div>
|
||||
<script th:src="@{/ajax/libs/select/select2.js}"></script>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var editFlag = [[${@permission.hasPermi('system:dict:edit')}]];
|
||||
var removeFlag = [[${@permission.hasPermi('system:dict:remove')}]];
|
||||
@@ -73,8 +71,6 @@
|
||||
sortName: "createTime",
|
||||
sortOrder: "desc",
|
||||
modalName: "数据",
|
||||
search: false,
|
||||
showExport: false,
|
||||
columns: [{
|
||||
checkbox: true
|
||||
},
|
||||
@@ -135,6 +131,12 @@
|
||||
isAsc: params.order
|
||||
};
|
||||
}
|
||||
|
||||
/*字典数据-新增字典*/
|
||||
function add() {
|
||||
var dictType = $("#dictType option:selected").val();
|
||||
$.operate.add(dictType);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,7 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<head>
|
||||
<th:block th:include="include :: header('修改字典数据')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-dict-edit" th:object="${dict}">
|
||||
@@ -9,13 +10,13 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label ">字典标签:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="dictLabel" id="dictLabel" th:field="*{dictLabel}"/>
|
||||
<input class="form-control" type="text" name="dictLabel" id="dictLabel" th:field="*{dictLabel}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label ">字典键值:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="dictValue" id="dictValue" th:field="*{dictValue}"/>
|
||||
<input class="form-control" type="text" name="dictValue" id="dictValue" th:field="*{dictValue}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -33,7 +34,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">字典排序:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="dictSort" th:field="*{dictSort}">
|
||||
<input class="form-control" type="text" name="dictSort" th:field="*{dictSort}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -77,23 +78,17 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script type="text/javascript">
|
||||
var prefix = ctx + "system/dict/data";
|
||||
|
||||
$("#form-dict-edit").validate({
|
||||
rules:{
|
||||
dictLabel:{
|
||||
required:true,
|
||||
},
|
||||
dictValue:{
|
||||
required:true,
|
||||
},
|
||||
dictSort:{
|
||||
required:true,
|
||||
digits:true
|
||||
},
|
||||
}
|
||||
},
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.w3.org/1999/xhtml">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('新增字典类型')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-dict-add">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label ">字典名称:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="dictName" id="dictName"/>
|
||||
<input class="form-control" type="text" name="dictName" id="dictName" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">字典类型:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="dictType" id="dictType">
|
||||
<input class="form-control" type="text" name="dictType" id="dictType" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -34,17 +35,14 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script type="text/javascript">
|
||||
var prefix = ctx + "system/dict";
|
||||
|
||||
$("#form-dict-add").validate({
|
||||
onkeyup: false,
|
||||
rules:{
|
||||
dictName:{
|
||||
required:true,
|
||||
},
|
||||
dictType:{
|
||||
required:true,
|
||||
minlength: 5,
|
||||
remote: {
|
||||
url: prefix + "/checkDictTypeUnique",
|
||||
@@ -65,7 +63,8 @@
|
||||
"dictType": {
|
||||
remote: "该字典类型已经存在"
|
||||
}
|
||||
}
|
||||
},
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.w3.org/1999/xhtml">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('修改字典类型')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-dict-edit" th:object="${dict}">
|
||||
@@ -9,13 +10,13 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label ">字典名称:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="dictName" id="dictName" th:field="*{dictName}"/>
|
||||
<input class="form-control" type="text" name="dictName" id="dictName" th:field="*{dictName}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">字典类型:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="dictType" id="dictType" th:field="*{dictType}">
|
||||
<input class="form-control" type="text" name="dictType" id="dictType" th:field="*{dictType}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -35,17 +36,14 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script type="text/javascript">
|
||||
var prefix = ctx + "system/dict";
|
||||
|
||||
$("#form-dict-edit").validate({
|
||||
onkeyup: false,
|
||||
rules:{
|
||||
dictName:{
|
||||
required:true,
|
||||
},
|
||||
dictType:{
|
||||
required:true,
|
||||
minlength: 5,
|
||||
remote: {
|
||||
url: prefix + "/checkDictTypeUnique",
|
||||
@@ -69,7 +67,8 @@
|
||||
"dictType": {
|
||||
remote: "该字典类型已经存在"
|
||||
}
|
||||
}
|
||||
},
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org"
|
||||
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<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 search-collapse">
|
||||
@@ -38,7 +37,7 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
|
||||
<div class="btn-group-sm" id="toolbar" role="group">
|
||||
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:dict:add">
|
||||
<i class="fa fa-plus"></i> 新增
|
||||
</a>
|
||||
@@ -58,7 +57,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div th:include="include :: footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var editFlag = [[${@permission.hasPermi('system:dict:edit')}]];
|
||||
var listFlag = [[${@permission.hasPermi('system:dict:list')}]];
|
||||
@@ -76,8 +75,6 @@
|
||||
sortName: "createTime",
|
||||
sortOrder: "desc",
|
||||
modalName: "类型",
|
||||
search: false,
|
||||
showExport: false,
|
||||
columns: [{
|
||||
checkbox: true
|
||||
},
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<head>
|
||||
<th:block th:include="include :: header('新增菜单')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-menu-add">
|
||||
@@ -9,7 +10,10 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label ">上级菜单:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" onclick="selectMenuTree()" id="treeName" readonly="true" th:value="${menu.menuName}"/>
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" onclick="selectMenuTree()" id="treeName" readonly="true" th:value="${menu.menuName}">
|
||||
<span class="input-group-addon"><i class="fa fa-search"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -23,7 +27,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">菜单名称:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="menuName" id="menuName">
|
||||
<input class="form-control" type="text" name="menuName" id="menuName" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -41,7 +45,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">显示排序:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="orderNum">
|
||||
<input class="form-control" type="text" name="orderNum" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -66,17 +70,17 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script>
|
||||
var prefix = ctx + "system/menu";
|
||||
|
||||
$("#form-menu-add").validate({
|
||||
onkeyup: false,
|
||||
rules:{
|
||||
menuType:{
|
||||
required:true,
|
||||
},
|
||||
menuName:{
|
||||
required:true,
|
||||
remote: {
|
||||
url: prefix + "/checkMenuNameUnique",
|
||||
type: "post",
|
||||
@@ -95,7 +99,6 @@
|
||||
}
|
||||
},
|
||||
orderNum:{
|
||||
required:true,
|
||||
digits:true
|
||||
},
|
||||
},
|
||||
@@ -103,7 +106,8 @@
|
||||
"menuName": {
|
||||
remote: "菜单已经存在"
|
||||
}
|
||||
}
|
||||
},
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<head>
|
||||
<th:block th:include="include :: header('修改菜单')" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-menu-edit" th:object="${menu}">
|
||||
@@ -10,7 +11,10 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label ">上级菜单:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" onclick="selectMenuTree()" id="treeName" readonly="true" th:value="${menu.parentName == null ? '无' : menu.parentName}"/>
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" onclick="selectMenuTree()" id="treeName" readonly="true" th:value="${menu.parentName == null ? '无' : menu.parentName}">
|
||||
<span class="input-group-addon"><i class="fa fa-search"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -24,7 +28,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">菜单名称:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="menuName" id="menuName" th:field="*{menuName}">
|
||||
<input class="form-control" type="text" name="menuName" id="menuName" th:field="*{menuName}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -42,7 +46,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">显示排序:</label>
|
||||
<div class="col-sm-8">
|
||||
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}">
|
||||
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -67,7 +71,7 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script>
|
||||
var prefix = ctx + "system/menu";
|
||||
|
||||
@@ -77,12 +81,12 @@
|
||||
});
|
||||
|
||||
$("#form-menu-edit").validate({
|
||||
onkeyup: false,
|
||||
rules:{
|
||||
menuType:{
|
||||
required:true,
|
||||
},
|
||||
menuName:{
|
||||
required:true,
|
||||
remote: {
|
||||
url: prefix + "/checkMenuNameUnique",
|
||||
type: "post",
|
||||
@@ -104,7 +108,6 @@
|
||||
}
|
||||
},
|
||||
orderNum:{
|
||||
required:true,
|
||||
digits:true
|
||||
},
|
||||
},
|
||||
@@ -112,7 +115,8 @@
|
||||
"menuName": {
|
||||
remote: "菜单已经存在"
|
||||
}
|
||||
}
|
||||
},
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<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 search-collapse">
|
||||
@@ -28,11 +28,11 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
|
||||
<div class="btn-group-sm" id="toolbar" role="group">
|
||||
<a class="btn btn-success" onclick="$.operate.add(0)" shiro:hasPermission="system:menu:add">
|
||||
<i class="fa fa-plus"></i> 新增
|
||||
</a>
|
||||
<a class="btn btn-primary" onclick="$.operate.editTree()" shiro:hasPermission="system:menu:edit">
|
||||
<a class="btn btn-primary" onclick="$.operate.edit()" shiro:hasPermission="system:menu:edit">
|
||||
<i class="fa fa-edit"></i> 修改
|
||||
</a>
|
||||
<a class="btn btn-info" id="expandAllBtn">
|
||||
@@ -45,7 +45,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div th:include="include :: footer"></div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var addFlag = [[${@permission.hasPermi('system:menu:add')}]];
|
||||
var editFlag = [[${@permission.hasPermi('system:menu:edit')}]];
|
||||
@@ -59,7 +59,7 @@
|
||||
parentCode: "parentId",
|
||||
uniqueId: "menuId",
|
||||
expandAll: false,
|
||||
expandFirst: true,
|
||||
expandFirst: false,
|
||||
url: prefix + "/list",
|
||||
createUrl: prefix + "/add/{id}",
|
||||
updateUrl: prefix + "/edit/{id}",
|
||||
@@ -131,32 +131,15 @@
|
||||
align: "left",
|
||||
formatter: function(value, row, index) {
|
||||
var actions = [];
|
||||
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.menuId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
|
||||
actions.push('<a class="btn btn-info btn-xs ' + addFlag + '" href="#" onclick="$.operate.add(\'' + row.menuId + '\')"><i class="fa fa-plus"></i>新增</a> ');
|
||||
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="remove(\'' + row.menuId + '\')"><i class="fa fa-remove"></i>删除</a>');
|
||||
return actions.join('');
|
||||
actions.push('<a class="' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.menuId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
|
||||
actions.push('<a class="' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.menuId + '\')"><i class="fa fa-trash"></i>删除</a>');
|
||||
actions.push('<a class="' + addFlag + '" href="#" onclick="$.operate.add(\'' + row.menuId + '\')"><i class="fa fa-plus"></i>添加下级菜单</a> ');
|
||||
return $.table.dropdownToggle(actions.join(''));
|
||||
}
|
||||
}]
|
||||
};
|
||||
$.treeTable.init(options);
|
||||
});
|
||||
|
||||
function remove(id) {
|
||||
$.modal.confirm("确定删除该条" + $.table._option.modalName + "信息吗?", function() {
|
||||
$.ajax({
|
||||
type : 'post',
|
||||
url: prefix + "/remove/" + id,
|
||||
success : function(result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
$.modal.msgSuccess(result.msg);
|
||||
$.treeTable.refresh();
|
||||
} else {
|
||||
$.modal.msgError(result.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,11 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<link th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
|
||||
<head>
|
||||
<th:block th:include="include :: header('菜单树选择')" />
|
||||
<th:block th:include="include :: ztree-css" />
|
||||
</head>
|
||||
<style>
|
||||
body{height:auto;font-family: "Microsoft YaHei";}
|
||||
button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
|
||||
body{height:auto;font-family: "Microsoft YaHei";}
|
||||
button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
|
||||
</style>
|
||||
<body class="hold-transition box box-main">
|
||||
<input id="treeId" name="treeId" type="hidden" th:value="${menu.menuId}"/>
|
||||
@@ -24,8 +25,8 @@ button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
|
||||
</div>
|
||||
<div id="tree" class="ztree treeselect"></div>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<script th:src="@{/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js}"></script>
|
||||
<th:block th:include="include :: footer" />
|
||||
<th:block th:include="include :: ztree-js" />
|
||||
<script th:inline="javascript">
|
||||
$(function() {
|
||||
var url = ctx + "system/menu/menuTreeData";
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<link th:href="@{/ajax/libs/summernote/summernote.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/ajax/libs/summernote/summernote-bs3.css}" rel="stylesheet"/>
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('新增通知公告')" />
|
||||
<th:block th:include="include :: summernote-css" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-notice-add">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">公告标题:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="noticeTitle" name="noticeTitle" class="form-control" type="text">
|
||||
<input id="noticeTitle" name="noticeTitle" class="form-control" type="text" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -37,37 +37,59 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-control-static col-sm-offset-9">
|
||||
<button type="submit" class="btn btn-primary">提交</button>
|
||||
<button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<script th:src="@{/ajax/libs/summernote/summernote.min.js}"></script>
|
||||
<script th:src="@{/ajax/libs/summernote/summernote-zh-CN.js}"></script>
|
||||
<th:block th:include="include :: footer" />
|
||||
<th:block th:include="include :: summernote-js" />
|
||||
<script type="text/javascript">
|
||||
var prefix = ctx + "system/notice";
|
||||
|
||||
|
||||
$('.summernote').summernote({
|
||||
height : '220px',
|
||||
lang : 'zh-CN'
|
||||
lang : 'zh-CN',
|
||||
callbacks: {
|
||||
onImageUpload: function (files) {
|
||||
sendFile(files[0], this);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 上传文件
|
||||
function sendFile(file, obj) {
|
||||
var data = new FormData();
|
||||
data.append("file", file);
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ctx + "common/upload",
|
||||
data: data,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
dataType: 'json',
|
||||
success: function(result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
$(obj).summernote('editor.insertImage', result.url, result.fileName);
|
||||
} else {
|
||||
$.modal.alertError(result.msg);
|
||||
}
|
||||
},
|
||||
error: function(error) {
|
||||
$.modal.alertWarning("图片上传失败。");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$("#form-notice-add").validate({
|
||||
rules:{
|
||||
noticeTitle:{
|
||||
required:true,
|
||||
}
|
||||
},
|
||||
submitHandler: function(form) {
|
||||
var sHTML = $('.summernote').code();
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
if ($.validate.form()) {
|
||||
var sHTML = $('.summernote').summernote('code');
|
||||
$("#noticeContent").val(sHTML);
|
||||
$.operate.save(prefix + "/add", $('#form-notice-add').serialize());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<link th:href="@{/ajax/libs/summernote/summernote.css}" rel="stylesheet"/>
|
||||
<link th:href="@{/ajax/libs/summernote/summernote-bs3.css}" rel="stylesheet"/>
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||
<head>
|
||||
<th:block th:include="include :: header('修改通知公告')" />
|
||||
<th:block th:include="include :: summernote-css" />
|
||||
</head>
|
||||
<body class="white-bg">
|
||||
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
|
||||
<form class="form-horizontal m" id="form-notice-edit" th:object="${notice}">
|
||||
@@ -11,7 +11,7 @@
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">公告标题:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="noticeTitle" name="noticeTitle" th:field="*{noticeTitle}" class="form-control" type="text">
|
||||
<input id="noticeTitle" name="noticeTitle" th:field="*{noticeTitle}" class="form-control" type="text" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -38,41 +38,63 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-control-static col-sm-offset-9">
|
||||
<button type="submit" class="btn btn-primary">提交</button>
|
||||
<button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div th:include="include::footer"></div>
|
||||
<script th:src="@{/ajax/libs/summernote/summernote.min.js}"></script>
|
||||
<script th:src="@{/ajax/libs/summernote/summernote-zh-CN.js}"></script>
|
||||
<th:block th:include="include :: footer" />
|
||||
<th:block th:include="include :: summernote-js" />
|
||||
<script type="text/javascript">
|
||||
var prefix = ctx + "system/notice";
|
||||
|
||||
$(function() {
|
||||
$('.summernote').summernote({
|
||||
height : '220px',
|
||||
lang : 'zh-CN'
|
||||
height : '220px',
|
||||
lang : 'zh-CN',
|
||||
callbacks: {
|
||||
onImageUpload: function (files) {
|
||||
sendFile(files[0], this);
|
||||
}
|
||||
}
|
||||
});
|
||||
var content = $("#noticeContent").val();
|
||||
$('#editor').code(content);
|
||||
$('#editor').summernote('code', content);
|
||||
});
|
||||
|
||||
// 上传文件
|
||||
function sendFile(file, obj) {
|
||||
var data = new FormData();
|
||||
data.append("file", file);
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ctx + "common/upload",
|
||||
data: data,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
dataType: 'json',
|
||||
success: function(result) {
|
||||
if (result.code == web_status.SUCCESS) {
|
||||
$(obj).summernote('editor.insertImage', result.url, result.fileName);
|
||||
} else {
|
||||
$.modal.alertError(result.msg);
|
||||
}
|
||||
},
|
||||
error: function(error) {
|
||||
$.modal.alertWarning("图片上传失败。");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$("#form-notice-edit").validate({
|
||||
rules:{
|
||||
xxxx:{
|
||||
required:true,
|
||||
},
|
||||
},
|
||||
submitHandler: function(form) {
|
||||
var sHTML = $('.summernote').code();
|
||||
focusCleanup: true
|
||||
});
|
||||
|
||||
function submitHandler() {
|
||||
if ($.validate.form()) {
|
||||
var sHTML = $('.summernote').summernote('code');
|
||||
$("#noticeContent").val(sHTML);
|
||||
$.operate.save(prefix + "/edit", $('#form-notice-edit').serialize());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user