Compare commits

...

59 Commits

Author SHA1 Message Date
wangxy 45998187fc feat:头部添加日期
2 years ago
dshclm 11ced4a284 提交修改
2 years ago
dshclm 66af6d571a 提交修改
2 years ago
dshclm 25be89616a 提交修改
2 years ago
dshclm d18ddba481 提交修改
2 years ago
wangxy d9473d5ce4 feat:样式修改
2 years ago
dshclm 31ada9600d 提交修改
2 years ago
wangxy 5026ae8220 feat:样式修改
2 years ago
wangxy b087bdf5fd feat:样式修改
2 years ago
wangxy 6b1de4f65f feat:样式修改
2 years ago
wangxy 25817c318b feat:样式修改
2 years ago
wangxy 05c33ee544 feat:样式修改
2 years ago
wangxy 73cdf76ca8 feat:样式修改
2 years ago
wangxy f9392c33c6 feat:样式修改
2 years ago
wangxy c7d1d46bb6 feat:头部图片修改
2 years ago
dshclm 40667869ba Merge remote-tracking branch 'origin/dev-captcha' into dev-captcha
2 years ago
dshclm 2bac738c7a 提交修改
2 years ago
wangxy 43e262c640 feat:头部图片修改
2 years ago
wangxy e458426a60 feat:头部图片修改
2 years ago
wangxy f0d0b1d76d feat:轮播图调整
2 years ago
wangxy f5906ba30b feat:轮播图调整
2 years ago
wangxy d26235d64a feat:轮播图调整
2 years ago
wangxy b0d20e3ed9 feat:轮播图调整
2 years ago
dshclm acabf1c611 提交修改
2 years ago
dshclm 61605dd42d 提交修改
2 years ago
dshclm edbbef13e0 提交修改
2 years ago
dshclm 3c9cb17ffa 提交修改
2 years ago
dshclm eb0f983674 提交修改
2 years ago
dshclm 10bf5f8704 提交修改
2 years ago
dshclm 20a6ebb2b2 提交修改
2 years ago
dshclm 118a76135f 提交修改
2 years ago
wangxy 88515ab8e0 feat:轮播图调整
2 years ago
dshclm 849a45b3f7 提交修改
2 years ago
wangxy abde706a2d feat:轮播图调整
2 years ago
wangxy c0a231a145 feat:添加排序
2 years ago
wangxy 58c1a1bf9b feat:添加排序
2 years ago
wangxy aa3a7d3368 feat:添加排序
2 years ago
wangxy 5ab0679421 feat:修改头部、友情链接
2 years ago
wangxy e0e6a9e169 feat:修改头部、友情链接
2 years ago
wangxy 7924f83ea2 feat:添加用户手册
2 years ago
wangxy 2a61e59e32 feat:添加长度校验
2 years ago
wangxy c8bd6c8cc1 feat:添加长度校验
2 years ago
wangxy 0533a0c300 feat:密码加密传输
2 years ago
wangxy f89a3458d8 验证码改为滑块
2 years ago
wangxy 301f903ef2 验证码改为滑块
2 years ago
wangxy a2df444072 验证码改为滑块
2 years ago
wangxy b3b0177027 代码提交
2 years ago
wangxy ff54f3a4c5 代码提交
2 years ago
dsh a97ef863e7 提交修改
2 years ago
dsh 8cf498098c Merge remote-tracking branch 'origin/hangao-new' into hangao-new
2 years ago
dsh b982dc33d0 提交修改
2 years ago
wangxy c56ffd6b9f Merge remote-tracking branch 'origin/hangao-new' into hangao-new
2 years ago
wangxy e67f70a178 代码提交
2 years ago
dsh c9a7591552 提交修改
2 years ago
dsh e4247ce823 提交修改
2 years ago
dsh 5ea8d534d9 提交修改
2 years ago
dsh 5e411d5a94 提交修改
2 years ago
dsh b8cc4a83b3 提交修改
2 years ago
wangxy 9fccb82632 代码提交
2 years ago

@ -10,6 +10,7 @@ import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -22,9 +23,10 @@ import java.util.List;
import java.util.stream.Collectors;
/**
*
*
* @author wangxy
*/
@Api("首页门户")
@Controller
public class HomeController {
@ -73,7 +75,7 @@ public class HomeController {
@GetMapping("/home")
public String home(ModelMap mmap) {
//最新通知
List<SysNotice> urlList = noticeService.selectNoticeHomeUrl(new SysNotice());
List<SysWork> urlList = workService.selectWorkHomeUrl(new SysWork());
mmap.put("urlList", urlList);
List<SysNotice> list = noticeService.selectNoticeHomeList(new SysNotice());
mmap.put("noticeList", list);
@ -111,7 +113,7 @@ public class HomeController {
windowWrapper.eq(SysColumn::getColumnType, WINDOW_COLUMN_TYPE);
windowWrapper.eq(SysColumn::getColumnGrade, COLUMN_GRADE);
windowWrapper.eq(SysColumn::getStatus,STATUS);
queryWrapper.orderByAsc(SysColumn::getOrderNum);
windowWrapper.orderByAsc(SysColumn::getOrderNum);
List<SysColumn> windowColumns = columnService.list(windowWrapper);
mmap.put("windowColumns", windowColumns);
//访问量
@ -130,7 +132,7 @@ public class HomeController {
@GetMapping("/base.html")
public String base(ModelMap mmap) {
//最新通知
List<SysNotice> urlList = noticeService.selectNoticeHomeUrl(new SysNotice());
List<SysWork> urlList = workService.selectWorkHomeUrl(new SysWork());
mmap.put("urlList", urlList);
List<SysNotice> list = noticeService.selectNoticeHomeList(new SysNotice());
mmap.put("noticeList", list);
@ -168,7 +170,7 @@ public class HomeController {
windowWrapper.eq(SysColumn::getColumnType, WINDOW_COLUMN_TYPE);
windowWrapper.eq(SysColumn::getColumnGrade, COLUMN_GRADE);
windowWrapper.eq(SysColumn::getStatus,STATUS);
queryWrapper.orderByAsc(SysColumn::getOrderNum);
windowWrapper.orderByAsc(SysColumn::getOrderNum);
List<SysColumn> windowColumns = columnService.list(windowWrapper);
mmap.put("windowColumns", windowColumns);
@ -225,36 +227,20 @@ public class HomeController {
@RequestParam(required = false ) String columnId) {
//部门动态对应的栏目
List<SysColumn> deptColumns = null;
if(StringUtils.isNotBlank(columnId)){
deptColumns = columnService.lambdaQuery()
.eq(SysColumn::getParentId,columnId)
.list();
} else{
deptColumns = columnService.lambdaQuery()
List<SysColumn> deptColumns = columnService.lambdaQuery()
.eq(SysColumn::getColumnType, DEPT_COLUMN_TYPE)
.eq(SysColumn::getColumnGrade, "3")
.eq(SysColumn::getStatus,STATUS)
.list();
}
if(CollUtil.isEmpty(deptColumns)){
deptColumns = columnService.lambdaQuery()
.eq(SysColumn::getColumnId,columnId)
.eq(SysColumn::getColumnGrade, COLUMN_GRADE)
.eq(SysColumn::getStatus,STATUS)
.orderByAsc(SysColumn::getOrderNum)
.list();
}
mmap.put("deptColumns", deptColumns);
List<String> columnIdList = deptColumns.stream().map(SysColumn::getColumnId).collect(Collectors.toList());
PageMethod.startPage(pageNum,pageSize);
//部门动态
LambdaQueryWrapper<SysDeptTrends> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysDeptTrends::getStatus,STATUS);
if(CollUtil.isNotEmpty(columnIdList)){
queryWrapper.in(SysDeptTrends::getColumnId,columnIdList);
}else{
queryWrapper.eq(SysDeptTrends::getColumnId, null);
if(StringUtils.isNotBlank(columnId)){
queryWrapper.eq(SysDeptTrends::getColumnId, columnId);
}
List<SysDeptTrends> deptTrends = trendsService.list(queryWrapper);
PageInfo<SysDeptTrends> page = new PageInfo<>(deptTrends, pageSize);
@ -311,6 +297,7 @@ public class HomeController {
.eq(SysColumn::getColumnType, SPECIAL_COLUMN_TYPE)
.eq(SysColumn::getColumnGrade, COLUMN_GRADE)
.eq(SysColumn::getStatus,STATUS)
.orderByAsc(SysColumn::getOrderNum)
.list();
mmap.put("specialColumns", specialColumns);

@ -2,6 +2,8 @@ package com.ruoyi.web.controller.system;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.utils.security.RsaUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
@ -56,14 +58,14 @@ public class SysLoginController extends BaseController
@ResponseBody
public AjaxResult ajaxLogin(String username, String password, Boolean rememberMe)
{
UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
Subject subject = SecurityUtils.getSubject();
try
{
UsernamePasswordToken token = new UsernamePasswordToken(username, RsaUtils.decryptByPrivateKey(password), rememberMe);
Subject subject = SecurityUtils.getSubject();
subject.login(token);
return success();
}
catch (AuthenticationException e)
catch (Exception e)
{
String msg = "用户或密码错误";
if (StringUtils.isNotEmpty(e.getMessage()))

@ -125,7 +125,7 @@ shiro:
kickoutAfter: false
rememberMe:
# 是否开启记住我
enabled: true
enabled: false
#解析密钥
jasypt:
@ -145,3 +145,17 @@ xss:
swagger:
# 是否开启swagger
enabled: false
# 滑块验证码
aj:
captcha:
# blockPuzzle滑块 clickWord文字点选 default默认两者都实例化
type: blockPuzzle
# 右下角显示字
water-mark:
# 校验滑动拼图允许误差偏移量(默认5像素)
slip-offset: 5
# aes加密坐标开启或者禁用(true|false)
aes-status: true
# 滑动干扰项(0/1/2)
interference-options: 0

@ -0,0 +1,12 @@
// 加密数据函数 工具crypto.js 文件工具
/**
* @word 要加密的内容
* @keyWord String 服务器随机返回的关键字
* */
function aesEncrypt(word,keyWord){
// var keyWord = keyWord || "XwKsGlMcdPMEhR1B"
var key = CryptoJS.enc.Utf8.parse(keyWord);
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
return encrypted.toString();
}

@ -0,0 +1 @@
function aesEncrypt(d,e){var a=CryptoJS.enc.Utf8.parse(e);var c=CryptoJS.enc.Utf8.parse(d);var b=CryptoJS.AES.encrypt(c,a,{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7});return b.toString()};

File diff suppressed because one or more lines are too long

@ -0,0 +1,275 @@
.verify-code {
font-size: 20px;
text-align: center;
cursor: pointer;
margin-bottom: 5px;
border: 1px solid #ddd;
}
.cerify-code-panel {
height:100%;
overflow:hidden;
}
.verify-code-area {
float:left;
}
.verify-input-area {
float: left;
width: 60%;
padding-right: 10px;
}
.verify-change-area {
line-height: 30px;
float: left;
}
.varify-input-code {
display:inline-block;
width: 100%;
height: 25px;
}
.verify-change-code {
color: #337AB7;
cursor: pointer;
}
.verify-btn {
width: 200px;
height: 30px;
background-color: #337AB7;
color:#FFFFFF;
border:none;
margin-top: 10px;
}
.verifybox{
position: relative;
box-sizing: border-box;
border-radius: 2px;
border: 1px solid #e4e7eb;
background-color: #fff;
box-shadow: 0 0 10px rgba(0,0,0,.3);
left: 50%;
top:50%;
transform: translate(-50%,-50%);
}
.verifybox-top{
padding: 0 15px;
height: 40px;
line-height: 40px;
text-align: left;
font-size: 16px;
color: #45494c;
border-bottom: 1px solid #e4e7eb;
box-sizing: border-box;
}
.verifybox-bottom{
padding: 15px;
box-sizing: border-box;
}
.verifybox-close{
position: absolute;
top: 8px;
right: 9px;
width: 24px;
height: 24px;
line-height: 24px;
text-align: center;
cursor: pointer;
transition: transform 0.2s ease;
}
.verifybox-close .icon-close{
font-weight: bold;
}
.verifybox-close:hover {
transition: transform 0.2s ease;
transform:rotate(60deg);
-ms-transform:rotate(60deg);
-moz-transform:rotate(60deg);
-webkit-transform:rotate(60deg);
-o-transform:rotate(60deg);
}
.mask{
position: fixed;
top: 0;
left:0;
z-index: 1001;
width: 100%;
height: 100vh;
background: rgba(0,0,0,.3);
/* display: none; */
transition: all .5s;
display: none;
}
.verify-tips{
position: absolute;
display: none;
left: 0px;
bottom:-35px;
width: 100%;
height: 30px;
/* transition: all .5s; */
line-height:30px;
color: #fff;
/* animation:move 1.5s linear; */
}
@keyframes move {
0%{
bottom:-35px;
}
50%,80%{
bottom:0px;
}
100%{
bottom:-35px;
}
}
.suc-bg{
background-color:rgba(92, 184, 92,.5);
filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=#7f5CB85C, endcolorstr=#7f5CB85C);
}
.err-bg{
background-color:rgba(217, 83, 79,.5);
filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=#7fD9534F, endcolorstr=#7fD9534F);
}
/*滑动验证码*/
.verify-bar-area {
position: relative;
background: #FFFFFF;
text-align: center;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
border: 1px solid #ddd;
-webkit-border-radius: 4px;
}
.verify-bar-area .verify-move-block {
position: absolute;
top: 0px;
left: 0;
background: #fff;
cursor: move;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
box-shadow: 0 0 2px #888888;
-webkit-border-radius: 1px;
}
.verify-bar-area .verify-move-block:hover {
background-color: #337ab7;
color: #FFFFFF;
}
.verify-bar-area .verify-left-bar {
position: absolute;
top: -1px;
left: -1px;
background: #f0fff0;
cursor: pointer;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
border: 1px solid #ddd;
}
.verify-img-panel {
margin:0;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
border: 1px solid #ddd;
border-radius: 3px;
position: relative;
}
/*.verify-img-panel .verify-refresh {*/
/* width: 25px;*/
/* height: 25px;*/
/* text-align:center;*/
/* padding: 5px;*/
/* cursor: pointer;*/
/* position: absolute;*/
/* top: 0;*/
/* right: 0;*/
/* z-index: 2;*/
/*}*/
.verify-img-panel .verify-refresh img {
pointer-events: auto;
display: block;
width: 30px;
height: 30px;
position: absolute;
top: 10px;
right: 10px;
transition: 200ms;
cursor: pointer;
}
.verify-img-panel .icon-refresh {
font-size: 20px;
color: #fff;
}
.verify-img-panel .verify-gap {
background-color: #fff;
position: relative;
z-index: 2;
border:1px solid #fff;
}
.verify-bar-area .verify-move-block .verify-sub-block {
position: absolute;
text-align: center;
z-index: 3;
/* border: 1px solid #fff; */
}
.verify-bar-area .verify-move-block .verify-icon {
font-size: 18px;
}
.verify-bar-area .verify-msg {
z-index : 3;
font-weight: 700;
color: #40485b;
}
/*字体图标的css*/
@font-face {font-family: "iconfont";
src: url('../fonts/iconfont.eot?t=1508229193188'); /* IE9*/
src: url('../fonts/iconfont.eot?t=1508229193188#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAaAAAsAAAAACUwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZW7kiSY21hcAAAAYAAAAB3AAABuM+qBlRnbHlmAAAB+AAAAnQAAALYnrUwT2hlYWQAAARsAAAALwAAADYPNwajaGhlYQAABJwAAAAcAAAAJAfeA4dobXR4AAAEuAAAABMAAAAYF+kAAGxvY2EAAATMAAAADgAAAA4CvAGsbWF4cAAABNwAAAAfAAAAIAEVAF1uYW1lAAAE/AAAAUUAAAJtPlT+fXBvc3QAAAZEAAAAPAAAAE3oPPXPeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/sM4gYGVgYOpk+kMAwNDP4RmfM1gxMjBwMDEwMrMgBUEpLmmMDgwVDxbwtzwv4EhhrmBoQEozAiSAwAw1A0UeJzFkcENgCAMRX8RjCGO4gTe9eQcnhzAfXC2rqG/hYsT8MmD9gdS0gJIAAaykAjIBYHppCvuD8juR6zMJ67A89Zdn/f1aNPikUn8RvYo8G20CjKim6Rf6b9m34+WWd/vBr+oW8V6q3vF5qKlYrPRp4L0Ad5nGL8AeJxFUc9rE0EYnTezu8lMsrvtbrqb3TRt0rS7bdOmdI0JbWmCtiItIv5oi14qevCk9SQVLFiQgqAF8Q9QLKIHLx48FkHo3ZNnFUXwD5C2B6dO6sFhmI83w7z3fe8RnZCjb2yX5YlLhskkmScXCIFRxYBFiyjH9Rqtoqes9/g5i8WVuJyqDNTYLPwBI+cljXrkGynDhoU+nCgnjbhGY5yst+gMEq8IBIXwsjPU67CnEPm4b0su0h309Fd67da4XBhr55KSm17POk7gOE/Shq6nKdVsC7d9j+tcGPKVboc9u/0jtB/ZIA7PXTVLBef6o/paccjnwOYm3ELJetPuDrvV3gg91wlSXWY6H5qVwRzWf2TybrYYfSdqoXOwh/Qa8RWIjBTiSI3h614/vKSNRhONOrsnQi6Xf4nQFQDTmJE1NKbhI6crHEJO/+S5QPxhYJRRyvBFBP+5T9EPpEAIVzzRQIrjmJ6jY1WTo+NXTMchuBsKuS8PRZATSMl9oTA4uNLkeIA0V1UeqOoGQh7IAxGo+7T83fn3T+voqCNPPAUazUYUI7LgKSV1Jk2oUeghYGhZ+cKOe2FjVu5ZKEY2VkE13AK1+jI4r1KLbPlZfrKiPhOXKPRj7q9sj9XJ7LFHNmrKJS3VCdhXGSdKrtmoQaWeMjQVt0KD6sGPOx0oH2fgtzoNROxtNq8F3tzYM/n+TjKSX5qf2jx941276TIr9FjXxKr8eX/6bK4yuopwo9py1sw8F9kdw4AmurRpLUM3tYx5ZnKpfHPi8dzz19vJ6MjyxYUrpqeb1uLs3eGV6vr21pSqpeWkqonAN9oUyIiXpv8XvlN5e3icY2BkYGAA4n0vN4fG89t8ZeBmYQCBa9wPPRH0/wcsDMwmQC4HAxNIFABAfAqaAHicY2BkYGBu+N/AEMPCAAJAkpEBFbABAEcMAm94nGNhYGBgfsnAwMKAigESnwEBAAAAAAAAdgCkANoBCAFsAAB4nGNgZGBgYGMIZGBlAAEmIOYCQgaG/2A+AwARSAFzAHicZY9NTsMwEIVf+gekEqqoYIfkBWIBKP0Rq25YVGr3XXTfpk6bKokjx63UA3AejsAJOALcgDvwSCebNpbH37x5Y08A3OAHHo7fLfeRPVwyO3INF7gXrlN/EG6QX4SbaONVuEX9TdjHM6bCbXRheYPXuGL2hHdhDx18CNdwjU/hOvUv4Qb5W7iJO/wKt9Dx6sI+5l5XuI1HL/bHVi+cXqnlQcWhySKTOb+CmV7vkoWt0uqca1vEJlODoF9JU51pW91T7NdD5yIVWZOqCas6SYzKrdnq0AUb5/JRrxeJHoQm5Vhj/rbGAo5xBYUlDowxQhhkiMro6DtVZvSvsUPCXntWPc3ndFsU1P9zhQEC9M9cU7qy0nk6T4E9XxtSdXQrbsuelDSRXs1JErJCXta2VELqATZlV44RelzRiT8oZ0j/AAlabsgAAAB4nGNgYoAALgbsgI2RiZGZkYWRlZGNkZ2BsYI1OSM1OZs1OSe/OJW1KDM9o4S9KDWtKLU4g4EBAJ79CeQ=') format('woff'),
url('../fonts/iconfont.ttf?t=1508229193188') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
url('../fonts/iconfont.svg?t=1508229193188#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
font-family:"iconfont" !important;
font-size:16px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-check:before { content: "\e645"; }
.icon-close:before { content: "\e646"; }
.icon-right:before { content: "\e6a3"; }
.icon-refresh:before { content: "\e6a4"; }

File diff suppressed because one or more lines are too long

@ -0,0 +1,45 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2013-9-30: Created.
-->
<svg>
<metadata>
Created by iconfont
</metadata>
<defs>
<font id="iconfont" horiz-adv-x="1024" >
<font-face
font-family="iconfont"
font-weight="500"
font-stretch="normal"
units-per-em="1024"
ascent="896"
descent="-128"
/>
<missing-glyph />
<glyph glyph-name="x" unicode="x" horiz-adv-x="1001"
d="M281 543q-27 -1 -53 -1h-83q-18 0 -36.5 -6t-32.5 -18.5t-23 -32t-9 -45.5v-76h912v41q0 16 -0.5 30t-0.5 18q0 13 -5 29t-17 29.5t-31.5 22.5t-49.5 9h-133v-97h-438v97zM955 310v-52q0 -23 0.5 -52t0.5 -58t-10.5 -47.5t-26 -30t-33 -16t-31.5 -4.5q-14 -1 -29.5 -0.5
t-29.5 0.5h-32l-45 128h-439l-44 -128h-29h-34q-20 0 -45 1q-25 0 -41 9.5t-25.5 23t-13.5 29.5t-4 30v167h911zM163 247q-12 0 -21 -8.5t-9 -21.5t9 -21.5t21 -8.5q13 0 22 8.5t9 21.5t-9 21.5t-22 8.5zM316 123q-8 -26 -14 -48q-5 -19 -10.5 -37t-7.5 -25t-3 -15t1 -14.5
t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-5 19 -11 39h-368zM336 498v228q0 11 2.5 23t10 21.5t20.5 15.5t34 6h188q31 0 51.5 -14.5t20.5 -52.5v-227h-327z" />
<glyph glyph-name="check" unicode="&#58949;" d="M887.904 597.792c-12.864 12.064-33.152 11.488-45.216-1.408L415.936 142.016l-233.12 229.696C170.208 384.128 149.952 384 137.536 371.392c-12.416-12.576-12.256-32.864 0.352-45.248l256.48-252.672c0.096-0.096 0.224-0.128 0.32-0.224 0.096-0.096 0.128-0.224 0.224-0.32 2.016-1.92 4.448-3.008 6.784-4.288 1.152-0.672 2.144-1.664 3.36-2.144 3.776-1.472 7.776-2.24 11.744-2.24 4.192 0 8.384 0.832 12.288 2.496 1.312 0.544 2.336 1.664 3.552 2.368 2.4 1.408 4.896 2.592 6.944 4.672 0.096 0.096 0.128 0.256 0.224 0.352 0.064 0.096 0.192 0.128 0.288 0.224l449.184 478.208C901.44 565.408 900.768 585.664 887.904 597.792z" horiz-adv-x="1024" />
<glyph glyph-name="close" unicode="&#58950;" d="M557.312 382.752l265.28 263.904c12.544 12.48 12.608 32.704 0.128 45.248-12.512 12.576-32.704 12.608-45.248 0.128l-265.344-263.936-263.04 263.84C236.64 704.416 216.384 704.48 203.84 692 191.328 679.52 191.296 659.264 203.776 646.72l262.976-263.776L201.6 119.2c-12.544-12.48-12.608-32.704-0.128-45.248 6.24-6.272 14.464-9.44 22.688-9.44 8.16 0 16.32 3.104 22.56 9.312l265.216 263.808 265.44-266.24c6.24-6.272 14.432-9.408 22.656-9.408 8.192 0 16.352 3.136 22.592 9.344 12.512 12.48 12.544 32.704 0.064 45.248L557.312 382.752z" horiz-adv-x="1024" />
<glyph glyph-name="right" unicode="&#59043;" d="M761.056 363.872c0.512 0.992 1.344 1.824 1.792 2.848 8.8 18.304 5.92 40.704-9.664 55.424L399.936 756.256c-19.264 18.208-49.632 17.344-67.872-1.888-18.208-19.264-17.376-49.632 1.888-67.872l316.96-299.84-315.712-304.288c-19.072-18.4-19.648-48.768-1.248-67.872 9.408-9.792 21.984-14.688 34.56-14.688 12 0 24 4.48 33.312 13.44l350.048 337.376c0.672 0.672 0.928 1.6 1.6 2.304 0.512 0.48 1.056 0.832 1.568 1.344C757.76 357.12 759.2 360.608 761.056 363.872z" horiz-adv-x="1024" />
<glyph glyph-name="refresh" unicode="&#59044;" d="M939.456 639.776c-16.672 5.984-34.976-2.72-40.896-19.36l-24.768-69.344c-28.992 65.312-74.784 122.72-133.088 165.92C555.328 854.272 291.296 816.768 152.32 633.344c-67.264-88.768-95.616-198.176-79.84-308.032 15.84-110.304 74.208-207.776 164.352-274.496 75.424-55.808 163.808-82.752 251.456-82.752 128.032 0 254.56 57.44 336.992 166.272 36.48 48.128 61.472 102.08 74.208 160.416 3.776 17.248-7.136 34.304-24.416 38.08-17.216 3.712-34.304-7.104-38.08-24.416-10.784-49.184-31.872-94.752-62.72-135.456-117.888-155.52-341.92-187.232-499.392-70.72-76.288 56.48-125.664 138.912-139.072 232.16-13.344 92.8 10.656 185.248 67.488 260.288 117.856 155.584 341.792 187.424 499.328 70.848 57.024-42.24 99.84-100.608 122.976-166.624l-109.984 42.944c-16.416 6.368-35.008-1.696-41.44-18.176-6.432-16.48 1.728-35.008 18.176-41.44l161.856-63.2c3.808-1.472 7.744-2.208 11.616-2.208 0.544 0 1.024 0.192 1.568 0.224 1.216-0.128 2.432-0.64 3.648-0.64 13.12 0 25.472 8.16 30.112 21.248l57.632 161.184C964.768 615.52 956.096 633.856 939.456 639.776z" horiz-adv-x="1024" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

@ -0,0 +1,705 @@
/*! Verify&admin MIT License by anji-plus*/
;(function($, window, document,undefined) {
// 初始话 uuid
uuid()
function uuid() {
var s = [];
var hexDigits = "0123456789abcdef";
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
s[8] = s[13] = s[18] = s[23] = "-";
var slider = 'slider'+ '-'+s.join("");
var point = 'point'+ '-'+s.join("");
if(!localStorage.getItem('slider')) {
localStorage.setItem('slider', slider)
}
if(!localStorage.getItem('point')) {
localStorage.setItem("point",point);
}
}
var startX,startY;
document.addEventListener("touchstart",function(e){
startX = e.targetTouches[0].pageX;
startY = e.targetTouches[0].pageY;
});
document.addEventListener("touchmove",function(e){
var moveX = e.targetTouches[0].pageX;
var moveY = e.targetTouches[0].pageY;
if(Math.abs(moveX-startX)>Math.abs(moveY-startY)){
e.preventDefault();
}
},{passive:false});
//请求图片get事件
function getPictrue(data,baseUrl,resolve,reject){
$.ajax({
type : "post",
contentType: "application/json;charset=UTF-8",
url : baseUrl + "captcha/get",
data :JSON.stringify(data),
cache: false,
crossDomain: true == !(document.all),
success:function(res){
resolve(res)
},
fail: function(err) {
reject(err)
}
})
}
//验证图片check事件
function checkPictrue(data,baseUrl,resolve,reject){
$.ajax({
type : "post",
contentType: "application/json;charset=UTF-8",
url : baseUrl + "captcha/check",
data :JSON.stringify(data),
cache: false,
crossDomain: true == !(document.all),
success:function(res){
resolve(res)
},
fail: function(err) {
reject(err)
}
})
}
//定义Slide的构造函数
var Slide = function(ele, opt) {
this.$element = ele,
this.backToken = null,
this.moveLeftDistance = 0,
this.secretKey = '',
this.defaults = {
baseUrl:"https://captcha.anji-plus.com/captcha-api",
containerId:'',
captchaType:"blockPuzzle",
mode : 'fixed', //弹出式pop固定fixed
vOffset: 5,
vSpace : 5,
explain : '向右滑动完成验证',
imgSize : {
width: '360px',
height: '155px',
},
blockSize : {
width: '50px',
height: '50px',
},
circleRadius: '10px',
barSize : {
width : '360px',
height : '40px',
},
beforeCheck:function(){ return true},
ready : function(){},
success : function(){},
error : function(){}
},
this.options = $.extend({}, this.defaults, opt)
};
//定义Slide的方法
Slide.prototype = {
init: function() {
var _this = this;
//加载页面
this.loadDom();
_this.refresh();
this.options.ready();
this.$element[0].onselectstart = document.body.ondrag = function(){
return false;
};
if(this.options.mode == 'pop') {
_this.$element.find('.verifybox-close').on('click', function() {
_this.$element.find(".mask").css("display","none");
_this.refresh();
});
var clickBtn = document.getElementById(this.options.containerId);
clickBtn && (clickBtn.onclick = function(){
if (_this.options.beforeCheck()) {
_this.$element.find(".mask").css("display","block");
}
})
}
//按下
this.htmlDoms.move_block.on('touchstart', function(e) {
_this.start(e);
});
this.htmlDoms.move_block.on('mousedown', function(e) {
_this.start(e);
});
//拖动
window.addEventListener("touchmove", function(e) {
_this.move(e);
});
window.addEventListener("mousemove", function(e) {
_this.move(e);
});
//鼠标松开
window.addEventListener("touchend", function() {
_this.end();
});
window.addEventListener("mouseup", function() {
_this.end();
});
//刷新
_this.$element.find('.verify-refresh').on('click', function() {
_this.refresh();
});
},
//初始化加载
loadDom : function() {
this.status = false; //鼠标状态
this.isEnd = false; //是够验证完成
this.setSize = this.resetSize(this); //重新设置宽度高度
this.plusWidth = 0;
this.plusHeight = 0;
this.x = 0;
this.y = 0;
var panelHtml = '';
var wrapHtml = '';
this.lengthPercent = (parseInt(this.setSize.img_width)-parseInt(this.setSize.block_width)- parseInt(this.setSize.circle_radius) - parseInt(this.setSize.circle_radius) * 0.8)/(parseInt(this.setSize.img_width)-parseInt(this.setSize.bar_height));
wrapStartHtml = '<div class="mask">'+
'<div class="verifybox" style="width:'+(parseInt(this.setSize.img_width)+30)+'px">'+
'<div class="verifybox-top">'+
'请完成安全验证'+
'<span class="verifybox-close">'+
'<i class="iconfont icon-close"></i>'+
'</span>'+
'</div>'+
'<div class="verifybox-bottom" style="padding:10px 15px 15px 15px">'+
'<div style="position: relative;">';
if (this.options.mode == 'pop') {
panelHtml = wrapStartHtml
}
panelHtml += '<div class="verify-img-out">'+
'<div class="verify-img-panel">'+
'<div class="verify-refresh" style="z-index:3">'+
'<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAARVBMVEUAAAAFBQUAAAABAQFHcEwAAAAAAAAAAAAAAAAAAAABAQESEhL5+fn8/Pzl5eXY2NikpKS7u7vz8/N5eXns7OzHx8f///8m8Yz0AAAAFnRSTlMBJBYfAA4SBQkCGi3f8qGOVWPNQbV5nvGdEgAABohJREFUaN69mumWpCoMgKO1aBWKu+//qCN7EkBxpqf5c889Y/F1FpKQAM/CBalV+tvS7T+JVUqCEoLbtEGLgP4FgghNepVx4ByBAS1bnPMXEIdAgBddAXSFgQKE3f/NlgUVYCDHcAhDUJvWdf316/gfC7IciymGWDE8QgPUzg+0DElzLjFwJoYjmP0rtgzJcSwmSUlCvBgWYQDjINd57vq977pVDpPQIIsx0mQokGUYMSxiHOZ+52uWo+JojBUmrbI0xImhEFW1DN2eWb3iHOIQTESBjCCWcSCmdT9d8+SlyVEgLYhmKDGmbr9cBnNCiSFGEMNY1r1ozYsR5lCZo1xBjCCHroZ+L12DESZNyUCUIEu331haGK2ymJKF1N95v7cmpTJPwWbJQ6aUx3bzvK6rOpFJlWUoeYhkW3TrNgq/lk3G2pSMkoMcHmztLtmhE8KGrEoFGVEJMUou0Bqsj80CccHQGEkGJMQmTKAywff7sPFSiK2LZanNeUlAfJXjIO/K/Zn94EKhTiN6mcCvMMzNB0shCoNkTaJjymR+vi6WUNPEqBPAgWEHdjsoxiwMQuqqEOTH9YjpI04bJuOa/75d/BQbEWZUFKow8EER1z02zNc+17pEi9bLZYJDGGyZbnEKIxBcljQNzbo+l4caiH5Ta8rMXIwqDFy6jSqrUJ+gqqTBIrchH4g5VhiDuFSod2YgVF/RQtirVVOwxuaKKQxIuj1+8oqUTysrQL7oXITbZWOiQMhSSjuTTFsgyt0e4yko1vUCieI+1idDqffR7Vvt8jUpdhOJ26vAUiQ9kgRiM6HS7ff4rl9CIj2/H2CK9rGgsD5YBcCndGO/UXugjaQtvhik608c6g7KSHIL0hfOtpX5UyYfr6/vBKHsUKKsxME4xDAkNRuNpOeUSJRw7DXEW25kWaFN1B25etOKMmPTB6OAU1ZVdSRbh8BwTfGiBDfusL6AK8soLI6k1xTqYFrnxw4GYq02phLcTVHwWZmQvqAhnkUUVmr7oC907PF5BCvIwEoTESWFc9O3rTn2Pn/NeIc2HEOqsEKIPypv6l/OripuWEhcLY5IX2UnRUOCRhYUWjRkiMvBrjq8uMAo4aDUNBaPwUU1ZElVnTIqOi4hR4W0hKQivCgaki6txxIIi15CBPcSRpRjDwUZ0lV69y2CEG1FEC2KguTuIVPBQcHBXjEIxFkFWv/vQSD18eHCr6g8zx7F9jVl/tLuoECQlEBKA7GHfDP6GCzE2gy5uKAREgqCyntM3/JqDfGibMjFRVWYUdBRlCnI4iDW/caUixdCVFCpEgob9DYQ/G9BjlEe6tExiRU2PzzEZRwUQXVqbIsgKJ3IRAA0kJAMWAQ1ee1WOuni67A+Jyh5Bvea7qUTb9eJxVh34sFZBX8yiKockqiq2J0LtOUO71DSosTIrxiFomCFhUIBnkhftCi6LcqbFUWVqxHhifQVjDIjUcrrO6WwlSiLF5HHFwvV582iyHpYn6iqnlhfIXutN6IXkEbcRDwrqrmJC460tQAng5sPvnN9H2s4hsGogEJLTx2sRj0yuByt2Muwqhjklzdykudxl8Jbrslf5+IWw7ve9u5h7oRIDTgwoLpldJT27GKaaDG85eR76/4ahUPLhvsXVaDkrtjR7AaNV3wzEvgVY8YFsW+RtulmQRO2xZzWNRisQYBfMXBSmEXoKifaHg0e3vAeA55CAMuh6Mh6jdVnDZzQ5Ym++XjPipIC6ysJP1agXRfbivLDoTASoC2GJ4ck7lz9Jly/P9lUU91I1XyTY9xi8PdziIoOfiFaF4NJtgdVf8jot59Qe5u1MSCuNlnqUcII14bkjc4qNDr7Ckch0saAVCSt2LCBt2z1BC1q2Q4MEvfqSSMnouy9XFzz2a2o+by6qJsfN6GO8DfSmBZHbktoo4/byms5iVtcOQilJC8tfafnAemBwHQNIRTdwiif0Ng7UwHkiTtxumy9NUDplnDHPJszBoptkZaPm/qhItn2ZARIKTeEWRfSiLuAwAdPMg9htoLBVucHTZk6DZ5nFD3MnO9MGT/XEEIxwqjBr+zzY9mFz0sLBsysd22lqSYZy9PPckoMmAun2MCn8SZQTYOcO3UM9ZEcxoqOyps7o3IyhYiH/gJP/enQ/3Nj6E9fSIT05F4vqPlc5vkCFD9f+J2HGL/0pCT5OOb1049jfumZD63bm//1YCm6HyT2/4GnV7/1iOz0NVzpj/8AwGROkG+dyqIAAAAASUVORK5CYII=">'+
'</div>'+
'<span class="verify-tips" class="suc-bg"></span>'+
'<img src="" class="backImg" style="width:100%;height:100%;display:block">'+
'</div>'+
'</div>';
this.plusWidth = parseInt(this.setSize.block_width) + parseInt(this.setSize.circle_radius) * 2 - parseInt(this.setSize.circle_radius) * 0.2;
this.plusHeight = parseInt(this.setSize.block_height) + parseInt(this.setSize.circle_radius) * 2 - parseInt(this.setSize.circle_radius) * 0.2;
panelHtml +='<div class="verify-bar-area" style="width:'+this.setSize.img_width+',height:'+this.setSize.bar_height+',line-height:'+this.setSize.bar_height+'">'+
'<span class="verify-msg">'+this.options.explain+'</span>'+
'<div class="verify-left-bar">'+
'<span class="verify-msg"></span>'+
'<div class="verify-move-block">'+
'<i class="verify-icon iconfont icon-right"></i>'+
'<div class="verify-sub-block">'+
'<img src="" class="bock-backImg" alt="" style="width:100%;height:100%;display:block">'+
'</div>'+
'</div>'+
'</div>'+
'</div>';
wrapEndHtml = '</div></div></div></div>';
if (this.options.mode == 'pop') {
panelHtml += wrapEndHtml
}
this.$element.append(panelHtml);
this.htmlDoms = {
tips: this.$element.find('.verify-tips'),
sub_block : this.$element.find('.verify-sub-block'),
out_panel : this.$element.find('.verify-img-out'),
img_panel : this.$element.find('.verify-img-panel'),
img_canvas : this.$element.find('.verify-img-canvas'),
bar_area : this.$element.find('.verify-bar-area'),
move_block : this.$element.find('.verify-move-block'),
left_bar : this.$element.find('.verify-left-bar'),
msg : this.$element.find('.verify-msg'),
icon : this.$element.find('.verify-icon'),
refresh :this.$element.find('.verify-refresh')
};
this.$element.css('position', 'relative');
this.htmlDoms.sub_block.css({'height':this.setSize.img_height,'width':Math.floor(parseInt(this.setSize.img_width)*47/310)+ 'px',
'top':-(parseInt(this.setSize.img_height) + this.options.vSpace) + 'px'})
this.htmlDoms.out_panel.css('height', parseInt(this.setSize.img_height) + this.options.vSpace + 'px');
this.htmlDoms.img_panel.css({'width': this.setSize.img_width, 'height': this.setSize.img_height});
this.htmlDoms.bar_area.css({'width': this.setSize.img_width, 'height': this.setSize.bar_height, 'line-height':this.setSize.bar_height});
this.htmlDoms.move_block.css({'width': this.setSize.bar_height, 'height': this.setSize.bar_height});
this.htmlDoms.left_bar.css({'width': this.setSize.bar_height, 'height': this.setSize.bar_height});
},
//鼠标按下
start: function(e) {
if(!e.originalEvent.targetTouches) { //兼容移动端
var x = e.clientX;
}else { //兼容PC端
var x = e.originalEvent.targetTouches[0].pageX;
}
// if(!e.touches) { //兼容移动端
// var x = e.clientX;
// }else { //兼容PC端
// var x = e.touches[0].pageX;
// }
this.startLeft = Math.floor(x - this.htmlDoms.bar_area[0].getBoundingClientRect().left);
this.startMoveTime = new Date().getTime();
if(this.isEnd == false) {
this.htmlDoms.msg.text('');
this.htmlDoms.move_block.css('background-color', '#337ab7');
this.htmlDoms.left_bar.css('border-color', '#337AB7');
this.htmlDoms.icon.css('color', '#fff');
e.stopPropagation();
this.status = true;
}
},
//鼠标移动
move: function(e) {
if(this.status && this.isEnd == false) {
if(!e.touches) { //兼容移动端
var x = e.clientX;
}else { //兼容PC端
var x = e.touches[0].pageX;
}
var bar_area_left = this.htmlDoms.bar_area[0].getBoundingClientRect().left;
var move_block_left = x - bar_area_left; //小方块相对于父元素的left值
if(move_block_left >= (this.htmlDoms.bar_area[0].offsetWidth - parseInt(this.setSize.bar_height) + parseInt(parseInt(this.setSize.block_width)/2) - 2) ) {
move_block_left = (this.htmlDoms.bar_area[0].offsetWidth - parseInt(this.setSize.bar_height) + parseInt(parseInt(this.setSize.block_width)/2)- 2);
}
if(move_block_left <= parseInt(parseInt(this.setSize.block_width)/2)) {
move_block_left = parseInt(parseInt(this.setSize.block_width)/2);
}
//拖动后小方块的left值
this.htmlDoms.move_block.css('left', move_block_left-this.startLeft + "px");
this.htmlDoms.left_bar.css('width', move_block_left-this.startLeft + "px");
this.htmlDoms.sub_block.css('left', "0px");
this.moveLeftDistance = move_block_left - this.startLeft
}
},
//鼠标松开
end: function() {
this.endMovetime = new Date().getTime();
var _this = this;
//判断是否重合
if(this.status && this.isEnd == false) {
var vOffset = parseInt(this.options.vOffset);
this.moveLeftDistance = this.moveLeftDistance * 310/ parseInt(this.setSize.img_width)
//图片滑动
var data = {
captchaType:this.options.captchaType,
"pointJson": this.secretKey ? aesEncrypt(JSON.stringify({x:this.moveLeftDistance,y:5.0}),this.secretKey):JSON.stringify({x:this.moveLeftDistance,y:5.0}),
"token":this.backToken,
clientUid: localStorage.getItem('slider'),
ts: Date.now()
}
var captchaVerification = this.secretKey ? aesEncrypt(this.backToken+'---'+JSON.stringify({x:this.moveLeftDistance,y:5.0}),this.secretKey):this.backToken+'---'+JSON.stringify({x:this.moveLeftDistance,y:5.0})
checkPictrue(data,this.options.baseUrl,function(res){
// 请求反正成功的判断
if (res.repCode=="0000") {
_this.htmlDoms.move_block.css('background-color', '#5cb85c');
_this.htmlDoms.left_bar.css({'border-color': '#5cb85c', 'background-color': '#fff'});
_this.htmlDoms.icon.css('color', '#fff');
_this.htmlDoms.icon.removeClass('icon-right');
_this.htmlDoms.icon.addClass('icon-check');
//提示框
_this.htmlDoms.tips.addClass('suc-bg').removeClass('err-bg')
_this.htmlDoms.tips.css({"display":"block",animation:"move 1s cubic-bezier(0, 0, 0.39, 1.01)"});
_this.htmlDoms.tips.text(((_this.endMovetime-_this.startMoveTime)/1000).toFixed(2) + 's验证成功');
_this.isEnd = true;
setTimeout(function(){
_this.$element.find(".mask").css("display","none");
_this.htmlDoms.tips.css({"display":"none",animation:"none"});
_this.refresh();
}, 1000)
_this.options.success({'__captchaVerification':captchaVerification});
}else{
_this.htmlDoms.move_block.css('background-color', '#d9534f');
_this.htmlDoms.left_bar.css('border-color', '#d9534f');
_this.htmlDoms.icon.css('color', '#fff');
_this.htmlDoms.icon.removeClass('icon-right');
_this.htmlDoms.icon.addClass('icon-close');
_this.htmlDoms.tips.addClass('err-bg').removeClass('suc-bg')
_this.htmlDoms.tips.css({"display":"block",animation:"move 1.3s cubic-bezier(0, 0, 0.39, 1.01)"});
_this.htmlDoms.tips.text(res.repMsg)
setTimeout(function () {
_this.refresh();
}, 800);
setTimeout(function () {
_this.htmlDoms.tips.css({"display":"none",animation:"none"});
}, 1300)
_this.options.error(this);
}
})
this.status = false;
}
},
resetSize : function(obj) {
var img_width,img_height,bar_width,bar_height,block_width,block_height,circle_radius; //图片的宽度、高度,移动条的宽度、高度
var parentWidth = obj.$element.parent().width() || $(window).width();
var parentHeight = obj.$element.parent().height() || $(window).height();
if(obj.options.imgSize.width.indexOf('%')!= -1){
img_width = parseInt(obj.options.imgSize.width)/100 * parentWidth + 'px';
  }else {
img_width = obj.options.imgSize.width;
}
if(obj.options.imgSize.height.indexOf('%')!= -1){
img_height = parseInt(obj.options.imgSize.height)/100 * parentHeight + 'px';
  }else {
img_height = obj.options.imgSize.height;
}
if(obj.options.barSize.width.indexOf('%')!= -1){
bar_width = parseInt(obj.options.barSize.width)/100 * parentWidth + 'px';
  }else {
bar_width = obj.options.barSize.width;
}
if(obj.options.barSize.height.indexOf('%')!= -1){
bar_height = parseInt(obj.options.barSize.height)/100 * parentHeight + 'px';
  }else {
bar_height = obj.options.barSize.height;
}
if(obj.options.blockSize) {
if(obj.options.blockSize.width.indexOf('%')!= -1){
block_width = parseInt(obj.options.blockSize.width)/100 * parentWidth + 'px';
  }else {
block_width = obj.options.blockSize.width;
}
if(obj.options.blockSize.height.indexOf('%')!= -1){
block_height = parseInt(obj.options.blockSize.height)/100 * parentHeight + 'px';
  }else {
block_height = obj.options.blockSize.height;
}
}
if(obj.options.circleRadius) {
if(obj.options.circleRadius.indexOf('%')!= -1){
circle_radius = parseInt(obj.options.circleRadius)/100 * parentHeight + 'px';
  }else {
circle_radius = obj.options.circleRadius;
}
}
return {img_width : img_width, img_height : img_height, bar_width : bar_width, bar_height : bar_height, block_width : block_width, block_height : block_height, circle_radius : circle_radius};
},
//刷新
refresh: function() {
var _this = this;
this.htmlDoms.refresh.show();
this.$element.find('.verify-msg:eq(1)').text('');
this.$element.find('.verify-msg:eq(1)').css('color', '#000');
this.htmlDoms.move_block.animate({'left':'0px'}, 'fast');
this.htmlDoms.left_bar.animate({'width': parseInt(this.setSize.bar_height)}, 'fast');
this.htmlDoms.left_bar.css({'border-color': '#ddd'});
this.htmlDoms.move_block.css('background-color', '#fff');
this.htmlDoms.icon.css('color', '#000');
this.htmlDoms.icon.removeClass('icon-close');
this.htmlDoms.icon.addClass('icon-right');
this.$element.find('.verify-msg:eq(0)').text(this.options.explain);
this.isEnd = false;
getPictrue({captchaType:"blockPuzzle", clientUid: localStorage.getItem('slider'), ts: Date.now()},this.options.baseUrl,function (res) {
if (res.repCode=="0000") {
_this.$element.find(".backImg")[0].src = 'data:image/png;base64,'+res.repData.originalImageBase64
_this.$element.find(".bock-backImg")[0].src = 'data:image/png;base64,'+res.repData.jigsawImageBase64
_this.secretKey = res.repData.secretKey
_this.backToken = res.repData.token
} else {
_this.$element.find(".backImg")[0].src = 'images/default.jpg'
_this.$element.find(".bock-backImg")[0].src = ''
_this.htmlDoms.tips.addClass('err-bg').removeClass('suc-bg')
_this.htmlDoms.tips.animate({"bottom":"0px"});
_this.htmlDoms.tips.text(res.repMsg)
setTimeout(function () {
_this.htmlDoms.tips.animate({"bottom":"-35px"});
}, 1000);
}
});
this.htmlDoms.sub_block.css('left', "0px");
},
};
//定义Points的构造函数
var Points = function(ele, opt) {
this.$element = ele,
this.backToken = null,
this.secretKey = '',
this.defaults = {
baseUrl:"https://captcha.anji-plus.com/captcha-api",
captchaType:"clickWord",
containerId:'',
mode : 'fixed', //弹出式pop固定fixed
checkNum : 3, //校对的文字数量
vSpace : 5, //间隔
explain : '向右拖动滑块填充拼图',
imgSize : {
width: '310px',
height: '155px',
},
barSize : {
width : '310px',
height : '50px',
},
beforeCheck: function(){ return true},
ready : function(){},
success : function(){},
error : function(){}
},
this.options = $.extend({}, this.defaults, opt)
};
//定义Points的方法
Points.prototype = {
init : function() {
var _this = this;
//加载页面
_this.loadDom();
_this.refresh();
_this.options.ready();
this.$element[0].onselectstart = document.body.ondrag = function(){
return false;
};
if(this.options.mode == 'pop') {
_this.$element.find('.verifybox-close').on('click', function() {
_this.$element.find(".mask").css("display","none");
});
var clickBtn = document.getElementById(this.options.containerId);
clickBtn && (clickBtn.onclick = function(){
if (_this.options.beforeCheck()) {
_this.$element.find(".mask").css("display","block");
}
})
}
// 注册点击验证事件
_this.$element.find('.back-img').on('click', function(e) {
_this.checkPosArr.push(_this.getMousePos(this, e));
if(_this.num == _this.options.checkNum) {
_this.num = _this.createPoint(_this.getMousePos(this, e));
//按比例转换坐标值
_this.checkPosArr = _this.pointTransfrom(_this.checkPosArr,_this.setSize);
setTimeout(function(){
var data = {
captchaType:_this.options.captchaType,
"pointJson":_this.secretKey ? aesEncrypt(JSON.stringify(_this.checkPosArr),_this.secretKey):JSON.stringify(_this.checkPosArr),
"token":_this.backToken,
clientUid: localStorage.getItem('point'),
ts: Date.now()
}
var captchaVerification = _this.secretKey ? aesEncrypt(_this.backToken+'---'+JSON.stringify(_this.checkPosArr),_this.secretKey):_this.backToken+'---'+JSON.stringify(_this.checkPosArr)
checkPictrue(data, _this.options.baseUrl,function(res){
if (res.repCode=="0000") {
_this.$element.find('.verify-bar-area').css({'color': '#4cae4c', 'border-color': '#5cb85c'});
_this.$element.find('.verify-msg').text('验证成功');
// _this.$element.find('.verify-refresh').hide();
_this.$element.find('.verify-img-panel').unbind('click');
setTimeout(function(){
_this.$element.find(".mask").css("display","none");
_this.refresh();
},1000)
_this.options.success({'captchaVerification':captchaVerification});
}else{
_this.options.error(_this);
_this.$element.find('.verify-bar-area').css({'color': '#d9534f', 'border-color': '#d9534f'});
_this.$element.find('.verify-msg').text('验证失败');
setTimeout(function () {
_this.$element.find('.verify-bar-area').css({'color': '#000','border-color': '#ddd'});
_this.refresh();
}, 400);
}
})
}, 400);
}
if(_this.num < _this.options.checkNum) {
_this.num = _this.createPoint(_this.getMousePos(this, e));
}
});
//刷新
_this.$element.find('.verify-refresh').on('click', function() {
_this.refresh();
});
},
//加载页面
loadDom : function() {
this.fontPos = []; //选中的坐标信息
this.checkPosArr = []; //用户点击的坐标
this.num = 1; //点击的记数
var panelHtml = '';
var wrapStartHtml = '';
this.setSize = Slide.prototype.resetSize(this); //重新设置宽度高度
wrapStartHtml = '<div class="mask">'+
'<div class="verifybox" style="width:'+(parseInt(this.setSize.img_width)+30)+'px">'+
'<div class="verifybox-top">'+
'请完成安全验证'+
'<span class="verifybox-close">'+
'<i class="iconfont icon-close"></i>'+
'</span>'+
'</div>'+
'<div class="verifybox-bottom" style="padding:15px">'+
'<div style="position: relative;">';
if (this.options.mode == 'pop') {
panelHtml = wrapStartHtml
}
panelHtml += '<div class="verify-img-out">'+
'<div class="verify-img-panel">'+
'<div class="verify-refresh" style="z-index:3">'+
'<i class="iconfont icon-refresh"></i>'+
'</div>'+
'<img src="" class="back-img" width="'+this.setSize.img_width+'" height="'+this.setSize.img_height+'">'+
'</div>'+
'</div>'+
'<div class="verify-bar-area" style="width:'+this.setSize.img_width+',height:'+this.setSize.bar_height+',line-height:'+this.setSize.bar_height+'">'+
'<span class="verify-msg"></span>'+
'</div>';
wrapEndHtml = '</div></div></div></div>';
if (this.options.mode == 'pop') {
panelHtml += wrapEndHtml
}
this.$element.append(panelHtml);
this.htmlDoms = {
back_img : this.$element.find('.back-img'),
out_panel : this.$element.find('.verify-img-out'),
img_panel : this.$element.find('.verify-img-panel'),
bar_area : this.$element.find('.verify-bar-area'),
msg : this.$element.find('.verify-msg'),
};
this.$element.css('position', 'relative');
this.htmlDoms.out_panel.css('height', parseInt(this.setSize.img_height) + this.options.vSpace + 'px');
this.htmlDoms.img_panel.css({'width': this.setSize.img_width, 'height': this.setSize.img_height, 'background-size' : this.setSize.img_width + ' '+ this.setSize.img_height, 'margin-bottom': this.options.vSpace + 'px'});
this.htmlDoms.bar_area.css({'width': this.setSize.img_width, 'height': this.setSize.bar_height, 'line-height':this.setSize.bar_height});
},
//获取坐标
getMousePos :function(obj, event) {
var e = event || window.event;
var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
var x = e.clientX - ($(obj).offset().left - $(window).scrollLeft());
var y = e.clientY - ($(obj).offset().top - $(window).scrollTop());
return {'x': x, 'y': y};
},
//创建坐标点
createPoint : function (pos) {
this.htmlDoms.img_panel.append('<div class="point-area" style="background-color:#1abd6c;color:#fff;z-index:9999;width:20px;height:20px;text-align:center;line-height:20px;border-radius: 50%;position:absolute;'
+'top:'+parseInt(pos.y-10)+'px;left:'+parseInt(pos.x-10)+'px;">'+this.num+'</div>');
return ++this.num;
},
//刷新
refresh: function() {
var _this = this;
this.$element.find('.point-area').remove();
this.fontPos = [];
this.checkPosArr = [];
this.num = 1;
getPictrue({captchaType:"clickWord", clientUid: localStorage.getItem('point'), ts: Date.now()},_this.options.baseUrl,function(res){
if (res.repCode=="0000") {
_this.htmlDoms.back_img[0].src ='data:image/png;base64,'+ res.repData.originalImageBase64;
_this.backToken = res.repData.token;
_this.secretKey = res.repData.secretKey;
var text = '请依次点击【' + res.repData.wordList.join(",") + '】';
_this.$element.find('.verify-msg').text(text);
} else {
_this.htmlDoms.back_img[0].src = 'images/default.jpg';
_this.$element.find('.verify-msg').text(res.repMsg);
}
})
},
pointTransfrom:function(pointArr,imgSize){
var newPointArr = pointArr.map(function(p){
var x = Math.round(310 * p.x/parseInt(imgSize.img_width))
var y =Math.round(155 * p.y/parseInt(imgSize.img_height))
return {'x':x,'y':y}
})
return newPointArr
}
};
//在插件中使用slideVerify对象
$.fn.slideVerify = function(options, callbacks) {
var slide = new Slide(this, options);
if (slide.options.mode=="pop" && slide.options.beforeCheck()) {
slide.init();
}else if (slide.options.mode=="fixed") {
slide.init();
}
};
//在插件中使用clickVerify对象
$.fn.pointsVerify = function(options, callbacks) {
var points = new Points(this, options);
if (points.options.mode=="pop" && points.options.beforeCheck()) {
points.init();
}else if (points.options.mode=="fixed") {
points.init();
}
};
})(jQuery, window, document);

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 473 KiB

After

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

File diff suppressed because it is too large Load Diff

@ -0,0 +1,421 @@
/* Owl Carousel Bootstrap Custom CSS */
/* Header Navigation */
#top-nav{
border-bottom: 1px solid #e1e6dd;
background: #FFF;
-webkit-transform: translateZ(0)
}
#top-nav.navbar{
margin-bottom: 0px;
}
#top-nav.navbar .nav{
margin: 8px 0px;
}
#top-nav.navbar .nav > li > a {
padding: 6px 12px;
margin: 0px;
text-transform: uppercase;
font-weight: 400;
-webkit-transition: background-color 200ms ease;
-moz-transition: background-color 200ms ease;
-o-transition: background-color 200ms ease;
transition: background-color 200ms ease;
}
#top-nav.navbar .nav > li > a.download{
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
#top-nav.navbar .nav > li > a.download-on{
background-color: #ff8a3c;
color: #ffffff;
}
#top-nav.navbar .nav > li > a.download-on:hover{
color: #ffffff;
background-color: #ff7920;
}
.btn-navbar span.icon-bar{
margin-top: 0px;
}
/* Header */
#header{
background: #f1f1f1;
padding: 100px 0 100px;
}
#header h1{
color: #7fc242;
margin-bottom: 10px;
margin-top: 40px;
}
#header h3{
margin-bottom: 30px;
width: 400px;
}
#header .btn-success {
padding: 15px 30px;
margin-bottom: 5px;
}
#header .logo{
display: block;
margin-top:60px;
float: right
}
img.arrow-down{
margin: 0 auto;
display: block;
}
h1{
margin-top: 80px;
}
pre.pre-show{
margin: 40px 0px;
}
.tab-content pre.pre-show{
margin: 0px 0px 0px 0px;
}
.nav-tabs{
margin-top: 20px;
margin-bottom: 0px;
}
.tab-content{
border-left: 1px solid #ddd;
border-right: 1px solid #ddd;
border-bottom: 1px solid #ddd;
-webkit-border-radius: 0px 0px 4px 4px;
-moz-border-radius: 0px 0px 4px 4px;
border-radius: 0px 0px 4px 4px;
}
/* Content */
.table th, .table td {
padding: 8px 12px;
}
/* Footer */
#footer{
padding: 20px 0px;
background: #f3f3f3;
text-align: center
}
.twitter-share-button{
top: 4px;
position: relative;
}
/* Demo Slides */
#owl-example .item{
padding: 30px 0px;
margin: 10px;
color: #FFF;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
text-align: center;
}
#owl-example .item img{
width: auto;
margin: 0 auto;
display: block;
}
#owl-example .item h3{
font-size: 28px;
font-weight: 300;
margin: 25px 0 0;
}
#owl-example .item h4{
margin: 5px 0 0;
font-size: 18px;
}
.item h1{
margin: inherit;
}
.orange{
background: #ff8a3c;
}
.darkCyan{
background: #42bdc2;
}
.forestGreen{
background: #7fc242;
}
.yellow {
background: #ffd800;
}
.dodgerBlue {
background: #388bd1;
}
.skyBlue {
background: #a1def8;
}
.zombieGreen {
background: #3fbf79;
}
.violet {
background: #db6ac5;
}
.yellowLight {
background: #fee664;
}
.steelGray {
background: #cad3d0;
}
/* More Demo Box */
#example-info h1,
#more h1{
margin-top: 40px;
}
.demos-row{
margin-top: 30px;
margin-bottom: 30px;
}
.demo-page{
margin-top: 0px;
margin-bottom: 100px;
}
.demo-box{
display: block;
background: #f3f3f3;
text-align: center;
font-size: 18px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
.demo-box h3{
padding-bottom:20px;
margin: 0px;
color: #869690;
}
.demo-box:hover{
text-decoration: none;
}
.demo-wrapper{
padding: 30px 0px 20px 0px;
padding-left: 30px;
padding-right: 30px;
}
.demo-slide {
float: left;
}
.demo-slide .bg{
background: #aebab6;
margin-right: 1px;
height: 100%;
}
.demo-box:hover .demo-slide .bg{
background: #7fc242;
}
/* Images */
.demo-images .demo-slide{
height: 40px;
width: 33.3333333%;
}
/* Full */
.demo-full {
padding-left: 0px;
padding-right: 0px;
}
.demo-full .demo-slide{
height: 40px;
width: 25%;
}
/* Custom */
.demo-custom .demo-slide{
height: 40px;
width: 10%;
}
/* One */
.demo-one .demo-slide{
height: 40px;
width: 100%;
}
/* json */
.demo-Json .demo-slide {
height: 40px;
width: 20%;
}
.demo-Json-custom .demo-slide{
height: 40px;
width: 33.3333333%;
}
/* loading icon */
.demo-lazy .demo-slide{
height: 40px;
width: 33.3333333%;
}
.demo-lazy .demo-slide .bg{
background: url('../img/AjaxLoader.gif') no-repeat center center #aebab6;
}
/* Auto Height */
.demo-height .demo-slide{
height: 40px;
width: 100%;
}
/* Changelog */
#changelog{
margin-bottom: 40px;
}
#changelog .label{
margin-bottom:10px;
}
#changelog .log{
margin-bottom: 30px;
padding-bottom: 30px;
border-bottom: 1px solid #e1e6dd;
}
/* Faq */
#faq dt {
line-height: 26px;
}
#faq dd{
line-height: 22px;
margin-bottom: 20px;
}
/* Responsive Stuff */
@media (max-width: 979px) {
.navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner {
padding: 0px;
}
.navbar-fixed-top, .navbar-fixed-bottom {
position: fixed;
}
}
@media (max-width: 768px) {
.navbar.navbar-fixed-top{
position: static;
}
.btn.btn-navbar{
margin: 9px 20px 9px 8px;
padding: 10px 10px;
}
.nav-collapse .nav > li{
border-top: 1px solid #e1e6dd;
text-align: center
}
#header .logo{
margin-top:40px;
margin: 20px auto 0px;
float: none;
height: 150px;
}
#header {
text-align: center;
padding: 60px 0px 30px;
}
#header h1{
margin: 10px 0;
}
#header h3{
margin-bottom: 10px;
width: auto;
padding: 0px 20px;
}
h1 {
font-size: 38px;
margin: 20px 0;
}
h2 {
font-size: 24px;
}
h3 {
font-size: 20px;
}
h4 {
font-size: 16px;
}
h5 {
font-size: 13px;
}
h6 {
font-size: 12px;
}
}
@media (max-width: 480px) {
.navbar-fixed-top, .navbar-fixed-bottom {
position: static;
}
#header {
text-align: center;
padding: 20px 0px 20px;
}
#header .logo{
margin-top:0px;
}
}
/*
NO MORE TABLES!! ;)
*/
@media (max-width: 767px) {
.hp-table table, .hp-table thead, .hp-table .hp-table tbody, .hp-table th, .hp-table td, .hp-table tr {
display: block;
}
.hp-table thead tr {
display: none;
}
.hp-table tr { border: 0px solid #ccc; margin-bottom: 10px; }
.hp-table td:before {
top: 6px;
left: 6px;
width: 45%;
padding-right: 10px;
white-space: nowrap;
}
.hp-table td:nth-of-type(2):before {
content: "Default:";
font-weight: bold;
}
.hp-table td:nth-of-type(3):before {
content: "Type:";
font-weight: bold;
}
.hp-table td:nth-of-type(4):before {
content: "Description:";
font-weight: bold;
}
}

@ -0,0 +1,26 @@
$(function(){
window.prettyPrint && prettyPrint();
}(window.jQuery));
jQuery(document).ready(function($) {
//Download Link Highlight
if($("body").data("page")==="frontpage"){
$(window).scroll(function(){
var scrolled = $(window).scrollTop();
var downloadLink = $("#top-nav").find(".download")
if(scrolled >= 420){
downloadLink.addClass("download-on");
} else if (scrolled < 420){
downloadLink.removeClass("download-on");
}
})
}
$('#myTab a').click(function (e) {
e.preventDefault();
$(this).tab('show');
})
});

@ -0,0 +1,167 @@
/* =============================================================
* bootstrap-collapse.js v2.3.2
* http://twitter.github.com/bootstrap/javascript.html#collapse
* =============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
!function ($) {
"use strict"; // jshint ;_;
/* COLLAPSE PUBLIC CLASS DEFINITION
* ================================ */
var Collapse = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, $.fn.collapse.defaults, options)
if (this.options.parent) {
this.$parent = $(this.options.parent)
}
this.options.toggle && this.toggle()
}
Collapse.prototype = {
constructor: Collapse
, dimension: function () {
var hasWidth = this.$element.hasClass('width')
return hasWidth ? 'width' : 'height'
}
, show: function () {
var dimension
, scroll
, actives
, hasData
if (this.transitioning || this.$element.hasClass('in')) return
dimension = this.dimension()
scroll = $.camelCase(['scroll', dimension].join('-'))
actives = this.$parent && this.$parent.find('> .accordion-group > .in')
if (actives && actives.length) {
hasData = actives.data('collapse')
if (hasData && hasData.transitioning) return
actives.collapse('hide')
hasData || actives.data('collapse', null)
}
this.$element[dimension](0)
this.transition('addClass', $.Event('show'), 'shown')
$.support.transition && this.$element[dimension](this.$element[0][scroll])
}
, hide: function () {
var dimension
if (this.transitioning || !this.$element.hasClass('in')) return
dimension = this.dimension()
this.reset(this.$element[dimension]())
this.transition('removeClass', $.Event('hide'), 'hidden')
this.$element[dimension](0)
}
, reset: function (size) {
var dimension = this.dimension()
this.$element
.removeClass('collapse')
[dimension](size || 'auto')
[0].offsetWidth
this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
return this
}
, transition: function (method, startEvent, completeEvent) {
var that = this
, complete = function () {
if (startEvent.type == 'show') that.reset()
that.transitioning = 0
that.$element.trigger(completeEvent)
}
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
this.transitioning = 1
this.$element[method]('in')
$.support.transition && this.$element.hasClass('collapse') ?
this.$element.one($.support.transition.end, complete) :
complete()
}
, toggle: function () {
this[this.$element.hasClass('in') ? 'hide' : 'show']()
}
}
/* COLLAPSE PLUGIN DEFINITION
* ========================== */
var old = $.fn.collapse
$.fn.collapse = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('collapse')
, options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('collapse', (data = new Collapse(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.collapse.defaults = {
toggle: true
}
$.fn.collapse.Constructor = Collapse
/* COLLAPSE NO CONFLICT
* ==================== */
$.fn.collapse.noConflict = function () {
$.fn.collapse = old
return this
}
/* COLLAPSE DATA-API
* ================= */
$(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
var $this = $(this), href
, target = $this.attr('data-target')
|| e.preventDefault()
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
, option = $(target).data('collapse') ? 'toggle' : $this.data()
$this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
$(target).collapse(option)
})
}(window.jQuery);

@ -0,0 +1,144 @@
/* ========================================================
* bootstrap-tab.js v2.3.2
* http://twitter.github.com/bootstrap/javascript.html#tabs
* ========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ======================================================== */
!function ($) {
"use strict"; // jshint ;_;
/* TAB CLASS DEFINITION
* ==================== */
var Tab = function (element) {
this.element = $(element)
}
Tab.prototype = {
constructor: Tab
, show: function () {
var $this = this.element
, $ul = $this.closest('ul:not(.dropdown-menu)')
, selector = $this.attr('data-target')
, previous
, $target
, e
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}
if ( $this.parent('li').hasClass('active') ) return
previous = $ul.find('.active:last a')[0]
e = $.Event('show', {
relatedTarget: previous
})
$this.trigger(e)
if (e.isDefaultPrevented()) return
$target = $(selector)
this.activate($this.parent('li'), $ul)
this.activate($target, $target.parent(), function () {
$this.trigger({
type: 'shown'
, relatedTarget: previous
})
})
}
, activate: function ( element, container, callback) {
var $active = container.find('> .active')
, transition = callback
&& $.support.transition
&& $active.hasClass('fade')
function next() {
$active
.removeClass('active')
.find('> .dropdown-menu > .active')
.removeClass('active')
element.addClass('active')
if (transition) {
element[0].offsetWidth // reflow for transition
element.addClass('in')
} else {
element.removeClass('fade')
}
if ( element.parent('.dropdown-menu') ) {
element.closest('li.dropdown').addClass('active')
}
callback && callback()
}
transition ?
$active.one($.support.transition.end, next) :
next()
$active.removeClass('in')
}
}
/* TAB PLUGIN DEFINITION
* ===================== */
var old = $.fn.tab
$.fn.tab = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('tab')
if (!data) $this.data('tab', (data = new Tab(this)))
if (typeof option == 'string') data[option]()
})
}
$.fn.tab.Constructor = Tab
/* TAB NO CONFLICT
* =============== */
$.fn.tab.noConflict = function () {
$.fn.tab = old
return this
}
/* TAB DATA-API
* ============ */
$(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
e.preventDefault()
$(this).tab('show')
})
}(window.jQuery);

@ -0,0 +1,60 @@
/* ===================================================
* bootstrap-transition.js v2.3.2
* http://twitter.github.com/bootstrap/javascript.html#transitions
* ===================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function ($) {
"use strict"; // jshint ;_;
/* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
* ======================================================= */
$(function () {
$.support.transition = (function () {
var transitionEnd = (function () {
var el = document.createElement('bootstrap')
, transEndEventNames = {
'WebkitTransition' : 'webkitTransitionEnd'
, 'MozTransition' : 'transitionend'
, 'OTransition' : 'oTransitionEnd otransitionend'
, 'transition' : 'transitionend'
}
, name
for (name in transEndEventNames){
if (el.style[name] !== undefined) {
return transEndEventNames[name]
}
}
}())
return transitionEnd && {
end: transitionEnd
}
})()
})
}(window.jQuery);

@ -0,0 +1,26 @@
.com { color: #93a1a1; }
.lit { color: #195f91; }
.pun, .opn, .clo { color: #93a1a1; }
.fun { color: #dc322f; }
.str, .atv { color: #ff8a3c; }
.kwd, .prettyprint .tag { color: #195f91; }
.typ, .atn, .dec, .var { color: #3fbf79; }
.pln { color: #48484c; }
.pun{ color:#48484c; }
pre.prettyprint {
padding: 20px;
background-color: #f3f3f3;
border: 0px solid #e1e1e8;
}
/* Specify class=linenums on a pre to get line numbering */
ol.linenums {
margin: 0 0 0 40px; /* IE indents via margin-left */
}
ol.linenums li {
padding-left: 12px;
color: #bebec5;
line-height: 20px;
text-shadow: 0 1px 0 #fff;
}

@ -0,0 +1,28 @@
var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();

@ -0,0 +1,34 @@
!function(){var r=null;
(function(){function X(e){function j(){try{J.doScroll("left")}catch(e){P(j,50);return}w("poll")}function w(j){if(!(j.type=="readystatechange"&&x.readyState!="complete")&&((j.type=="load"?n:x)[z](i+j.type,w,!1),!m&&(m=!0)))e.call(n,j.type||j)}var Y=x.addEventListener,m=!1,C=!0,t=Y?"addEventListener":"attachEvent",z=Y?"removeEventListener":"detachEvent",i=Y?"":"on";if(x.readyState=="complete")e.call(n,"lazy");else{if(x.createEventObject&&J.doScroll){try{C=!n.frameElement}catch(A){}C&&j()}x[t](i+"DOMContentLoaded",
w,!1);x[t](i+"readystatechange",w,!1);n[t](i+"load",w,!1)}}function Q(){S&&X(function(){var e=K.length;$(e?function(){for(var j=0;j<e;++j)(function(e){P(function(){n.exports[K[e]].apply(n,arguments)},0)})(j)}:void 0)})}for(var n=window,P=n.setTimeout,x=document,J=x.documentElement,L=x.head||x.getElementsByTagName("head")[0]||J,z="",A=x.scripts,m=A.length;--m>=0;){var M=A[m],T=M.src.match(/^[^#?]*\/run_prettify\.js(\?[^#]*)?(?:#.*)?$/);if(T){z=T[1]||"";M.parentNode.removeChild(M);break}}var S=!0,D=
[],N=[],K=[];z.replace(/[&?]([^&=]+)=([^&]+)/g,function(e,j,w){w=decodeURIComponent(w);j=decodeURIComponent(j);j=="autorun"?S=!/^[0fn]/i.test(w):j=="lang"?D.push(w):j=="skin"?N.push(w):j=="callback"&&K.push(w)});m=0;for(z=D.length;m<z;++m)(function(){var e=x.createElement("script");e.onload=e.onerror=e.onreadystatechange=function(){if(e&&(!e.readyState||/loaded|complete/.test(e.readyState)))e.onerror=e.onload=e.onreadystatechange=r,--R,R||P(Q,0),e.parentNode&&e.parentNode.removeChild(e),e=r};e.type=
"text/javascript";e.src="https://google-code-prettify.googlecode.com/svn/loader/lang-"+encodeURIComponent(D[m])+".js";L.insertBefore(e,L.firstChild)})(D[m]);for(var R=D.length,A=[],m=0,z=N.length;m<z;++m)A.push("https://google-code-prettify.googlecode.com/svn/loader/skins/"+encodeURIComponent(N[m])+".css");A.push("https://google-code-prettify.googlecode.com/svn/loader/prettify.css");(function(e){function j(m){if(m!==w){var n=x.createElement("link");n.rel="stylesheet";n.type="text/css";if(m+1<w)n.error=
n.onerror=function(){j(m+1)};n.href=e[m];L.appendChild(n)}}var w=e.length;j(0)})(A);var $=function(){window.PR_SHOULD_USE_CONTINUATION=!0;var e;(function(){function j(a){function d(f){var b=f.charCodeAt(0);if(b!==92)return b;var a=f.charAt(1);return(b=i[a])?b:"0"<=a&&a<="7"?parseInt(f.substring(1),8):a==="u"||a==="x"?parseInt(f.substring(2),16):f.charCodeAt(1)}function h(f){if(f<32)return(f<16?"\\x0":"\\x")+f.toString(16);f=String.fromCharCode(f);return f==="\\"||f==="-"||f==="]"||f==="^"?"\\"+f:
f}function b(f){var b=f.substring(1,f.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),f=[],a=b[0]==="^",c=["["];a&&c.push("^");for(var a=a?1:0,g=b.length;a<g;++a){var k=b[a];if(/\\[bdsw]/i.test(k))c.push(k);else{var k=d(k),o;a+2<g&&"-"===b[a+1]?(o=d(b[a+2]),a+=2):o=k;f.push([k,o]);o<65||k>122||(o<65||k>90||f.push([Math.max(65,k)|32,Math.min(o,90)|32]),o<97||k>122||f.push([Math.max(97,k)&-33,Math.min(o,122)&-33]))}}f.sort(function(f,a){return f[0]-
a[0]||a[1]-f[1]});b=[];g=[];for(a=0;a<f.length;++a)k=f[a],k[0]<=g[1]+1?g[1]=Math.max(g[1],k[1]):b.push(g=k);for(a=0;a<b.length;++a)k=b[a],c.push(h(k[0])),k[1]>k[0]&&(k[1]+1>k[0]&&c.push("-"),c.push(h(k[1])));c.push("]");return c.join("")}function e(f){for(var a=f.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),c=a.length,d=[],g=0,k=0;g<c;++g){var o=a[g];o==="("?++k:"\\"===o.charAt(0)&&(o=+o.substring(1))&&(o<=k?d[o]=-1:a[g]=h(o))}for(g=
1;g<d.length;++g)-1===d[g]&&(d[g]=++j);for(k=g=0;g<c;++g)o=a[g],o==="("?(++k,d[k]||(a[g]="(?:")):"\\"===o.charAt(0)&&(o=+o.substring(1))&&o<=k&&(a[g]="\\"+d[o]);for(g=0;g<c;++g)"^"===a[g]&&"^"!==a[g+1]&&(a[g]="");if(f.ignoreCase&&F)for(g=0;g<c;++g)o=a[g],f=o.charAt(0),o.length>=2&&f==="["?a[g]=b(o):f!=="\\"&&(a[g]=o.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return a.join("")}for(var j=0,F=!1,l=!1,I=0,c=a.length;I<c;++I){var p=a[I];if(p.ignoreCase)l=
!0;else if(/[a-z]/i.test(p.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){F=!0;l=!1;break}}for(var i={b:8,t:9,n:10,v:11,f:12,r:13},q=[],I=0,c=a.length;I<c;++I){p=a[I];if(p.global||p.multiline)throw Error(""+p);q.push("(?:"+e(p)+")")}return RegExp(q.join("|"),l?"gi":"g")}function m(a,d){function h(a){var c=a.nodeType;if(c==1){if(!b.test(a.className)){for(c=a.firstChild;c;c=c.nextSibling)h(c);c=a.nodeName.toLowerCase();if("br"===c||"li"===c)e[l]="\n",F[l<<1]=j++,F[l++<<1|1]=a}}else if(c==
3||c==4)c=a.nodeValue,c.length&&(c=d?c.replace(/\r\n?/g,"\n"):c.replace(/[\t\n\r ]+/g," "),e[l]=c,F[l<<1]=j,j+=c.length,F[l++<<1|1]=a)}var b=/(?:^|\s)nocode(?:\s|$)/,e=[],j=0,F=[],l=0;h(a);return{a:e.join("").replace(/\n$/,""),d:F}}function n(a,d,h,b){d&&(a={a:d,e:a},h(a),b.push.apply(b,a.g))}function x(a){for(var d=void 0,h=a.firstChild;h;h=h.nextSibling)var b=h.nodeType,d=b===1?d?a:h:b===3?S.test(h.nodeValue)?a:d:d;return d===a?void 0:d}function C(a,d){function h(a){for(var l=a.e,j=[l,"pln"],c=
0,p=a.a.match(e)||[],m={},q=0,f=p.length;q<f;++q){var B=p[q],y=m[B],u=void 0,g;if(typeof y==="string")g=!1;else{var k=b[B.charAt(0)];if(k)u=B.match(k[1]),y=k[0];else{for(g=0;g<i;++g)if(k=d[g],u=B.match(k[1])){y=k[0];break}u||(y="pln")}if((g=y.length>=5&&"lang-"===y.substring(0,5))&&!(u&&typeof u[1]==="string"))g=!1,y="src";g||(m[B]=y)}k=c;c+=B.length;if(g){g=u[1];var o=B.indexOf(g),H=o+g.length;u[2]&&(H=B.length-u[2].length,o=H-g.length);y=y.substring(5);n(l+k,B.substring(0,o),h,j);n(l+k+o,g,A(y,
g),j);n(l+k+H,B.substring(H),h,j)}else j.push(l+k,y)}a.g=j}var b={},e;(function(){for(var h=a.concat(d),l=[],i={},c=0,p=h.length;c<p;++c){var m=h[c],q=m[3];if(q)for(var f=q.length;--f>=0;)b[q.charAt(f)]=m;m=m[1];q=""+m;i.hasOwnProperty(q)||(l.push(m),i[q]=r)}l.push(/[\S\s]/);e=j(l)})();var i=d.length;return h}function t(a){var d=[],h=[];a.tripleQuotedStrings?d.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,
r,"'\""]):a.multiLineStrings?d.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,r,"'\"`"]):d.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,r,"\"'"]);a.verbatimStrings&&h.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,r]);var b=a.hashComments;b&&(a.cStyleComments?(b>1?d.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,r,"#"]):d.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\n\r]*)/,
r,"#"]),h.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,r])):d.push(["com",/^#[^\n\r]*/,r,"#"]));a.cStyleComments&&(h.push(["com",/^\/\/[^\n\r]*/,r]),h.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,r]));if(b=a.regexLiterals){var e=(b=b>1?"":"\n\r")?".":"[\\S\\s]";h.push(["lang-regex",RegExp("^(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*("+
("/(?=[^/*"+b+"])(?:[^/\\x5B\\x5C"+b+"]|\\x5C"+e+"|\\x5B(?:[^\\x5C\\x5D"+b+"]|\\x5C"+e+")*(?:\\x5D|$))+/")+")")])}(b=a.types)&&h.push(["typ",b]);b=(""+a.keywords).replace(/^ | $/g,"");b.length&&h.push(["kwd",RegExp("^(?:"+b.replace(/[\s,]+/g,"|")+")\\b"),r]);d.push(["pln",/^\s+/,r," \r\n\t\u00a0"]);b="^.[^\\s\\w.$@'\"`/\\\\]*";a.regexLiterals&&(b+="(?!s*/)");h.push(["lit",/^@[$_a-z][\w$@]*/i,r],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,r],["pln",/^[$_a-z][\w$@]*/i,r],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,
r,"0123456789"],["pln",/^\\[\S\s]?/,r],["pun",RegExp(b),r]);return C(d,h)}function z(a,d,h){function b(a){var c=a.nodeType;if(c==1&&!j.test(a.className))if("br"===a.nodeName)e(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((c==3||c==4)&&h){var d=a.nodeValue,i=d.match(m);if(i)c=d.substring(0,i.index),a.nodeValue=c,(d=d.substring(i.index+i[0].length))&&a.parentNode.insertBefore(l.createTextNode(d),a.nextSibling),e(a),c||a.parentNode.removeChild(a)}}
function e(a){function b(a,c){var d=c?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),h=a.nextSibling;f.appendChild(d);for(var e=h;e;e=h)h=e.nextSibling,f.appendChild(e)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),d;(d=a.parentNode)&&d.nodeType===1;)a=d;c.push(a)}for(var j=/(?:^|\s)nocode(?:\s|$)/,m=/\r\n?|\n/,l=a.ownerDocument,i=l.createElement("li");a.firstChild;)i.appendChild(a.firstChild);for(var c=[i],p=0;p<c.length;++p)b(c[p]);d===(d|0)&&c[0].setAttribute("value",
d);var n=l.createElement("ol");n.className="linenums";for(var d=Math.max(0,d-1|0)||0,p=0,q=c.length;p<q;++p)i=c[p],i.className="L"+(p+d)%10,i.firstChild||i.appendChild(l.createTextNode("\u00a0")),n.appendChild(i);a.appendChild(n)}function i(a,d){for(var h=d.length;--h>=0;){var b=d[h];U.hasOwnProperty(b)?V.console&&console.warn("cannot override language handler %s",b):U[b]=a}}function A(a,d){if(!a||!U.hasOwnProperty(a))a=/^\s*</.test(d)?"default-markup":"default-code";return U[a]}function D(a){var d=
a.h;try{var h=m(a.c,a.i),b=h.a;a.a=b;a.d=h.d;a.e=0;A(d,b)(a);var e=/\bMSIE\s(\d+)/.exec(navigator.userAgent),e=e&&+e[1]<=8,d=/\n/g,i=a.a,j=i.length,h=0,l=a.d,n=l.length,b=0,c=a.g,p=c.length,t=0;c[p]=j;var q,f;for(f=q=0;f<p;)c[f]!==c[f+2]?(c[q++]=c[f++],c[q++]=c[f++]):f+=2;p=q;for(f=q=0;f<p;){for(var x=c[f],y=c[f+1],u=f+2;u+2<=p&&c[u+1]===y;)u+=2;c[q++]=x;c[q++]=y;f=u}c.length=q;var g=a.c,k;if(g)k=g.style.display,g.style.display="none";try{for(;b<n;){var o=l[b+2]||j,H=c[t+2]||j,u=Math.min(o,H),E=l[b+
1],W;if(E.nodeType!==1&&(W=i.substring(h,u))){e&&(W=W.replace(d,"\r"));E.nodeValue=W;var Z=E.ownerDocument,s=Z.createElement("span");s.className=c[t+1];var z=E.parentNode;z.replaceChild(s,E);s.appendChild(E);h<o&&(l[b+1]=E=Z.createTextNode(i.substring(u,o)),z.insertBefore(E,s.nextSibling))}h=u;h>=o&&(b+=2);h>=H&&(t+=2)}}finally{if(g)g.style.display=k}}catch(v){V.console&&console.log(v&&v.stack||v)}}var V=window,G=["break,continue,do,else,for,if,return,while"],O=[[G,"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],J=[O,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],K=[O,"abstract,assert,boolean,byte,extends,final,finally,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient"],
L=[K,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],O=[O,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],M=[G,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
N=[G,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],R=[G,"as,assert,const,copy,drop,enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv,pub,pure,ref,self,static,struct,true,trait,type,unsafe,use"],G=[G,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],Q=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/,
S=/\S/,T=t({keywords:[J,L,O,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",M,N,G],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),U={};i(T,["default-code"]);i(C([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",
/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);i(C([["pln",/^\s+/,r," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,r,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],
["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);i(C([],[["atv",/^[\S\s]+/]]),["uq.val"]);i(t({keywords:J,hashComments:!0,cStyleComments:!0,types:Q}),["c","cc","cpp","cxx","cyc","m"]);i(t({keywords:"null,true,false"}),["json"]);i(t({keywords:L,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:Q}),
["cs"]);i(t({keywords:K,cStyleComments:!0}),["java"]);i(t({keywords:G,hashComments:!0,multiLineStrings:!0}),["bash","bsh","csh","sh"]);i(t({keywords:M,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py","python"]);i(t({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),["perl","pl","pm"]);i(t({keywords:N,
hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb","ruby"]);i(t({keywords:O,cStyleComments:!0,regexLiterals:!0}),["javascript","js"]);i(t({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);i(t({keywords:R,cStyleComments:!0,multilineStrings:!0}),["rc","rs","rust"]);
i(C([],[["str",/^[\S\s]+/]]),["regex"]);var X=V.PR={createSimpleLexer:C,registerLangHandler:i,sourceDecorator:t,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:function(a,d,e){var b=document.createElement("div");b.innerHTML="<pre>"+a+"</pre>";b=b.firstChild;e&&z(b,e,!0);D({h:d,j:e,c:b,i:1});return b.innerHTML},
prettyPrint:e=e=function(a,d){function e(){for(var b=V.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;p<j.length&&c.now()<b;p++){for(var d=j[p],m=k,l=d;l=l.previousSibling;){var n=l.nodeType,s=(n===7||n===8)&&l.nodeValue;if(s?!/^\??prettify\b/.test(s):n!==3||/\S/.test(l.nodeValue))break;if(s){m={};s.replace(/\b(\w+)=([\w%+\-.:]+)/g,function(a,b,c){m[b]=c});break}}l=d.className;if((m!==k||f.test(l))&&!w.test(l)){n=!1;for(s=d.parentNode;s;s=s.parentNode)if(g.test(s.tagName)&&s.className&&f.test(s.className)){n=
!0;break}if(!n){d.className+=" prettyprinted";n=m.lang;if(!n){var n=l.match(q),A;if(!n&&(A=x(d))&&u.test(A.tagName))n=A.className.match(q);n&&(n=n[1])}if(y.test(d.tagName))s=1;else var s=d.currentStyle,v=i.defaultView,s=(s=s?s.whiteSpace:v&&v.getComputedStyle?v.getComputedStyle(d,r).getPropertyValue("white-space"):0)&&"pre"===s.substring(0,3);v=m.linenums;if(!(v=v==="true"||+v))v=(v=l.match(/\blinenums\b(?::(\d+))?/))?v[1]&&v[1].length?+v[1]:!0:!1;v&&z(d,v,s);t={h:n,c:d,j:v,i:s};D(t)}}}p<j.length?
P(e,250):"function"===typeof a&&a()}for(var b=d||document.body,i=b.ownerDocument||document,b=[b.getElementsByTagName("pre"),b.getElementsByTagName("code"),b.getElementsByTagName("xmp")],j=[],m=0;m<b.length;++m)for(var l=0,n=b[m].length;l<n;++l)j.push(b[m][l]);var b=r,c=Date;c.now||(c={now:function(){return+new Date}});var p=0,t,q=/\blang(?:uage)?-([\w.]+)(?!\S)/,f=/\bprettyprint\b/,w=/\bprettyprinted\b/,y=/pre|xmp/i,u=/^code$/i,g=/^(?:pre|code|xmp)$/i,k={};e()}};typeof define==="function"&&define.amd&&
define("google-code-prettify",[],function(){return X})})();return e}();R||P(Q,0)})();}()

File diff suppressed because one or more lines are too long

@ -0,0 +1,231 @@
/*
* Core Owl Carousel CSS File
* v1.24
*/
/* clearfix */
.owl-carousel .owl-wrapper:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
/* display none until init */
.owl-carousel{
display: none;
position: relative;
width: 100%;
-ms-touch-action: pan-y;
}
.owl-carousel .owl-wrapper{
display: none;
position: relative;
-webkit-transform: translate3d(0px, 0px, 0px);
}
.owl-carousel .owl-wrapper-outer{
overflow: hidden;
position: relative;
width: 100%;
}
.owl-carousel .owl-wrapper-outer.autoHeight{
-webkit-transition: height 500ms ease-in-out;
-moz-transition: height 500ms ease-in-out;
-ms-transition: height 500ms ease-in-out;
-o-transition: height 500ms ease-in-out;
transition: height 500ms ease-in-out;
}
.owl-carousel .owl-item{
float: left;
}
.owl-controls .owl-page,
.owl-controls .owl-buttons div{
cursor: pointer;
}
.owl-controls {
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
/* mouse grab icon */
.grabbing {
cursor:url(grabbing.png) 8 8, move;
}
/* fix */
.owl-carousel .owl-wrapper,
.owl-carousel .owl-item{
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
-webkit-transform: translate3d(0,0,0);
-moz-transform: translate3d(0,0,0);
-ms-transform: translate3d(0,0,0);
}
/* CSS3 Transitions */
.owl-origin {
-webkit-perspective: 1200px;
-webkit-perspective-origin-x : 50%;
-webkit-perspective-origin-y : 50%;
-moz-perspective : 1200px;
-moz-perspective-origin-x : 50%;
-moz-perspective-origin-y : 50%;
perspective : 1200px;
}
/* fade */
.owl-fade-out {
z-index: 10;
-webkit-animation: fadeOut .7s both ease;
-moz-animation: fadeOut .7s both ease;
animation: fadeOut .7s both ease;
}
.owl-fade-in {
-webkit-animation: fadeIn .7s both ease;
-moz-animation: fadeIn .7s both ease;
animation: fadeIn .7s both ease;
}
/* backSlide */
.owl-backSlide-out {
-webkit-animation: backSlideOut 1s both ease;
-moz-animation: backSlideOut 1s both ease;
animation: backSlideOut 1s both ease;
}
.owl-backSlide-in {
-webkit-animation: backSlideIn 1s both ease;
-moz-animation: backSlideIn 1s both ease;
animation: backSlideIn 1s both ease;
}
/* goDown */
.owl-goDown-out {
-webkit-animation: scaleToFade .7s ease both;
-moz-animation: scaleToFade .7s ease both;
animation: scaleToFade .7s ease both;
}
.owl-goDown-in {
-webkit-animation: goDown .6s ease both;
-moz-animation: goDown .6s ease both;
animation: goDown .6s ease both;
}
/* scaleUp */
.owl-fadeUp-in {
-webkit-animation: scaleUpFrom .5s ease both;
-moz-animation: scaleUpFrom .5s ease both;
animation: scaleUpFrom .5s ease both;
}
.owl-fadeUp-out {
-webkit-animation: scaleUpTo .5s ease both;
-moz-animation: scaleUpTo .5s ease both;
animation: scaleUpTo .5s ease both;
}
/* Keyframes */
/*empty*/
@-webkit-keyframes empty {
0% {opacity: 1}
}
@-moz-keyframes empty {
0% {opacity: 1}
}
@keyframes empty {
0% {opacity: 1}
}
@-webkit-keyframes fadeIn {
0% { opacity:0; }
100% { opacity:1; }
}
@-moz-keyframes fadeIn {
0% { opacity:0; }
100% { opacity:1; }
}
@keyframes fadeIn {
0% { opacity:0; }
100% { opacity:1; }
}
@-webkit-keyframes fadeOut {
0% { opacity:1; }
100% { opacity:0; }
}
@-moz-keyframes fadeOut {
0% { opacity:1; }
100% { opacity:0; }
}
@keyframes fadeOut {
0% { opacity:1; }
100% { opacity:0; }
}
@-webkit-keyframes backSlideOut {
25% { opacity: .5; -webkit-transform: translateZ(-500px); }
75% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
100% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
}
@-moz-keyframes backSlideOut {
25% { opacity: .5; -moz-transform: translateZ(-500px); }
75% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
100% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
}
@keyframes backSlideOut {
25% { opacity: .5; transform: translateZ(-500px); }
75% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
100% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
}
@-webkit-keyframes backSlideIn {
0%, 25% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(200%); }
75% { opacity: .5; -webkit-transform: translateZ(-500px); }
100% { opacity: 1; -webkit-transform: translateZ(0) translateX(0); }
}
@-moz-keyframes backSlideIn {
0%, 25% { opacity: .5; -moz-transform: translateZ(-500px) translateX(200%); }
75% { opacity: .5; -moz-transform: translateZ(-500px); }
100% { opacity: 1; -moz-transform: translateZ(0) translateX(0); }
}
@keyframes backSlideIn {
0%, 25% { opacity: .5; transform: translateZ(-500px) translateX(200%); }
75% { opacity: .5; transform: translateZ(-500px); }
100% { opacity: 1; transform: translateZ(0) translateX(0); }
}
@-webkit-keyframes scaleToFade {
to { opacity: 0; -webkit-transform: scale(.8); }
}
@-moz-keyframes scaleToFade {
to { opacity: 0; -moz-transform: scale(.8); }
}
@keyframes scaleToFade {
to { opacity: 0; transform: scale(.8); }
}
@-webkit-keyframes goDown {
from { -webkit-transform: translateY(-100%); }
}
@-moz-keyframes goDown {
from { -moz-transform: translateY(-100%); }
}
@keyframes goDown {
from { transform: translateY(-100%); }
}
@-webkit-keyframes scaleUpFrom {
from { opacity: 0; -webkit-transform: scale(1.5); }
}
@-moz-keyframes scaleUpFrom {
from { opacity: 0; -moz-transform: scale(1.5); }
}
@keyframes scaleUpFrom {
from { opacity: 0; transform: scale(1.5); }
}
@-webkit-keyframes scaleUpTo {
to { opacity: 0; -webkit-transform: scale(1.5); }
}
@-moz-keyframes scaleUpTo {
to { opacity: 0; -moz-transform: scale(1.5); }
}
@keyframes scaleUpTo {
to { opacity: 0; transform: scale(1.5); }
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,79 @@
/*
* Owl Carousel Owl Demo Theme
* v1.24
*/
/*.owl-theme .owl-controls{*/
/* margin-top: 10px;*/
/* text-align: center;*/
/*}*/
/* Styling Next and Prev buttons */
/*.owl-theme .owl-controls .owl-buttons div{*/
/* color: #FFF;*/
/* display: inline-block;*/
/* zoom: 1;*/
/* *display: inline;!*IE7 life-saver *!*/
/* margin: 5px;*/
/* padding: 3px 10px;*/
/* font-size: 12px;*/
/* -webkit-border-radius: 30px;*/
/* -moz-border-radius: 30px;*/
/* border-radius: 30px;*/
/* background: #869791;*/
/* filter: Alpha(Opacity=50);!*IE7 fix*!*/
/* opacity: 0.5;*/
/*}*/
/* Clickable class fix problem with hover on touch devices */
/* Use it for non-touch hover action */
/*.owl-theme .owl-controls.clickable .owl-buttons div:hover{*/
/* filter: Alpha(Opacity=100);!*IE7 fix*!*/
/* opacity: 1;*/
/* text-decoration: none;*/
/*}*/
/* Styling Pagination*/
/*.owl-theme .owl-controls .owl-page{*/
/* display: inline-block;*/
/* zoom: 1;*/
/* *display: inline;!*IE7 life-saver *!*/
/*}*/
/*.owl-theme .owl-controls .owl-page span{*/
/* display: block;*/
/* width: 12px;*/
/* height: 12px;*/
/* margin: 5px 7px;*/
/* filter: Alpha(Opacity=50);!*IE7 fix*!*/
/* opacity: 0.5;*/
/* -webkit-border-radius: 20px;*/
/* -moz-border-radius: 20px;*/
/* border-radius: 20px;*/
/* background: #869791;*/
/*}*/
/*.owl-theme .owl-controls .owl-page.active span,*/
/*.owl-theme .owl-controls.clickable .owl-page:hover span{*/
/* filter: Alpha(Opacity=100);!*IE7 fix*!*/
/* opacity: 1;*/
/*}*/
/* If PaginationNumbers is true */
/*.owl-theme .owl-controls .owl-page span.owl-numbers{*/
/* height: auto;*/
/* width: auto;*/
/* color: #FFF;*/
/* padding: 2px 10px;*/
/* font-size: 12px;*/
/* -webkit-border-radius: 30px;*/
/* -moz-border-radius: 30px;*/
/* border-radius: 30px;*/
/*}*/
/* preloading images */
.owl-item.loading{
min-height: 150px;
background: url(AjaxLoader.gif) no-repeat center center
}

File diff suppressed because one or more lines are too long

@ -1,40 +1,40 @@
const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' +
'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='
// 加密
function encrypt(txt) {
const encryptor = new JSEncrypt()
encryptor.setPublicKey(publicKey) // 设置公钥
return encryptor.encrypt(txt) // 对数据进行加密
}
$(function() {
validateKickout();
validateRule();
$('.imgcode').click(function() {
var url = ctx + "captcha/captchaImage?type=" + captchaType + "&s=" + Math.random();
$(".imgcode").attr("src", url);
});
refreshCode();
});
$.validator.setDefaults({
submitHandler: function() {
login();
showVerfyImage();
}
});
function login() {
function showVerfyImage() {
$("#verfyImg").find(".mask").css("display", "block");
}
function postLogin(data){
$.modal.loading($("#btnSubmit").data("loading"));
var username = $.common.trim($("input[name='username']").val());
var password = $.common.trim($("input[name='password']").val());
var validateCode = $("input[name='validateCode']").val();
var rememberMe = $("input[name='rememberme']").is(':checked');
$.ajax({
type: "post",
url: ctx + "login",
data: {
"username": username,
"password": password,
"validateCode": validateCode,
"rememberMe": rememberMe
},
data: data,
success: function(r) {
if (r.code == web_status.SUCCESS) {
location.href = ctx + 'index';
} else {
$('.imgcode').click();
$(".code").val("");
$.modal.msg(r.msg);
}
$.modal.closeLoading();
@ -42,6 +42,28 @@ function login() {
});
}
/* 刷新验证码 */
function refreshCode() {
/** 初始化验证码 弹出式 */
$('#verfyImg').slideVerify({
baseUrl: ctx,
mode: 'pop',
success : function(params) {
var username = $.common.trim($("input[name='username']").val());
var password = $.common.trim($("input[name='password']").val());
var rememberMe = $("input[name='rememberme']").is(':checked');
var data = {
"username": username,
"password": encrypt(password),
"rememberMe": rememberMe
};
data = $.extend(data, params);
postLogin(data);
},
error : function() {}
});
}
function validateRule() {
var icon = "<i class='fa fa-times-circle'></i> ";
$("#signupForm").validate({

@ -1,33 +1,28 @@
$(function() {
validateRule();
$('.imgcode').click(function() {
var url = ctx + "captcha/captchaImage?type=" + captchaType + "&s=" + Math.random();
$(".imgcode").attr("src", url);
});
refreshCode();
});
$.validator.setDefaults({
submitHandler: function() {
register();
showVerfyImage();
}
});
function register() {
function showVerfyImage() {
$("#verfyImg").find(".mask").css("display", "block");
}
function postRegister(data){
$.modal.loading($("#btnSubmit").data("loading"));
var username = $.common.trim($("input[name='username']").val());
var password = $.common.trim($("input[name='password']").val());
var validateCode = $("input[name='validateCode']").val();
$.ajax({
type: "post",
url: ctx + "register",
data: {
"loginName": username,
"password": password,
"validateCode": validateCode
},
data: data,
success: function(r) {
if (r.code == web_status.SUCCESS) {
var username = $.common.trim($("input[name='username']").val());
layer.alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", {
icon: 1,
title: "系统提示"
@ -39,14 +34,32 @@ function register() {
});
} else {
$.modal.closeLoading();
$('.imgcode').click();
$(".code").val("");
$.modal.msg(r.msg);
}
}
});
}
/* 刷新验证码 */
function refreshCode() {
/** 初始化验证码 弹出式 */
$('#verfyImg').slideVerify({
baseUrl: ctx,
mode: 'pop',
success : function(params) {
var username = $.common.trim($("input[name='username']").val());
var password = $.common.trim($("input[name='password']").val());
var data = {
"loginName": username,
"password": password
};
data = $.extend(data, params);
postRegister(data);
},
error : function() {}
});
}
function validateRule() {
var icon = "<i class='fa fa-times-circle'></i> ";
$("#registerForm").validate({

@ -43,7 +43,7 @@
<div class="layui-container" style="padding-top: 20px">
<div>
<blockquote class="layui-elem-quote">
<h2>通知公告</h2>
<h2 style="color: #074488;">通知公告</h2>
</blockquote>
<br>
<p><i class="layui-icon layui-icon-location"></i>当前位置:<a target="_parent" href="base.html">首页</a>&nbsp;/&nbsp;<a target="_parent" href="announce_view.html">通知公告</a></p>

@ -7,6 +7,8 @@
<link th:href="@{/home/base/favicon.ico}" rel="shortcut icon"/>
<link href="/home/lib/css/layui.css" th:href="@{/home/lib/css/layui.css}" rel="stylesheet"/>
<link th:href="@{/css/font-awesome.min.css?v=4.7.0}" rel="stylesheet"/>
<link rel="stylesheet" th:href="@{/js/base/owl-carousel/owl.carousel.css}">
<link rel="stylesheet" th:href="@{/js/base/owl-carousel/owl.theme.css}">
<style>
/* 页面整体布局 */
html, body {
@ -43,7 +45,13 @@
line-height: 35px;
font-size: 15px;
cursor: pointer;
margin-left: 15px
margin-left: 15px;
width: 70%;
display: inline-block;
overflow: hidden;
height: 25px;
white-space: nowrap;
text-overflow: ellipsis;
}
.newslist-to li:before {
@ -75,9 +83,27 @@
}
.zhuanti li{
margin:9px;
margin-bottom: 20px;
margin-bottom: -7px;
margin-top: 20px;
overflow:hidden
overflow:hidden;
display: flex;
flex-direction: column;
text-align: center;
white-space: nowrap; /* 防止文本换行 */
text-overflow: ellipsis; /* 显示省略号 */
position: relative;
}.zhuanti li span{
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
display: inline-block;
width: 100%;
position: absolute;
bottom: 0;
height: 25px;
line-height: 25px;
background-color: rgb(0 0 0 / 0.7);
color: white;
}
.zhuanti li img{
transition: all 0.3s;
@ -85,13 +111,16 @@
.zhuanti li:hover img{
transform:scale(1.1)
}
.zhuanti li:hover span{
color: #ffbb3f;
}
.more a {
display: inline-block;
width: 58px;
height: 24px;
border-radius: 5px;
line-height: 24px;
color: #1b6ec4;
color: #074488;
font-size: 14px;
text-align: center;
position: absolute;
@ -104,31 +133,32 @@
//display: flex;
//flex-wrap: wrap;
height: 400px;
overflow: hidden;
overflow: auto;
box-sizing:border-box;
padding-left:15px;
padding-left:30px;
padding-top:20px;
}
.zhuantidept li{
transition: all 0.3s;
float: left;
margin-bottom: 50px;
margin-bottom: 10px;
}
.zhuantidept li:hover{
transform: translateY(-5%);
}
.zhuantidept li a{
width:150px;
height:50px;
margin:0 25px 0 25px;
display:flex;
width: 169px;
height: 84px;
margin: 0 10px 0 10px;
display: flex;
align-items: center;
box-sizing:border-box;
padding-left:10px;
background-image:url(/home/base/dept.png);
background-position-x:-30px;
box-shadow:5px 5px 5px 0px rgba(0,0,0,0.5);
box-sizing: border-box;
padding-left: 10px;
background-image: url(/home/base/bumen1.jpg);
background-size: 100% 100%;
box-shadow: 5px 5px 5px 0px rgba(0,0,0,0.5);
font-size: 17px;
}
a {
@ -139,62 +169,26 @@
a:hover{
color: #006fc4;
}
.zhuantiContent{
text-align: center;
box-sizing:border-box;
overflow:hidden;
height:162px;
transition: transform 0.5s ease-in-out;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: nowrap;
width: 125%;
}
.zhuantiContent li{
margin: 20px;
margin-bottom:18px;
width:122px;
height:122px;
border:1px dashed #ccc;
display:flex;
align-items:center;
justify-content:center;
background-color: rgba(30,159,255,0.11);
transition: all 0.3s;
}
.zhuantiContent li:hover {
transform: translateY(-5%);
}
.zhuantiContent li span{
display:inline-block;
width:50px;
height:50px;
border-radius:50%;
font-size:28px;
line-height:50px;
background-color:rgba(27, 110, 196, 0.68);
}
.systemSlider .system-left, .systemSlider .system-right {
.customNavigation .prev, .customNavigation .next {
position: absolute;
width: 16px;
height: 25px;
top: 50%;
top: 41%;
z-index: 22;
background-image: url(/home/base/i122.png);
cursor: pointer;
transform: translateY(-50%);
}
.systemSlider .system-left{
left: 10px;
.customNavigation .prev{
left: 0;
}
.systemSlider .system-right {
right: 10px;
background-position: right top;
.customNavigation .next {
right: 0;
background-position: right;
}
.systemSlider{
overflow:hidden;
position: relative;
.item{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ztgg {
height: 60px;
@ -254,7 +248,8 @@
cursor: pointer;
transition: opacity 0.3s;
width: 50px;
height: 50px
height: 50px;
z-index: 100;
}
#back-to-top img {
width: 100%;
@ -274,6 +269,24 @@
flex-wrap:wrap;
justify-content: space-around;
overflow:auto;
}
.lantieContent .right li{
position: relative;
}
.lantieContent .right li span{
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
width: 100%;
display: inline-block;
height: 25px;
line-height: 25px;
margin-top: -8px;
background-color: rgb(0 0 0 / 0.7);
color: white;
}
.lantieContent .right li:hover span{
color: #ffbb3f;
}
.lianjieBox{
width:100%;
@ -299,6 +312,9 @@
padding-left:30px;
position: relative;
font-size:16px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.lianjieList{
width:30%;
@ -319,40 +335,68 @@
.map li a img:hover{
transform: translateY(-5%);
}
.map .gantie{
width:30px;
height:28px;
.map .font1{
width: 30px;
height: 28px;
position: absolute;
right: 58%;
top: 45%;
right: 57%;
top: 52%;
}
.map .font2{
width: 30px;
height: 28px;
position: absolute;
right: 60%;
top: 28%;
}
.map .font3{
width: 30px;
height: 28px;
position: absolute;
right: 66%;
top: 43%;
}
.map .font4{
width: 30px;
height: 28px;
position: absolute;
right: 50%;
top: 31%;
}
.map .lantie{
width:30px;
height:28px;
position: absolute;
right:57%;
top: 52%;
}
.map .wutie{
width:30px;
height:28px;
position: absolute;
right: 60%;
top: 28%;
}
.map .xitie{
width:30px;
height:28px;
position: absolute;
right: 66%;
top: 43%;
}
.map .yintie{
width:30px;
height:28px;
}
.sliderA{
position: absolute;
right: 50%;
top: 31%;
bottom: 0;
left: 0;
padding: 10px;
width: 100%;
height: 42px;
box-sizing: border-box;
background-color: rgba(0, 61, 131,0.9);
line-height: 25px;
font-size: 18px;
color: white;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.sliderA:hover{
color: #ffbb3f;
}
</style>
</head>
@ -369,7 +413,10 @@
<div class="layui-carousel" id="ID-carousel-demo-image" style="width: 650px;height: 433px;">
<div carousel-item>
<tbody th:each="url,status : ${urlList}">
<img th:src="${url.noticeUrl}">
<a th:href="@{/public_view.html(type=2,id=${url.workId})}" th:title="${url.workTitle}" target="_blank">
<img th:src="${url.imgUrl}" style="height: 100%;width: 100%">
<span class="sliderA">[[${#strings.abbreviate(url.workTitle,28)}]]</span>
</a>
</tbody>
</div>
</div>
@ -378,7 +425,7 @@
<div class="layui-card">
<div class="layui-card-header">
<i class="layui-icon layui-icon-notice" style="display: inline-block;font-size: 21px;
font-weight: bold;border-bottom: 3px solid #006fc4;height: 100%;line-height: 40px;color: #006fc4;">最新通知</i>
font-weight: bold;border-bottom: 3px solid #074488;height: 100%;line-height: 40px;color: #074488;">最新通知</i>
<span class="more">
<a href="announce_view.html" target="_blank">更多+</a>
</span>
@ -397,7 +444,7 @@
<!-- 宣传图-->
<div class="layui-container" style="padding-top: 50px">
<p>
<img th:src="@{/home/data/announceimg/20da.png}" style="width: 100%">
<img th:src="@{/home/data/announceimg/21da.png}" style="width: 100%">
</p>
</div>
<!--工作动态、内设部门-->
@ -406,7 +453,7 @@
<div class="layui-col-md6">
<div class="layui-card">
<div class="layui-card-header"><i class="layui-icon layui-icon-note" style="display: inline-block;font-size: 21px;
font-weight: bold;border-bottom: 3px solid #006fc4;height: 100%;line-height: 40px;color: #006fc4;">工作动态</i>
font-weight: bold;border-bottom: 3px solid #074488;height: 100%;line-height: 40px;color: #074488;">工作动态</i>
<span class="more">
<a href="work_view.html" target="_blank">更多+</a>
</span>
@ -424,7 +471,7 @@
<div class="layui-col-md6">
<div class="layui-card">
<div class="layui-card-header"><i class="layui-icon layui-icon-user" style="display: inline-block;font-size: 21px;
font-weight: bold;border-bottom: 3px solid #006fc4;height: 100%;line-height: 40px;color: #006fc4;">部门动态</i>
font-weight: bold;border-bottom: 3px solid #074488;height: 100%;line-height: 40px;color: #074488;">部门动态</i>
<span class="more">
<a href="dept_trends_view.html" target="_blank">更多+</a>
</span>
@ -449,27 +496,25 @@
<div class="layui-container" style="padding-top: 25px">
<div class="layui-card">
<div class="layui-card-header"><i class="layui-icon layui-icon-website" style="display: inline-block;font-size: 21px;
font-weight: bold;border-bottom: 3px solid #006fc4;height: 100%;line-height: 40px;color: #006fc4;">应用系统</i>
font-weight: bold;border-bottom: 3px solid #074488;height: 100%;line-height: 40px;color: #074488;">应用系统</i>
</div>
<div class="layui-card-body layui-row systemSlider">
<ul class="newslist zhuantiContent">
<li th:each="content,status : ${contentList}">
<div id="owl-demo" class="owl-carousel">
<div class="item" th:each="content,status : ${contentList}">
<a target="_blank" th:href="@{${content.contentUrl}}" th:title="${content.contentTitle}">
<!--<img th:unless="${#strings.isEmpty(content.contentLogo)}" style="height:80px;width: 80px;" th:src="${content.contentLogo}">
<img th:if="${#strings.isEmpty(content.contentLogo)}" style="height:80px;width: 80px;" alt="无法显示图片" th:src="@{/home/base/noimage2.png}">-->
<span>
<span style="display:inline-block;width:50px;height:50px;border-radius:50%;font-size:28px;line-height:50px;background-color:rgba(27, 110, 196, 0.68);">
<i style="color: #fff;" class="fa fa-bar-chart-o" th:class="${content.icon}"></i>
</span>
<p style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:120px;color: #006fc4;">
<p style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:120px;color: #074488;font-size: 16px;">
[[${content.contentTitle}]]
</p>
</a>
</li>
</ul>
<span class="button">
<a class="system-left"></a>
<a class="system-right"></a>
</span>
</div>
</div>
<div class="customNavigation">
<a class="btn prev"></a>
<a class="btn next"></a>
</div>
</div>
</div>
</div>
@ -479,7 +524,7 @@
<div class="layui-col-md6">
<div class="layui-card">
<div class="layui-card-header"><i class="layui-icon layui-icon-tabs" style="display: inline-block;font-size: 21px;
font-weight: bold;border-bottom: 3px solid #006fc4;height: 100%;line-height: 40px;color: #006fc4;">检察业务</i>
font-weight: bold;border-bottom: 3px solid #074488;height: 100%;line-height: 40px;color: #074488;">检察业务</i>
<span class="more">
<a href="business_view.html" target="_blank">更多+</a>
</span>
@ -497,7 +542,7 @@
<div class="layui-col-md6">
<div class="layui-card">
<div class="layui-card-header"><i class="layui-icon layui-icon-theme" style="display: inline-block;font-size: 21px;
font-weight: bold;border-bottom: 3px solid #006fc4;;height: 100%;line-height: 40px;color: #006fc4;">专题活动</i>
font-weight: bold;border-bottom: 3px solid #074488;;height: 100%;line-height: 40px;color: #074488;">专题活动</i>
<span class="more">
<a href="special_view.html" target="_blank">更多+</a>
</span>
@ -508,6 +553,7 @@
<a th:href="@{/special_view.html(columnId=${column.columnId})}" th:title="${column.columnName}" target="_blank">
<img style="height:155px;width: 190px " th:src="${column.columnUrl}">
</a>
<span style="margin-top: 5px;font-size: 15px;">[[${column.columnName}]]</span >
</li>
</ul>
</div>
@ -519,13 +565,14 @@
<div class="layui-container" style="padding-top: 25px">
<div class="layui-card">
<div class="layui-card-header"><i class="layui-icon layui-icon-website" style="display: inline-block;font-size: 21px;
font-weight: bold;border-bottom: 3px solid #006fc4;height: 100%;line-height: 40px;color: #006fc4;">兰铁视窗</i>
font-weight: bold;border-bottom: 3px solid #074488;height: 100%;line-height: 40px;color: #074488;">兰铁视窗</i>
</div>
<div class="layui-card-body layui-row">
<div class="lantieContent">
<ul class="right">
<li th:each="content,status : ${windowColumns}" style="width:22%;">
<li th:each="content,status : ${windowColumns}" style="width:22%;text-align:center;">
<video th:src="${content.columnUrl}" class="video" style="width:100%;"></video>
<span style="font-size: 15px;">[[${content.columnName}]]</span>
</li>
</ul>
</div>
@ -536,51 +583,46 @@
<!-- 友情链接 -->
<div class="layui-container" style="padding-top: 25px">
<div class="layui-card">
<!-- <div class="layui-card-header"><i class="layui-icon layui-icon-website" style="display: inline-block;font-size: 21px;-->
<!-- font-weight: bold;border-bottom: 3px solid #006fc4;height: 100%;line-height: 40px;color: #006fc4;">兰铁视窗</i>-->
<!-- </div>-->
<div class="layui-card-body layui-row">
<div class="lianjieBox">
<ul class="lianjieList">
<li>
<a target="_blank" href="https://www.spp.gov.cn">中华人民共和国最高人民检察院</a>
<a target="_blank" href="http://www.gj.jcy/">中华人民共和国最高人民检察院</a>
</li>
<li>
<a target="_blank" href="http://www.gansu.jcy.gov.cn">甘肃省人民检察院</a>
<a target="_blank" href="http://143.208.161.100/">甘肃省人民检察院</a>
</li>
<li>
<a target="_blank" href="http://www.lanzhoutiejian.jcy.gov.cn">兰州铁路运输检察院</a>
<a target="_blank" href="http://143.212.248.10">兰州铁路运输检察院</a>
</li>
<li>
<a target="_blank" href="http://www.wuweitielu.jcy.gov.cn" >武威铁路运输检察院</a>
<a target="_blank" href="http://143.212.252.50" >武威铁路运输检察院</a>
</li>
<li>
<a target="_blank" href="http://www.qh.jcy.gov.cn/c/xntj/">西宁铁路运输检察院</a>
<a target="_blank" href="#">西宁铁路运输检察院</a>
</li>
<li>
<a target="_blank" href="https://nx.jcy.gov.cn/tjsy/">银川铁路运输检察院</a>
<a target="_blank" href="#">银川铁路运输检察院</a>
</li>
</ul>
<ul class="map">
<li>
<img th:src="@{/home/base/map1.png}">
<!-- <a target="_blank" href="https://www.spp.gov.cn" title="中华人民共和国最高人民检察院">-->
<!-- <img th:src="@{/home/base/2Dmap.png}" class="zuigao">-->
<!-- </a>-->
<a target="_blank" href="http://www.gansu.jcy.gov.cn" title="甘肃省人民检察院">
<img th:src="@{/home/base/2Dmap.png}" class="gantie">
</a>
<a target="_blank" href="http://www.lanzhoutiejian.jcy.gov.cn" title="兰州铁路运输检察院">
<img th:src="@{/home/base/map3.png}">
<a class="font1" target="_blank" href="http://143.212.248.10" title="兰州铁路运输检察院">
<img th:src="@{/home/base/2Dmap.png}" class="lantie">
<span>兰州</span>
</a>
<a target="_blank" href="http://www.wuweitielu.jcy.gov.cn" title="武威铁路运输检察院">
<a class="font2" target="_blank" href="http://143.212.252.50" title="武威铁路运输检察院">
<img th:src="@{/home/base/2Dmap.png}" class="wutie">
<span>武威</span>
</a>
<a target="_blank" href="http://www.qh.jcy.gov.cn/c/xntj/" title="西宁铁路运输检察院">
<a class="font3" target="_blank" href="#" title="西宁铁路运输检察院">
<img th:src="@{/home/base/2Dmap.png}" class="xitie">
<span>西宁</span>
</a>
<a target="_blank" href="https://nx.jcy.gov.cn/tjsy/" title="银川铁路运输检察院">
<a class="font4" target="_blank" href="#" title="银川铁路运输检察院">
<img th:src="@{/home/base/2Dmap.png}" class="yintie">
<span>银川</span>
</a>
</li>
</ul>
@ -588,44 +630,71 @@
</div>
</div>
</div>
<!-- <div class="ztgg">-->
<!-- <div class="ztgg_box">-->
<!-- <div class="images" style="display: flex">-->
<!-- <a target="_blank" href="https://www.spp.gov.cn" class="ariaskiptheme">-->
<!-- <img th:src="@{/home/base/supreme_procuratorate.jpg}">-->
<!-- </a>-->
<!-- <a target="_blank" href="http://www.gansu.jcy.gov.cn" class="ariaskiptheme">-->
<!-- <img th:src="@{/home/base/peopel_procuratorate.jpg}">-->
<!-- </a>-->
<!-- <a target="_blank" href="http://www.lanzhoutiejian.jcy.gov.cn" class="ariaskiptheme">-->
<!-- <img th:src="@{/home/base/lanzhou_procuratorate.jpg}">-->
<!-- </a>-->
<!-- <a target="_blank" href="http://www.wuweitielu.jcy.gov.cn" class="ariaskiptheme">-->
<!-- <img th:src="@{/home/base/wuwei_procuratorate.jpg}">-->
<!-- </a>-->
<!-- <a target="_blank" href="http://www.qh.jcy.gov.cn/c/xntj/" class="ariaskiptheme">-->
<!-- <img th:src="@{/home/base/xining_procuratorate.jpg}">-->
<!-- </a>-->
<!-- <a target="_blank" href="https://nx.jcy.gov.cn/tjsy/" class="ariaskiptheme">-->
<!-- <img th:src="@{/home/base/yinchuan_procuratorate.jpg}">-->
<!-- </a>-->
<!-- <a target="_blank" href="http://www.qh.jcy.gov.cn/c/xntj/" class="ariaskiptheme">-->
<!-- <img th:src="@{/home/base/xining_procuratorate.jpg}">-->
<!-- </a>-->
<!-- <a target="_blank" href="https://nx.jcy.gov.cn/tjsy/" class="ariaskiptheme">-->
<!-- <img th:src="@{/home/base/yinchuan_procuratorate.jpg}">-->
<!-- </a>-->
<!-- </div>-->
<!-- </div>-->
<!-- <a class="arrow-left"></a>-->
<!-- <a class="arrow-right"></a>-->
<!-- </div>-->
</div>
</div>
</div>
<!--底部-->
<th:block th:include="home_footer :: home_footer"/>
<script th:src="@{/home/lib/layui.js}"></script>
<script th:src="@{/js/base/js/jquery-1.9.1.min.js}"></script>
<script th:src="@{/js/base/owl-carousel/owl.carousel.js}"></script>
<style>
#owl-demo .item{
background-color: rgba(30,159,255,0.11);
padding: 30px 0px;
margin: 10px;
color: #FFF;
display:flex;
align-items:center;
justify-content:center;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
text-align: center;
transition: all 0.3s;
}
#owl-demo .item:hover {
transform: translateY(-5%);
}
#owl-demo .item span{
display:inline-block;
width:50px;
height:50px;
border-radius:50%;
font-size:28px;
line-height:50px;
background-color:rgba(27, 110, 196, 0.68);
}
.customNavigation{
text-align: center;
}
.customNavigation a{
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
</style>
<script>
$(document).ready(function() {
var owl = $("#owl-demo");
owl.owlCarousel({
items :8,
itemsDesktop : [1500,5],
itemsDesktopSmall : [900,3],
itemsTablet: [600,2],
itemsMobile : false
});
$(".next").click(function(){
owl.trigger('owl.next');
})
$(".prev").click(function(){
owl.trigger('owl.prev');
})
});
</script>
<script type="text/javascript">
window.addEventListener('DOMContentLoaded', function () {
var currentUrl = location.href;
@ -653,68 +722,6 @@
anim: 'fade',
});
});
//应用系统图片
var systemSlider = document.querySelector('.systemSlider');
var systemSlides = document.querySelector('.zhuantiContent');
var systemPrevBtn = document.querySelector('.system-left');
var systemNextBtn = document.querySelector('.system-right');
var systemSlideWidth = systemSlider.clientWidth;
var systemVisible = 8;
var systemIndex = 0;
function systemMoveSlides(direction) {
if (direction === 'systemPrevBtn') {
systemIndex--;
if (systemIndex < 0) {
systemIndex = systemSlides.childElementCount - systemVisible;
}
} else if (direction === 'systemNextBtn') {
systemIndex++;
if (systemIndex > systemSlides.childElementCount - systemVisible) {
systemIndex = 0;
}
}
systemSlides.style.transform = 'translateX(-' + (systemIndex * (systemSlideWidth / systemVisible)) + 'px)';
}
systemPrevBtn.addEventListener('click', function() {
systemMoveSlides('systemPrevBtn');
});
systemNextBtn.addEventListener('click', function() {
systemMoveSlides('systemNextBtn');
});
//专题图片
//var slider = document.querySelector('.ztgg_box');
//var slides = document.querySelector('.images');
//var prevBtn = document.querySelector('.arrow-left');
//var nextBtn = document.querySelector('.arrow-right');
//var slideWidth = slider.clientWidth;
//var visibleSlides = 4;
//var slideIndex = 0;
//
//function moveSlides(direction) {
// if (direction === 'prev') {
// slideIndex--;
// if (slideIndex < 0) {
// slideIndex = slides.childElementCount - visibleSlides;
// }
// } else if (direction === 'next') {
// slideIndex++;
// if (slideIndex > slides.childElementCount - visibleSlides) {
// slideIndex = 0;
// }
// }
// slides.style.transform = 'translateX(-' + (slideIndex * (slideWidth / visibleSlides)) + 'px)';
//}
//
//prevBtn.addEventListener('click', function() {
// moveSlides('prev');
//});
//nextBtn.addEventListener('click', function() {
// moveSlides('next');
//});
//返回顶部
window.onscroll = function() {scrollFunction()};
function scrollFunction() {

@ -43,7 +43,7 @@
<div class="layui-container" style="padding-top: 20px">
<div>
<blockquote class="layui-elem-quote">
<h2>检察业务</h2>
<h2 style="color: #074488;">检察业务</h2>
</blockquote>
<br>
<p><i class="layui-icon layui-icon-location"></i>当前位置:<a target="_parent" href="base.html">首页</a>&nbsp;/&nbsp;<a

@ -151,7 +151,7 @@
<div class="layui-container" style="padding-top: 20px">
<div>
<blockquote class="layui-elem-quote">
<h2>部门动态</h2>
<h2 style="color: #074488;">部门动态</h2>
</blockquote>
<br>
<p><i class="layui-icon layui-icon-location"></i>当前位置:<a href="base.html" target="_parent">首页</a>&nbsp;/&nbsp;<a target="_parent" href="dept_trends_view.html">部门动态</a></p>

@ -71,7 +71,7 @@
<div class="layui-container" style="padding-top: 70px">
<div>
<blockquote class="layui-elem-quote">
<h2>部门动态</h2>
<h2 style="color: #074488;">部门动态</h2>
</blockquote>
<br>
<p><i class="layui-icon layui-icon-location"></i>当前位置:<a href="base.html" target="_parent">首页</a>&nbsp;/&nbsp;<a target="_parent" href="dept_trends_view.html">部门动态</a></p>

@ -43,7 +43,7 @@
<div class="layui-container" style="padding-top: 20px">
<div>
<blockquote class="layui-elem-quote">
<h2>搜索结果页</h2>
<h2 style="color: #074488;">搜索结果页</h2>
</blockquote>
<br>
<p><i class="layui-icon layui-icon-location"></i>

@ -152,7 +152,7 @@
<div class="layui-container" style="padding-top: 20px">
<div>
<blockquote class="layui-elem-quote">
<h2>专题活动</h2>
<h2 style="color: #074488;">专题活动</h2>
</blockquote>
<br>
<p><i class="layui-icon layui-icon-location"></i>当前位置:<a target="_parent" href="base.html">首页</a>&nbsp;/&nbsp;<a

@ -72,7 +72,7 @@
<div class="layui-container" style="padding-top: 70px">
<div>
<blockquote class="layui-elem-quote">
<h2>专题活动</h2>
<h2 style="color: #074488;">专题活动</h2>
</blockquote>
<br>
<p><i class="layui-icon layui-icon-location"></i>当前位置:<a target="_parent" href="base.html">首页</a>&nbsp;/&nbsp;<a

@ -42,7 +42,7 @@
<div class="layui-container" style="padding-top: 20px">
<div>
<blockquote class="layui-elem-quote">
<h2>工作动态</h2>
<h2 style="color: #074488;">工作动态</h2>
</blockquote>
<br>
<p><i class="layui-icon layui-icon-location"></i>当前位置:<a target="_parent" href="base.html">首页</a>&nbsp;/&nbsp;<a href="work_view.html" target="_parent">工作动态</a></p>

@ -2,7 +2,7 @@
<head>
<style>
#footer {
background-color: #2767ae;
background-color: #074488;
color: #fff;
margin-top: 20px;
width: 100%;

@ -3,31 +3,32 @@
<style>
.homePage{
color: #fff;
font-size: 21px;
font-size: 23px;
display: block;text-align: center;
font-weight: bold;padding: 0 14px;
/*font-weight: bold;padding: 0 14px;*/
letter-spacing: 2px;
}
#hd {
position: relative;
background-image: url(/home/base/bg-head5.png);
background-position-y:56%;
height: 326px;
background-size: cover;
display: flex;
justify-content: center;
align-items: center;
min-width: 1690px;
margin: 0 auto;
margin-bottom: 35px;
}
#hd .bg_image1{
width:100%;
height:100%;
height: 326px;
}
#ltlogo {
position: absolute;
top: 43%; /* 将图像元素垂直居中 */
left: 30%; /* 将图像元素水平居中 */
height: 82px;
left: 43%; /* 将图像元素水平居中 */
height: 122px;
transform: translate(-50%, -50%);
}
#dhl {
@ -36,35 +37,36 @@
}
.layui-nav {
position: absolute;
bottom: 0;
left: 0;
right: 0;
display: flex;
justify-content: center;
background-color: rgba(1,78,155,0.7);
background-color: rgba(7,68,136,1);
width: 100%;
position: absolute;
bottom: -26px;
z-index: 111;
}
.layui-elem-quote{
border-left: 5px solid #005cb1;
}
.timeDt {
position: absolute;
display: inline-block;
vertical-align: middle;
font-size: 14px;
color: #fff;
top: 5%;
left: 9%;
}
</style>
</head>
<div id="hd">
<div class="layui-carousel" id="ID-carousel-demo-1" style="width: 100%;height: 326px;">
<div carousel-item>
<div>
<img class="bg_image1" th:src="@{/home/base/bg-head5.png}">
</div>
<div>
<img class="bg_image1" th:src="@{/home/base/bg-head2.png}">
</div>
<div>
<img class="bg_image1" th:src="@{/home/base/bg-head3.png}">
<img class="bg_image1" th:src="@{/home/base/bg-head7.png}">
<div class="timeDt">
<span th:text="${#dates.format(new java.util.Date().getTime(), 'yyyy年MM月dd日')}"></span>
<span th:text="${#dates.format(new java.util.Date().getTime(), 'EEEE')}"></span>
</div>
</div>
</div>
<img th:src="@{/home/base/lantie3.png}" id="ltlogo" >
<img th:src="@{/home/base/lantie4.png}" id="ltlogo" >
<ul class="layui-nav" id="dhl">
<li class="layui-nav-item">
<a href="base.html" class="homePage">首页</a>
@ -75,20 +77,20 @@
<li class="layui-nav-item">
<a href="work_view.html" class="homePage">工作动态</a>
</li>
<li class="layui-nav-item">
<li class="layui-nav-item dept">
<a href="dept_trends_view.html" class="homePage">部门动态</a>
</li>
<li class="layui-nav-item">
<a href="business_view.html" class="homePage">检察业务</a>
</li>
<li class="layui-nav-item">
<li class="layui-nav-item special">
<a href="special_view.html" class="homePage">专题活动</a>
</li>
<form action="" id="search_form" class="layui-form" style="display:flex;margin-top:11px;margin-left:40px;">
<label>
<input name="title" id="title" type="text" placeholder="请输入搜索内容" class="layui-input">
</label>
<button class="layui-btn" onclick="queryList()">搜索</button>
<button class="layui-btn" onclick="queryList()" style="background-color: rgb(51, 111, 184);">搜索</button>
</form>
</ul>
</div>

@ -3,31 +3,31 @@
<style>
.homePage{
color: #fff;
font-size: 21px;
font-size: 23px;
display: block;text-align: center;
font-weight: bold;padding: 0 14px;
/*font-weight: bold;padding: 0 14px;*/
letter-spacing: 2px;
}
#hd {
position: relative;
//background-image: url(/home/base/bg-head2.png);
//background-position-y:56%;
height: 326px;
background-size: cover;
display: flex;
justify-content: center;
align-items: center;
min-width: 1690px;
margin: 0 auto;
}
#hd .bg_image1{
width:100%;
height:100%;
height: 326px;
}
#ltlogo {
position: absolute;
top: 43%; /* 将图像元素垂直居中 */
left: 30%; /* 将图像元素水平居中 */
height: 82px;
left: 43%; /* 将图像元素水平居中 */
height: 122px;
transform: translate(-50%, -50%);
}
#ltlogo2 {
@ -41,15 +41,13 @@
padding-bottom: 0;
font-style: inherit;
}
.layui-nav {
position: absolute;
bottom: 0;
left: 0;
right: 0;
display: flex;
justify-content: center;
background-color: rgba(1,78,155,0.7);
background-color: rgba(7,68,136,1);
width: 100%;
position: absolute;
bottom: -26px;
}
.homePage .layui-nav-more{
display:none;
@ -60,7 +58,7 @@
left: -353%;
top: 65px;
transform: translate(-50%, -50%);
width: 1331px;
width: 80vw;
//line-height: 85px;
padding: 5px 0;
box-shadow: 0 2px 4px rgba(0,0,0,.12);
@ -70,7 +68,7 @@
border-radius: 2px;
white-space: wrap;
box-sizing: border-box;
height:100px;
height:auto;
}
.layui-nav-item .arrow {
z-index: 999;
@ -96,7 +94,8 @@
left: -581%;
top: 65px;
transform: translate(-50%, -50%);
width: 1331px;
width: 80vw;
max-width: 75vw;
//line-height: 85px;
padding: 5px 0;
box-shadow: 0 2px 4px rgba(0,0,0,.12);
@ -104,46 +103,64 @@
background-color: rgba(255,255,255,0.89);
z-index: 100;
border-radius: 2px;
white-space: wrap;
box-sizing: border-box;
height:100px;
height:auto;
}
.childBox{
display: flex;
align-items: center;
justify-content: space-between;
justify-content: start;
height: 100%;
flex-wrap: wrap;
}
.childBox2{
display: flex;
align-items: center;
justify-content: start;
height: 100%;
flex-wrap: wrap;
}
.layui-elem-quote{
border-left: 5px solid #005cb1;
}
.childBox2 dd{
float: left;
fongt-size:18px;
text-align: center;
width:auto;
margin: 1px 9px;
/*.childBox2 dd{*/
/* float: left;*/
/* fongt-size:18px;*/
/* text-align: center;*/
/* width:auto;*/
/* margin: 1px 9px;*/
/*}*/
/*.childBox2 dd a{*/
/* text-align: center;*/
/* padding: 0 14px;*/
/*}*/
.fd-footer-bg {
position: absolute;
top: 105%;
left: 0;
z-index: -1;
width: 100%;
height: 539px;
background: url(/home/base/icon-footer-bg.png) center no-repeat;
}
.childBox2 dd a{
text-align: center;
padding: 0 14px;
.timeDt {
position: absolute;
display: inline-block;
vertical-align: middle;
font-size: 14px;
color: #fff;
top: 5%;
left: 9%;
}
</style>
</head>
<div id="hd">
<div class="layui-carousel" id="ID-carousel-demo-1" style="width: 100%;height: 326px;">
<div carousel-item>
<div>
<img class="bg_image1" th:src="@{/home/base/bg-head5.png}">
</div>
<div>
<img class="bg_image1" th:src="@{/home/base/bg-head2.png}">
</div>
<div>
<img class="bg_image1" th:src="@{/home/base/bg-head3.png}">
</div>
</div>
<img class="bg_image1" th:src="@{/home/base/bg-head7.png}">
<div class="timeDt">
<span th:text="${#dates.format(new java.util.Date().getTime(), 'yyyy年MM月dd日')}"></span>
<span th:text="${#dates.format(new java.util.Date().getTime(), 'EEEE')}"></span>
</div>
<!-- <img class="bg_image1" th:src="@{/home/base/bg-head3.png}">-->
<img th:src="@{/home/base/lantie3.png}" id="ltlogo" >
<img th:src="@{/home/base/lantie4.png}" id="ltlogo" >
<ul class="layui-nav" id="dhl">
<li class="layui-nav-item">
<a href="base.html" class="homePage">首页</a>
@ -187,9 +204,10 @@
<label>
<input name="title" id="title" type="text" placeholder="请输入搜索内容" class="layui-input">
</label>
<button class="layui-btn" onclick="queryList()">搜索</button>
<button class="layui-btn" onclick="queryList()" style="background-color: rgb(51, 111, 184);">搜索</button>
</form>
</ul>
<div class="fd-footer-bg"></div>
</div>
<script th:src="@{/js/jquery.min.js?v=3.6.3}"></script>
<script th:src="@{/home/lib/layui.js}"></script>

@ -4,8 +4,15 @@
.pag {text-align:center}
.pag .num{color: red;}
.pag a{
border:1px solid #000;
padding: 3px 10px;
border:1px solid rgb(193, 193, 193);
padding: 6px 12px;
color:#7f7f7f;
}
.pag a:hover{
color: #4e7ac3;
}
.pag span{
font-size: 15px;
}
</style>
</head>

@ -193,6 +193,7 @@
</a>
</div>
<ul class="nav navbar-top-links navbar-right welcome-message">
<li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="用户手册" href="/home/甘肃省人民检察院兰铁分院系统-操作手册.pdf" target="_blank"><i class="fa fa-question-circle"></i> 文档</a></li>
<li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="锁定屏幕" href="#" id="lockScreen"><i class="fa fa-lock"></i> 锁屏</a></li>
<li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="全屏显示" href="#" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏</a></li>
<li class="dropdown user-menu">

@ -4,12 +4,13 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>甘肃省人民检察院兰铁分院系统</title>
<meta name="description" content="若依后台管理框架">
<meta name="description" content="甘肃省人民检察院兰铁分院系统">
<link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
<link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
<link href="../static/css/style.min.css" th:href="@{/css/style.min.css}" rel="stylesheet"/>
<link href="../static/css/login.min.css" th:href="@{/css/login.min.css}" rel="stylesheet"/>
<link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=4.7.7}" rel="stylesheet"/>
<link href="../static/ajax/libs/captcha/css/verify.min.css" th:href="@{/ajax/libs/captcha/css/verify.min.css}" rel="stylesheet"/>
<!-- 360浏览器急速模式 -->
<meta name="renderer" content="webkit">
<!-- 避免IE使用兼容模式 -->
@ -35,13 +36,22 @@
width: 26%;
top: 6%;
}
.verifybox {
left: 70%;
top: 42%;
transform: translate(-52%, -50%);
}
</style>
<script>
if(window.top!==window.self){alert('未登录或登录超时。请重新登录');window.top.location=window.location};
</script>
</head>
<body class="signin">
<div class="signinpanel">
<div id="verfyImg">
</div>
<div class="signinpanel">
<div class="row" style="margin-right: -30px">
<div class="col-sm-7">
<div class="signin-info">
@ -55,25 +65,17 @@
<strong th:if="${isAllowRegister}">还没有账号? <a th:href="@{/register}">立即注册&raquo;</a></strong>
</div>
</div>
<div class="col-sm-5">
<form id="signupForm" autocomplete="off">
<h4 class="no-margins" style="color:#000;">登录:</h4>
<input type="text" name="username" class="form-control uname" placeholder="用户名" value="admin" />
<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" />
</div>
<div class="col-xs-6">
<a href="javascript:void(0);" title="点击更换验证码">
<img th:src="@{/captcha/captchaImage(type=${captchaType})}" class="imgcode" width="85%"/>
</a>
</div>
</div>
<div class="checkbox-custom" th:if="${isRemembered}" th:classappend="${captchaEnabled==false} ? 'm-t'">
<p class="m-t-md"></p>
<input type="text" name="username" class="form-control uname" placeholder="用户名" value="" />
<input type="password" name="password" class="form-control pword" placeholder="密码" value="" />
<div class="checkbox-custom m-t" th:if="${isRemembered}">
<input type="checkbox" id="rememberme" name="rememberme"> <label style="color: #000;" for="rememberme">记住我</label>
</div>
<button class="btn btn-success btn-block" id="btnSubmit" data-loading="正在验证登录,请稍...">登录</button>
<button class="btn btn-success btn-block" id="btnSubmit" data-loading="正在验证登录,请稍后...">登录</button>
</form>
</div>
</div>
@ -82,15 +84,21 @@
Copyright ©甘肃省人民检察院兰铁分院<br>
</div>
</div>
</div>
<script th:inline="javascript"> var ctx = [[@{/}]]; var captchaType = [[${captchaType}]]; </script>
</div>
<script th:inline="javascript"> var ctx = [[@{/}]];</script>
<!--[if lte IE 8]><script>window.location.href=ctx+'html/ie.html';</script><![endif]-->
<!-- 全局js -->
<script src="../static/js/jquery.min.js" th:src="@{/js/jquery.min.js}"></script>
<!-- 验证码 -->
<script src="../static/ajax/libs/captcha/crypto-js.min.js" th:src="@{/ajax/libs/captcha/crypto-js.min.js}"></script>
<script src="../static/ajax/libs/captcha/ase.min.js" th:src="@{/ajax/libs/captcha/ase.min.js}"></script>
<script src="../static/ajax/libs/captcha/verify.min.js" th:src="@{/ajax/libs/captcha/verify.min.js}"></script>
<!-- 验证插件 -->
<script src="../static/ajax/libs/validate/jquery.validate.min.js" th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script>
<script src="../static/ajax/libs/layer/layer.min.js" th:src="@{/ajax/libs/layer/layer.min.js}"></script>
<script src="../static/ajax/libs/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>
<script src="../static/ruoyi/js/ry-ui.js" th:src="@{/ruoyi/js/ry-ui.js?v=4.7.7}"></script>
<script src="../static/ruoyi/login.js" th:src="@{/ruoyi/login.js}"></script>
<script src="../static/js/jsencrypt.min.js" th:src="@{/js/jsencrypt.min.js}"></script>
</body>
</html>

@ -4,17 +4,18 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<title>甘肃省人民检察院兰铁分院系统</title>
<meta name="description" content="若依后台管理框架">
<meta name="description" content="甘肃省人民检察院兰铁分院系统">
<link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
<link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
<link href="../static/css/style.min.css" th:href="@{/css/style.min.css}" rel="stylesheet"/>
<link href="../static/css/login.min.css" th:href="@{/css/login.min.css}" rel="stylesheet"/>
<link href="../static/ruoyi/css/ry-ui.css" th:href="@{/ruoyi/css/ry-ui.css?v=4.7.7}" rel="stylesheet"/>
<link href="../static/ajax/libs/captcha/css/verify.min.css" th:href="@{/ajax/libs/captcha/css/verify.min.css}" rel="stylesheet"/>
<!-- 360浏览器急速模式 -->
<meta name="renderer" content="webkit">
<!-- 避免IE使用兼容模式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="shortcut icon" th:href="@{/home/base/favicon.ico}" />
<link th:href="@{/home/base/favicon.ico}" rel="shortcut icon"/>
<style type="text/css">label.error { position:inherit; }
.signinpanel {
width: 100%;
@ -35,11 +36,18 @@
width: 26%;
top: 6%;
}
.verifybox {
left: 70%;
top: 46%;
transform: translate(-52%, -50%);
}
</style>
</head>
<body class="signin">
<div class="signinpanel">
<div id="verfyImg">
</div>
<div class="signinpanel">
<div class="row">
<div class="col-sm-7">
<div class="signin-info">
@ -48,37 +56,20 @@
</div>
<div class="m-b"></div>
<h4>欢迎使用 <strong>甘肃省人民检察院兰铁分院门户网站后台管理系统</strong></h4>
<!--<ul class="m-b">
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> SpringBoot</li>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Mybatis</li>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Shiro</li>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Thymeleaf</li>
<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Bootstrap</li>
</ul>-->
<strong>已经注册过? <a th:href="@{/login}">直接登录&raquo;</a></strong>
</div>
</div>
<div class="col-sm-5">
<form id="registerForm" autocomplete="off">
<h4 class="no-margins" style="color:#000;">注册:</h4>
<h4 class="no-margins">注册:</h4>
<p class="m-t-md"></p>
<input type="text" name="username" class="form-control uname" placeholder="用户名" maxlength="20" />
<input type="password" name="password" class="form-control pword" placeholder="密码" maxlength="20" />
<input type="password" name="confirmPassword" class="form-control pword" placeholder="确认密码" maxlength="20" />
<div class="row m-t" th:if="${captchaEnabled==true}">
<div class="col-xs-6">
<input type="text" name="validateCode" class="form-control code" placeholder="验证码" maxlength="5" >
</div>
<div class="col-xs-6">
<a href="javascript:void(0);" title="点击更换验证码">
<img th:src="@{/captcha/captchaImage(type=${captchaType})}" class="imgcode" width="85%"/>
</a>
</div>
<div class="checkbox-custom m-t">
<input type="checkbox" id="acceptTerm" name="acceptTerm"> <label style="color: #000;" for="acceptTerm">我已阅读并同意</label>
</div>
<div class="checkbox-custom" th:classappend="${captchaEnabled==false} ? 'm-t'">
<input type="checkbox" id="acceptTerm" name="acceptTerm"> <label for="acceptTerm">我已阅读并同意</label>
<a href="https://gitee.com/y_project/RuoYi/blob/master/README.md" target="_blank">使用条款</a>
</div>
<button class="btn btn-success btn-block" id="btnSubmit" data-loading="正在验证注册,请稍候...">注册</button>
<button class="btn btn-success btn-block" id="btnSubmit" data-loading="正在验证注册,请稍后...">注册</button>
</form>
</div>
</div>
@ -87,10 +78,15 @@
Copyright ©甘肃省人民检察院兰铁分院<br>
</div>
</div>
</div>
<script th:inline="javascript"> var ctx = [[@{/}]]; var captchaType = [[${captchaType}]]; </script>
</div>
<script th:inline="javascript"> var ctx = [[@{/}]];</script>
<!-- 全局js -->
<script src="../static/js/jquery.min.js" th:src="@{/js/jquery.min.js}"></script>
<!-- 验证码 -->
<script src="../static/ajax/libs/captcha/crypto-js.min.js" th:src="@{/ajax/libs/captcha/crypto-js.min.js}"></script>
<script src="../static/ajax/libs/captcha/ase.min.js" th:src="@{/ajax/libs/captcha/ase.min.js}"></script>
<script src="../static/ajax/libs/captcha/verify.min.js" th:src="@{/ajax/libs/captcha/verify.min.js}"></script>
<!-- 验证插件 -->
<script src="../static/ajax/libs/validate/jquery.validate.min.js" th:src="@{/ajax/libs/validate/jquery.validate.min.js}"></script>
<script src="../static/ajax/libs/layer/layer.min.js" th:src="@{/ajax/libs/layer/layer.min.js}"></script>
<script src="../static/ajax/libs/blockUI/jquery.blockUI.js" th:src="@{/ajax/libs/blockUI/jquery.blockUI.js}"></script>

@ -4,10 +4,16 @@
.pag {text-align:center}
.pag .num{color: red;}
.pag a{
border:1px solid #000;
padding: 3px 10px;
border:1px solid rgb(193, 193, 193);
padding: 6px 12px;
color:#7f7f7f;
}
.pag a:hover{
color: #4e7ac3;
}
.pag span{
font-size: 15px;
}
</style>
</head>
<div class="pag" th:if="${page.pages > 0}">

@ -11,7 +11,7 @@
<div class="form-group">
<label class="col-sm-2 control-label is-required">检察业务名称:</label>
<div class="col-sm-10">
<input id="businessTitle" name="businessTitle" class="form-control" type="text" required>
<input id="businessTitle" name="businessTitle" class="form-control" type="text" required maxlength="100">
</div>
</div>
<div class="form-group">

@ -12,7 +12,7 @@
<div class="form-group">
<label class="col-sm-2 control-label is-required">检察业务名称:</label>
<div class="col-sm-10">
<input id="noticeTitle" name="businessTitle" th:field="*{businessTitle}" class="form-control" type="text" required>
<input id="noticeTitle" name="businessTitle" th:field="*{businessTitle}" class="form-control" type="text" required maxlength="100">
</div>
</div>
<div class="form-group">

@ -20,7 +20,7 @@
<div class="form-group">
<label class="col-sm-3 control-label is-required">栏目名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="columnName" id="columnName" required>
<input class="form-control" type="text" name="columnName" id="columnName" required maxlength="100">
</div>
</div>
<div class="form-group">

@ -21,7 +21,7 @@
<div class="form-group">
<label class="col-sm-3 control-label is-required">栏目名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="columnName" id="columnName" th:field="*{columnName}" required>
<input class="form-control" type="text" name="columnName" id="columnName" th:field="*{columnName}" required maxlength="100">
</div>
</div>
<div class="form-group">

@ -10,7 +10,7 @@
<div class="form-group">
<label class="col-sm-2 control-label is-required">应用系统名称:</label>
<div class="col-sm-6">
<input id="contentTitle" name="contentTitle" class="form-control" type="text" required>
<input id="contentTitle" name="contentTitle" class="form-control" type="text" required maxlength="30">
</div>
</div>
<div class="form-group">

@ -11,7 +11,7 @@
<div class="form-group">
<label class="col-sm-2 control-label is-required">应用系统名称:</label>
<div class="col-sm-6">
<input id="contentTitle" name="contentTitle" th:field="*{contentTitle}" class="form-control" type="text" required>
<input id="contentTitle" name="contentTitle" th:field="*{contentTitle}" class="form-control" type="text" required maxlength="30">
</div>
</div>
<div class="form-group">

@ -12,7 +12,7 @@
<div class="form-group">
<label class="col-sm-2 control-label is-required">公告标题:</label>
<div class="col-sm-10">
<input id="noticeTitle" name="noticeTitle" class="form-control" type="text" required>
<input id="noticeTitle" name="noticeTitle" class="form-control" type="text" required maxlength="100">
</div>
</div>
<div class="form-group">
@ -30,22 +30,7 @@
<div class="summernote"></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">轮播图片上传:</label>
<br/>
<div class="fileinput fileinput-new" data-provides="fileinput">
<div class="fileinput-preview thumbnail" data-trigger="fileinput" style="width: 200px; height: 150px;"></div>
<div>
<span class="btn btn-white btn-file">
<span class="fileinput-new">选择图片</span>
<span class="fileinput-exists">更改</span>
<input type="file" id="noticeUrlId" required>
<input type="hidden" id="noticeUrl" name="noticeUrl">
</span>
<a href="#" class="btn btn-white fileinput-exists" data-dismiss="fileinput">清除</a>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">文件上传:</label>
<br/>
@ -127,33 +112,7 @@
$.operate.save(prefix + "/add", $('#form-notice-add').serialize());
}
}
//图片上传
$('#noticeUrlId').on('change.bs.fileinput ', function (e) {
// 处理自己的业务
var file = e.target.files[0];
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) {
$("#noticeUrl").val(result.url);
} else {
$.modal.alertError(result.msg);
}
},
error: function(error) {
$.modal.alertWarning("图片上传失败。");
}
});
});
//文件上传
$('#fileUrlId').on('change.bs.fileinput ', function (e) {
// 处理自己的业务

@ -13,7 +13,7 @@
<div class="form-group">
<label class="col-sm-2 control-label is-required">公告标题:</label>
<div class="col-sm-10">
<input id="noticeTitle" name="noticeTitle" th:field="*{noticeTitle}" class="form-control" type="text" required>
<input id="noticeTitle" name="noticeTitle" th:field="*{noticeTitle}" class="form-control" type="text" required maxlength="100">
</div>
</div>
<div class="form-group">
@ -31,25 +31,6 @@
<div id="editor" class="summernote"></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">轮播图片上传:</label>
<br/>
<div class="fileinput fileinput-new" data-provides="fileinput">
<div class="fileinput-new thumbnail" style="width: 140px; height: 140px;">
<img th:src="*{noticeUrl}">
</div>
<div class="fileinput-preview thumbnail" data-trigger="fileinput" style="width: 200px; height: 150px;"></div>
<div>
<span class="btn btn-white btn-file">
<span class="fileinput-new">选择图片</span>
<span class="fileinput-exists">更改</span>
<input type="file" id="noticeUrlId">
<input id="noticeUrl" name="noticeUrl" th:field="*{noticeUrl}" type="hidden">
</span>
<a href="#" class="btn btn-white fileinput-exists" data-dismiss="fileinput">清除</a>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">文件上传:</label>
@ -137,33 +118,7 @@
$.operate.save(prefix + "/edit", $('#form-notice-edit').serialize());
}
}
//图片上传
$('#noticeUrlId').on('change.bs.fileinput ', function (e) {
// 处理自己的业务
var file = e.target.files[0];
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) {
$("#noticeUrl").val(result.url);
} else {
$.modal.alertError(result.msg);
}
},
error: function(error) {
$.modal.alertWarning("图片上传失败。");
}
});
});
//文件上传
$('#fileUrlId').on('change.bs.fileinput ', function (e) {
// 处理自己的业务

@ -21,7 +21,7 @@
<div class="form-group">
<label class="col-sm-2 control-label is-required">专题活动名称:</label>
<div class="col-sm-10">
<input id="specialTitle" name="specialTitle" class="form-control" type="text" required>
<input id="specialTitle" name="specialTitle" class="form-control" type="text" required maxlength="100">
</div>
</div>
<div class="form-group">

@ -23,7 +23,7 @@
<div class="form-group">
<label class="col-sm-2 control-label is-required">专题活动名称:</label>
<div class="col-sm-10">
<input id="noticeTitle" name="specialTitle" th:field="*{specialTitle}" class="form-control" type="text" required>
<input id="noticeTitle" name="specialTitle" th:field="*{specialTitle}" class="form-control" type="text" required maxlength="100">
</div>
</div>
<div class="form-group">

@ -21,7 +21,7 @@
<div class="form-group">
<label class="col-sm-2 control-label is-required">部门动态名称:</label>
<div class="col-sm-10">
<input id="trendsTitle" name="trendsTitle" class="form-control" type="text" required>
<input id="trendsTitle" name="trendsTitle" class="form-control" type="text" required maxlength="100">
</div>
</div>
<div class="form-group">

@ -22,7 +22,7 @@
<div class="form-group">
<label class="col-sm-2 control-label is-required">部门动态名称:</label>
<div class="col-sm-10">
<input id="trendsTitle" name="trendsTitle" th:field="*{trendsTitle}" class="form-control" type="text" required>
<input id="trendsTitle" name="trendsTitle" th:field="*{trendsTitle}" class="form-control" type="text" required maxlength="100">
</div>
</div>
<div class="form-group">

@ -11,7 +11,7 @@
<div class="form-group">
<label class="col-sm-2 control-label is-required">工作动态名称:</label>
<div class="col-sm-10">
<input id="workTitle" name="workTitle" class="form-control" type="text" required>
<input id="workTitle" name="workTitle" class="form-control" type="text" required maxlength="100">
</div>
</div>
<div class="form-group">
@ -21,6 +21,23 @@
<div class="summernote"></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">轮播图片上传:</label>
<br/>
<div class="fileinput fileinput-new" data-provides="fileinput">
<div class="fileinput-preview thumbnail" data-trigger="fileinput" style="width: 200px; height: 150px;"></div>
<div>
<span class="btn btn-white btn-file">
<span class="fileinput-new">选择图片</span>
<span class="fileinput-exists">更改</span>
<input type="file" id="imgUrlId" required>
<input type="hidden" id="imgUrl" name="imgUrl">
</span>
<a href="#" class="btn btn-white fileinput-exists" data-dismiss="fileinput">清除</a>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">文件上传:</label>
<br/>
@ -103,6 +120,35 @@
}
}
//图片上传
$('#imgUrlId').on('change.bs.fileinput ', function (e) {
// 处理自己的业务
var file = e.target.files[0];
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) {
$("#imgUrl").val(result.url);
} else {
$.modal.alertError(result.msg);
}
},
error: function(error) {
$.modal.alertWarning("图片上传失败。");
}
});
});
//文件上传
$('#fileUrlId').on('change.bs.fileinput ', function (e) {
// 处理自己的业务

@ -12,7 +12,7 @@
<div class="form-group">
<label class="col-sm-2 control-label is-required">工作动态名称:</label>
<div class="col-sm-10">
<input id="noticeTitle" name="workTitle" th:field="*{workTitle}" class="form-control" type="text" required>
<input id="workTitle" name="workTitle" th:field="*{workTitle}" class="form-control" type="text" required maxlength="100">
</div>
</div>
<div class="form-group">
@ -22,6 +22,25 @@
<div id="editor" class="summernote"></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label is-required">轮播图片上传:</label>
<br/>
<div class="fileinput fileinput-new" data-provides="fileinput">
<div class="fileinput-new thumbnail" style="width: 140px; height: 140px;">
<img th:src="*{imgUrl}">
</div>
<div class="fileinput-preview thumbnail" data-trigger="fileinput" style="width: 200px; height: 150px;"></div>
<div>
<span class="btn btn-white btn-file">
<span class="fileinput-new">选择图片</span>
<span class="fileinput-exists">更改</span>
<input type="file" id="imgUrlId">
<input id="imgUrl" name="imgUrl" th:field="*{imgUrl}" type="hidden">
</span>
<a href="#" class="btn btn-white fileinput-exists" data-dismiss="fileinput">清除</a>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">文件上传:</label>
<br/>
@ -107,6 +126,34 @@
$.operate.save(prefix + "/edit", $('#form-work-edit').serialize());
}
}
//图片上传
$('#imgUrlId').on('change.bs.fileinput ', function (e) {
// 处理自己的业务
var file = e.target.files[0];
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) {
$("#imgUrl").val(result.url);
} else {
$.modal.alertError(result.msg);
}
},
error: function(error) {
$.modal.alertWarning("图片上传失败。");
}
});
});
//文件上传
$('#fileUrlId').on('change.bs.fileinput ', function (e) {
// 处理自己的业务

@ -0,0 +1,151 @@
package com.ruoyi.common.utils.security;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
/**
* RSA
*
* @author ruoyi
**/
public class RsaUtils
{
// Rsa 私钥
public static String privateKey = "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY"
+ "7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN"
+ "PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA"
+ "kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow"
+ "cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv"
+ "DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh"
+ "YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3" + "UP8iWi1Qw0Y=";
/**
*
*
* @param text
* @return
*/
public static String decryptByPrivateKey(String text) throws Exception
{
return decryptByPrivateKey(privateKey, text);
}
/**
*
*
* @param publicKeyString
* @param text
* @return
*/
public static String decryptByPublicKey(String publicKeyString, String text) throws Exception
{
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(Base64.decodeBase64(text));
return new String(result);
}
/**
*
*
* @param privateKeyString
* @param text
* @return
*/
public static String encryptByPrivateKey(String privateKeyString, String text) throws Exception
{
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(text.getBytes());
return Base64.encodeBase64String(result);
}
/**
*
*
* @param privateKeyString
* @param text
* @return
*/
public static String decryptByPrivateKey(String privateKeyString, String text) throws Exception
{
PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(Base64.decodeBase64(text));
return new String(result);
}
/**
*
*
* @param publicKeyString
* @param text
* @return
*/
public static String encryptByPublicKey(String publicKeyString, String text) throws Exception
{
X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(text.getBytes());
return Base64.encodeBase64String(result);
}
/**
* RSA
*
* @return
*/
public static RsaKeyPair generateKeyPair() throws NoSuchAlgorithmException
{
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded());
String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded());
return new RsaKeyPair(publicKeyString, privateKeyString);
}
/**
* RSA
*/
public static class RsaKeyPair
{
private final String publicKey;
private final String privateKey;
public RsaKeyPair(String publicKey, String privateKey)
{
this.publicKey = publicKey;
this.privateKey = privateKey;
}
public String getPublicKey()
{
return publicKey;
}
public String getPrivateKey()
{
return privateKey;
}
}
}

@ -77,6 +77,13 @@
<artifactId>ruoyi-system</artifactId>
</dependency>
<!-- 滑块验证码 -->
<dependency>
<groupId>com.github.anji-plus</groupId>
<artifactId>captcha-spring-boot-starter</artifactId>
<version>1.2.7</version>
</dependency>
</dependencies>
</project>

@ -17,10 +17,13 @@ import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.CookieRememberMeManager;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import com.anji.captcha.service.CaptchaService;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.security.CipherUtils;
@ -130,6 +133,10 @@ public class ShiroConfig
@Value("${shiro.rememberMe.enabled: false}")
private boolean rememberMe;
@Autowired
@Lazy
private CaptchaService captchaService;
/**
* 使Ehcache
*/
@ -288,10 +295,13 @@ public class ShiroConfig
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/ruoyi/**", "anon");
filterChainDefinitionMap.put("/captcha/captchaImage**", "anon");
filterChainDefinitionMap.put("/captcha/**", "anon");
// 退出 logout地址shiro去清除session
filterChainDefinitionMap.put("/logout", "logout");
// 不需要拦截的访问
filterChainDefinitionMap.put("/login", "anon,captchaValidate");
// 注册相关
filterChainDefinitionMap.put("/register", "anon,captchaValidate");
// 不需要拦截的访问门户
filterChainDefinitionMap.put("/home/**", "anon");
filterChainDefinitionMap.put("/home", "anon,captchaValidate");
@ -304,9 +314,6 @@ public class ShiroConfig
filterChainDefinitionMap.put("/public_view.html", "anon");
filterChainDefinitionMap.put("/profile/**", "anon");
filterChainDefinitionMap.put("/search", "anon");
// 注册相关
filterChainDefinitionMap.put("/register", "anon,captchaValidate");
// 系统权限列表
// filterChainDefinitionMap.putAll(SpringUtils.getBean(IMenuService.class).selectPermsAll());
@ -354,7 +361,7 @@ public class ShiroConfig
{
CaptchaValidateFilter captchaValidateFilter = new CaptchaValidateFilter();
captchaValidateFilter.setCaptchaEnabled(captchaEnabled);
captchaValidateFilter.setCaptchaType(captchaType);
captchaValidateFilter.setCaptchaService(captchaService);
return captchaValidateFilter;
}

@ -4,9 +4,9 @@ import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.shiro.web.filter.AccessControlFilter;
import com.google.code.kaptcha.Constants;
import com.anji.captcha.model.vo.CaptchaVO;
import com.anji.captcha.service.CaptchaService;
import com.ruoyi.common.constant.ShiroConstants;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
/**
@ -21,26 +21,17 @@ public class CaptchaValidateFilter extends AccessControlFilter
*/
private boolean captchaEnabled = true;
/**
*
*/
private String captchaType = "math";
private CaptchaService captchaService;
public void setCaptchaEnabled(boolean captchaEnabled)
{
this.captchaEnabled = captchaEnabled;
}
public void setCaptchaType(String captchaType)
{
this.captchaType = captchaType;
}
@Override
public boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception
{
request.setAttribute(ShiroConstants.CURRENT_ENABLED, captchaEnabled);
request.setAttribute(ShiroConstants.CURRENT_TYPE, captchaType);
return super.onPreHandle(request, response, mappedValue);
}
@ -54,16 +45,14 @@ public class CaptchaValidateFilter extends AccessControlFilter
{
return true;
}
return validateResponse(httpServletRequest, httpServletRequest.getParameter(ShiroConstants.CURRENT_VALIDATECODE));
return validateResponse(httpServletRequest, httpServletRequest.getParameter("__captchaVerification"));
}
public boolean validateResponse(HttpServletRequest request, String validateCode)
public boolean validateResponse(HttpServletRequest request, String captchaVerification)
{
Object obj = ShiroUtils.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
String code = String.valueOf(obj != null ? obj : "");
// 验证码清除,防止多次使用。
request.getSession().removeAttribute(Constants.KAPTCHA_SESSION_KEY);
if (StringUtils.isEmpty(validateCode) || !validateCode.equalsIgnoreCase(code))
CaptchaVO captchaVO = new CaptchaVO();
captchaVO.setCaptchaVerification(captchaVerification);
if (StringUtils.isEmpty(captchaVerification) || !captchaService.verification(captchaVO).isSuccess())
{
return false;
}
@ -76,4 +65,9 @@ public class CaptchaValidateFilter extends AccessControlFilter
request.setAttribute(ShiroConstants.CURRENT_CAPTCHA, ShiroConstants.CAPTCHA_ERROR);
return true;
}
public void setCaptchaService(CaptchaService captchaService)
{
this.captchaService = captchaService;
}
}

@ -40,6 +40,9 @@ public class SysWork extends BaseEntity {
/** 文件地址 */
private String fileName;
/** 首页图片*/
private String imgUrl;
public String getWorkId()
@ -116,6 +119,14 @@ public class SysWork extends BaseEntity {
return fileName;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
@ -131,6 +142,7 @@ public class SysWork extends BaseEntity {
.append("type", getType())
.append("fileUrl",getFileUrl())
.append("fileName",getFileName())
.append("imgUrl",getImgUrl())
.toString();
}

@ -58,4 +58,12 @@ public interface SysWorkMapper {
* @return
*/
public List<SysWork> selectSysWorkHomeList(SysWork work);
/**
*
*
* @param work
* @return
*/
public List<SysWork> selectWorkHomeUrl(SysWork work);
}

@ -59,4 +59,12 @@ public interface ISysWorkService {
*/
public List<SysWork> selectSysWorkHomeList(SysWork work);
/**
*
*
* @param work
* @return
*/
public List<SysWork> selectWorkHomeUrl(SysWork work);
}

@ -89,4 +89,17 @@ public class SysWorkServiceImpl implements ISysWorkService {
{
return workMapper.selectSysWorkHomeList(work);
}
/**
*
*
* @param work
* @return
*/
@Override
public List<SysWork> selectWorkHomeUrl(SysWork work)
{
return workMapper.selectWorkHomeUrl(work);
}
}

@ -123,13 +123,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectNoticeHomeSearch" parameterType="String" resultType="SysTitleVo">
SELECT t.notice_id as id, t.notice_title as title,t.create_time as createTime,t.type from sys_notice t where t.notice_title like concat('%', #{title}, '%') AND t.status = '0'
union all
SELECT w.work_id as id, w.work_title as title,w.create_time as createTime,w.type from sys_work w where w.work_title like concat('%', #{title}, '%')
SELECT w.work_id as id, w.work_title as title,w.create_time as createTime,w.type from sys_work w where w.work_title like concat('%', #{title}, '%') AND w.status = '0'
union all
SELECT b.business_id as id, b.business_title as title, b.create_time as createTime, b.type from sys_business b where b.business_title like concat('%', #{title}, '%')
SELECT b.business_id as id, b.business_title as title, b.create_time as createTime, b.type from sys_business b where b.business_title like concat('%', #{title}, '%') AND b.status = '0'
union all
SELECT d.trends_id as id, d.trends_title as title, d.create_time as createTime, d.type from sys_dept_trends d where d.trends_title like concat('%', #{title}, '%')
SELECT d.trends_id as id, d.trends_title as title, d.create_time as createTime, d.type from sys_dept_trends d where d.trends_title like concat('%', #{title}, '%') AND d.status = '0'
union all
SELECT s.special_id as id, s.special_title as title, s.create_time as createTime,s.type from sys_special s where s.special_title like concat('%', #{title}, '%')
SELECT s.special_id as id, s.special_title as title, s.create_time as createTime,s.type from sys_special s where s.special_title like concat('%', #{title}, '%') AND s.status = '0'
</select>
<select id="selectNoticeHomeUrl" parameterType="SysNotice" resultMap="SysNoticeResult">

@ -17,10 +17,11 @@
<result property="type" column="type" />
<result property="fileUrl" column="file_url" />
<result property="fileName" column="file_name" />
<result property="imgUrl" column="img_url" />
</resultMap>
<sql id="selectSysWorkVo">
select work_id, work_title, work_content, status, create_by, create_time, update_by, update_time, remark,type,file_url,file_name
select work_id, work_title, work_content, status, create_by, create_time, update_by, update_time, remark,type,file_url,file_name,img_url
from sys_work
</sql>
@ -56,6 +57,7 @@
<if test="type != null and createBy != ''">type,</if>
<if test="fileUrl != null and fileUrl != '' ">file_url, </if>
<if test="fileName != null and fileName != '' ">file_name, </if>
<if test="imgUrl != null and imgUrl != '' ">img_url, </if>
create_time
)values(
<if test="workId != null and workId != ''">#{workId}, </if>
@ -67,6 +69,7 @@
<if test="type != null and type != ''">#{type},</if>
<if test="fileUrl != null and fileUrl != ''">#{fileUrl}, </if>
<if test="fileName != null and fileName != ''">#{fileName}, </if>
<if test="imgUrl != null and imgUrl != ''">#{imgUrl}, </if>
now()
)
</insert>
@ -80,6 +83,7 @@
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="fileUrl != null">file_url = #{fileUrl}, </if>
<if test="fileName != null">file_name = #{fileName}, </if>
<if test="imgUrl != null">img_url = #{imgUrl}, </if>
update_time = now()
</set>
where work_id = #{workId}
@ -106,4 +110,15 @@
order by create_time desc limit 10
</select>
<select id="selectWorkHomeUrl" parameterType="SysWork" resultMap="SysWorkResult">
<include refid="selectSysWorkVo"/>
<where>
<if test="workTitle != null and workTitle != ''">
AND work_title like concat('%', #{workTitle}, '%')
</if>
AND status = '0'
</where>
order by create_time desc limit 5
</select>
</mapper>
Loading…
Cancel
Save