diff --git a/power-admin/src/main/webapp/WEB-INF/views/roleDir/roleNotDown.jsp b/power-admin/src/main/webapp/WEB-INF/views/roleDir/roleNotDown.jsp
new file mode 100644
index 0000000..fb86912
--- /dev/null
+++ b/power-admin/src/main/webapp/WEB-INF/views/roleDir/roleNotDown.jsp
@@ -0,0 +1,210 @@
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ include file="/WEB-INF/jspf/common.jspf" %>
+<%@ include file="/WEB-INF/jspf/confirmJsp.jspf" %>
+
+
+
角色管理
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<%@ include file="/WEB-INF/jspf/importExcelJsp.jspf" %>
+
+
\ No newline at end of file
diff --git a/power-admin/src/main/webapp/static/css/bootstrap-select.min.css b/power-admin/src/main/webapp/static/css/bootstrap-select.min.css
index df885d0..71ae3e0 100644
--- a/power-admin/src/main/webapp/static/css/bootstrap-select.min.css
+++ b/power-admin/src/main/webapp/static/css/bootstrap-select.min.css
@@ -3,4 +3,4 @@
*
* Copyright 2012-2019 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
- */.bootstrap-select>select.bs-select-hidden,select.bs-select-hidden,select.selectpicker{display:none!important}.bootstrap-select{width:220px\0;vertical-align:middle}.bootstrap-select>.dropdown-toggle{position:relative;width:100%;text-align:right;white-space:nowrap;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.bootstrap-select>.dropdown-toggle:after{margin-top:-1px}.bootstrap-select>.dropdown-toggle.bs-placeholder,.bootstrap-select>.dropdown-toggle.bs-placeholder:active,.bootstrap-select>.dropdown-toggle.bs-placeholder:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder:hover{color:#999}.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:hover{color:rgba(255,255,255,.5)}.bootstrap-select>select{position:absolute!important;bottom:0;left:50%;display:block!important;width:.5px!important;height:100%!important;padding:0!important;opacity:0!important;border:none;z-index:0!important}.bootstrap-select>select.mobile-device{top:0;left:0;display:block!important;width:100%!important;z-index:2!important}.bootstrap-select.is-invalid .dropdown-toggle,.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle,.was-validated .bootstrap-select .selectpicker:invalid+.dropdown-toggle{border-color:#b94a48}.bootstrap-select.is-valid .dropdown-toggle,.was-validated .bootstrap-select .selectpicker:valid+.dropdown-toggle{border-color:#28a745}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:250px}.bootstrap-select .dropdown-toggle:focus,.bootstrap-select>select.mobile-device:focus+.dropdown-toggle{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none;height:auto}:not(.input-group)>.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.form-control.input-group-btn{float:none;z-index:auto}.form-inline .bootstrap-select,.form-inline .bootstrap-select.form-control:not([class*=col-]){width:auto}.bootstrap-select:not(.input-group-btn),.bootstrap-select[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.dropdown-menu-right,.bootstrap-select[class*=col-].dropdown-menu-right,.row .bootstrap-select[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select,.form-horizontal .bootstrap-select,.form-inline .bootstrap-select{margin-bottom:0}.form-group-lg .bootstrap-select.form-control,.form-group-sm .bootstrap-select.form-control{padding:0}.form-group-lg .bootstrap-select.form-control .dropdown-toggle,.form-group-sm .bootstrap-select.form-control .dropdown-toggle{height:100%;font-size:inherit;line-height:inherit;border-radius:inherit}.bootstrap-select.form-control-lg .dropdown-toggle,.bootstrap-select.form-control-sm .dropdown-toggle{font-size:inherit;line-height:inherit;border-radius:inherit}.bootstrap-select.form-control-sm .dropdown-toggle{padding:.25rem .5rem}.bootstrap-select.form-control-lg .dropdown-toggle{padding:.5rem 1rem}.form-inline .bootstrap-select .form-control{width:100%}.bootstrap-select.disabled,.bootstrap-select>.disabled{cursor:not-allowed}.bootstrap-select.disabled:focus,.bootstrap-select>.disabled:focus{outline:0!important}.bootstrap-select.bs-container{position:absolute;top:0;left:0;height:0!important;padding:0!important}.bootstrap-select.bs-container .dropdown-menu{z-index:1060}.bootstrap-select .dropdown-toggle .filter-option{position:static;top:0;left:0;float:left;height:18px;width:100%;text-align:left;overflow:hidden;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.bs3.bootstrap-select .dropdown-toggle .filter-option{padding-right:inherit}.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option{position:absolute;padding-top:inherit;padding-bottom:inherit;padding-left:inherit;float:none}.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option .filter-option-inner{padding-right:inherit}.bootstrap-select .dropdown-toggle .filter-option-inner-inner{overflow:hidden}.bootstrap-select .dropdown-toggle .filter-expand{width:0!important;float:left;opacity:0!important;overflow:hidden}.bootstrap-select .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.input-group .bootstrap-select.form-control .dropdown-toggle{border-radius:inherit}.bootstrap-select[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select .dropdown-menu{min-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select .dropdown-menu>.inner:focus{outline:0!important}.bootstrap-select .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select .dropdown-menu li{position:relative}.bootstrap-select .dropdown-menu li.active small{color:rgba(255,255,255,.5)!important}.bootstrap-select .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select .dropdown-menu li a span.check-mark{display:none}.bootstrap-select .dropdown-menu li a span.text{display:inline-block}.bootstrap-select .dropdown-menu li small{padding-left:.5em}.bootstrap-select .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.bootstrap-select.fit-width .dropdown-toggle .filter-option{position:static;display:inline;padding:0}.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner,.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner{display:inline}.bootstrap-select.fit-width .dropdown-toggle .bs-caret:before{content:'\00a0'}.bootstrap-select.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark{position:absolute;display:inline-block;right:15px;top:5px}.bootstrap-select.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select .bs-ok-default:after{content:'';display:block;width:.5em;height:1em;border-style:solid;border-width:0 .26em .26em 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before{bottom:auto;top:-4px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after{bottom:auto;top:-4px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle .filter-option:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle .filter-option:before,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle .filter-option:after,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle .filter-option:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%;float:none}
\ No newline at end of file
+ */.bootstrap-select>select.bs-select-hidden,select.bs-select-hidden,select.selectpicker{display:none!important}.bootstrap-select{width:220px\0;vertical-align:middle}.bootstrap-select>.dropdown-toggle{position:relative;width:100%;text-align:right;white-space:nowrap;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.bootstrap-select>.dropdown-toggle:after{margin-top:-1px}.bootstrap-select>.dropdown-toggle.bs-placeholder,.bootstrap-select>.dropdown-toggle.bs-placeholder:active,.bootstrap-select>.dropdown-toggle.bs-placeholder:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder:hover{color:#999}.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-danger:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-dark:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-info:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-primary:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary:hover,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:active,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-success:hover{color:rgba(255,255,255,.5)}.bootstrap-select>select{position:absolute!important;bottom:0;left:50%;display:block!important;width:.5px!important;height:100%!important;padding:0!important;opacity:0!important;border:none;z-index:0!important}.bootstrap-select>select.mobile-device{top:0;left:0;display:block!important;width:100%!important;z-index:2!important}.bootstrap-select.is-invalid .dropdown-toggle,.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle,.was-validated .bootstrap-select .selectpicker:invalid+.dropdown-toggle{border-color:#b94a48}.bootstrap-select.is-valid .dropdown-toggle,.was-validated .bootstrap-select .selectpicker:valid+.dropdown-toggle{border-color:#28a745}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:250px}.bootstrap-select .dropdown-toggle:focus,.bootstrap-select>select.mobile-device:focus+.dropdown-toggle{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none;height:auto}:not(.input-group)>.bootstrap-select.form-control:not([class*=col-]){/*width:100%*/}.bootstrap-select.form-control.input-group-btn{float:none;z-index:auto}.form-inline .bootstrap-select,.form-inline .bootstrap-select.form-control:not([class*=col-]){width:auto}.bootstrap-select:not(.input-group-btn),.bootstrap-select[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.dropdown-menu-right,.bootstrap-select[class*=col-].dropdown-menu-right,.row .bootstrap-select[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select,.form-horizontal .bootstrap-select,.form-inline .bootstrap-select{margin-bottom:0}.form-group-lg .bootstrap-select.form-control,.form-group-sm .bootstrap-select.form-control{padding:0}.form-group-lg .bootstrap-select.form-control .dropdown-toggle,.form-group-sm .bootstrap-select.form-control .dropdown-toggle{height:100%;font-size:inherit;line-height:inherit;border-radius:inherit}.bootstrap-select.form-control-lg .dropdown-toggle,.bootstrap-select.form-control-sm .dropdown-toggle{font-size:inherit;line-height:inherit;border-radius:inherit}.bootstrap-select.form-control-sm .dropdown-toggle{padding:.25rem .5rem}.bootstrap-select.form-control-lg .dropdown-toggle{padding:.5rem 1rem}.form-inline .bootstrap-select .form-control{width:100%}.bootstrap-select.disabled,.bootstrap-select>.disabled{cursor:not-allowed}.bootstrap-select.disabled:focus,.bootstrap-select>.disabled:focus{outline:0!important}.bootstrap-select.bs-container{position:absolute;top:0;left:0;height:0!important;padding:0!important}.bootstrap-select.bs-container .dropdown-menu{z-index:1060}.bootstrap-select .dropdown-toggle .filter-option{position:static;top:0;left:0;float:left;height:18px;width:100%;text-align:left;overflow:hidden;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.bs3.bootstrap-select .dropdown-toggle .filter-option{padding-right:inherit}.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option{position:absolute;padding-top:inherit;padding-bottom:inherit;padding-left:inherit;float:none}.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option .filter-option-inner{padding-right:inherit}.bootstrap-select .dropdown-toggle .filter-option-inner-inner{overflow:hidden}.bootstrap-select .dropdown-toggle .filter-expand{width:0!important;float:left;opacity:0!important;overflow:hidden}.bootstrap-select .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.input-group .bootstrap-select.form-control .dropdown-toggle{border-radius:inherit}.bootstrap-select[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select .dropdown-menu{min-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select .dropdown-menu>.inner:focus{outline:0!important}.bootstrap-select .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select .dropdown-menu li{position:relative}.bootstrap-select .dropdown-menu li.active small{color:rgba(255,255,255,.5)!important}.bootstrap-select .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select .dropdown-menu li a span.check-mark{display:none}.bootstrap-select .dropdown-menu li a span.text{display:inline-block}.bootstrap-select .dropdown-menu li small{padding-left:.5em}.bootstrap-select .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.bootstrap-select.fit-width .dropdown-toggle .filter-option{position:static;display:inline;padding:0}.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner,.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner{display:inline}.bootstrap-select.fit-width .dropdown-toggle .bs-caret:before{content:'\00a0'}.bootstrap-select.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark{position:absolute;display:inline-block;right:15px;top:5px}.bootstrap-select.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select .bs-ok-default:after{content:'';display:block;width:.5em;height:1em;border-style:solid;border-width:0 .26em .26em 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before{bottom:auto;top:-4px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after{bottom:auto;top:-4px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle .filter-option:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle .filter-option:before,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle .filter-option:after,.bootstrap-select.show-menu-arrow.show>.dropdown-toggle .filter-option:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%;float:none}
\ No newline at end of file
diff --git a/power-admin/src/main/webapp/static/js/noticePage.js b/power-admin/src/main/webapp/static/js/noticePage.js
index a0eef72..aa0ad0a 100644
--- a/power-admin/src/main/webapp/static/js/noticePage.js
+++ b/power-admin/src/main/webapp/static/js/noticePage.js
@@ -183,6 +183,10 @@ function delNoticeType(){
//增加通知按钮
function addNotice(){
$("#noticeReceive").empty();
+ //移除禁止修改
+ $("#parentId").removeAttr("disabled");
+ $("#noticeReceive").removeAttr("disabled");
+ $("#noticeReceive").selectpicker("refresh");
$("#noticeId1").val("");
$("#form2")[0].reset();
$("#readFlag").val("");
@@ -199,7 +203,7 @@ $("#parentId").change(function(){
dataType:'json',
success:function(data){
if(data.code == 100){
- var html = '
';
+ var html = '';
if(data.extend != ''){
var userName = $("#userName").val();
for (var i = 0; i < data.extend.userList.length; i++) {
@@ -209,6 +213,7 @@ $("#parentId").change(function(){
}
}
$("#noticeReceive").append(html);
+ $("#noticeReceive").selectpicker('refresh');
}
}
})
@@ -219,16 +224,25 @@ $("#notice_submit").click(function(){
var noticeTitle = $("#noticeTitle").val();
var parentId = $("#parentId").val();
var noticeContent = $("#noticeContent").val();
+ var noticeReceive = $("#noticeReceive").val();
if(noticeTitle == ''){
toastr.warning("通知主题不能为空!");
+ $("#noticeTitle").focus();
}else{
if(parentId == ''){
toastr.warning("通知类型不能为空!");
+ $("#parentId").focus();
}else{
if(noticeContent == ''){
toastr.warning("通知内容不能为空!");
+ $("#noticeContent").focus();
}else{
- updateNotice();
+ if(noticeReceive == ''){
+ toastr.warning("接收人不能为空!");
+ $("#noticeReceive").focus();
+ }else{
+ updateNotice();
+ }
}
}
}
@@ -600,6 +614,9 @@ function editFlag(noticeId){
}
//编辑通知
function edit(noticeId){
+ //禁止修改
+ $("#parentId").prop("disabled","disabled");
+ $("#noticeReceive").prop("disabled","disabled");
$.ajax({
type:'get',
url:path+'/notice/selectNoticeByNoticeId',
@@ -620,16 +637,26 @@ function edit(noticeId){
async:false,
success:function(data){
if(data.code == 100){
- var html = '
';
+ var html = '';
if(data.extend != ''){
var userName = $("#userName").val();
for (var i = 0; i < data.extend.userList.length; i++) {
if (userName != data.extend.userList[i].userName) {
- html += '
';
+ //定义是否匹配选中
+ var flag = false;
+ if(notice.noticeReceive == data.extend.userList[i].userId){
+ flag = true;
+ }
+ if(flag){
+ html += '
';
+ }else{
+ html += '
';
+ }
}
}
}
$("#noticeReceive").append(html);
+ $("#noticeReceive").selectpicker('refresh');
}
}
})
diff --git a/power-admin/src/main/webapp/static/js/roleNotDown.js b/power-admin/src/main/webapp/static/js/roleNotDown.js
new file mode 100644
index 0000000..ba3d4c4
--- /dev/null
+++ b/power-admin/src/main/webapp/static/js/roleNotDown.js
@@ -0,0 +1,293 @@
+/**
+ * Created by ly on 2019/4/25.
+ */
+var pageNumber = 1;
+var form = '';
+$(function(){
+ $('#myModal').modal('hide');
+ //先销毁表格
+ $('#bootstrapTable').bootstrapTable({
+ //表格高度
+ height: getHeight(),
+ method : 'get',
+ url : path+ "/role/pageList",//请求路径
+ striped : true, //是否显示行间隔色
+ pageNumber : 1, //初始化加载第一页
+ pagination : true,//是否分页
+ sidePagination : 'server',//server:服务器端分页|client:前端分页
+ pageSize : 10,//单页记录数
+ pageList : [ 5, 10, 20, 30 ],//可选择单页记录数
+ cache: false,
+ paginationPreText : '上一页',
+ paginationNextText : '下一页',
+ queryParams : function(params) {//上传服务器的参数
+ var temp = {//如果是在服务器端实现分页,limit、offset这两个参数是必须的
+ limit : params.limit, // 每页显示数量
+ offset : params.offset, // SQL语句起始索引
+ page : (params.offset / params.limit) + 1, //当前页码
+ roleId:$("#role_id").val(),
+ roleName:$("#role_name").val(),
+ effective : $("#effective option:selected").val(),
+ creater:$("#creater").val(),
+ };
+ return temp;
+ },
+ columns : [{
+ checkbox:true
+ },
+ {
+ title:'序号',
+ field:'no',
+ formatter: function (value, row, index) {
+ //获取每页显示的数量
+ var pageSize = $('#bootstrapTable').bootstrapTable('getOptions').pageSize;
+ //获取当前是第几页
+ if(pageNumber == 1){
+ pageNumber = $('#bootstrapTable').bootstrapTable('getOptions').pageNumber;
+ }
+ //返回序号,注意index是从0开始的,所以要加上1
+ return pageSize * (pageNumber - 1) + index + 1;
+ }
+ },
+ {
+ title:'角色名',
+ field:'roleName',
+ },
+ {
+ title:'备注',
+ field:'remark',
+ formatter:function (value,row,index) {
+ if(value ==null){
+ return "";
+ }else{
+ return value;
+ }
+ }
+ },
+ {
+ title:'是否有效',
+ field:'effective',
+ formatter: function (value, row, index) {
+ if(value ==1){
+ return '是'
+ }else if(value ==0){
+ return '否'
+ }
+ }
+ },
+ {
+ title:'创建时间',
+ field:'createDate',
+ },
+ {
+ title:'创建人',
+ field:'creater',
+ },
+
+ {
+ title:'操作',
+ field:'roleId', formatter: function(value,row,index){
+ var editanddrop = '';
+ if(row.isUpdate == 1){
+ editanddrop += '
';
+ }
+ if(row.isDelete == 1){
+ editanddrop += '
';
+ }
+ return editanddrop;
+ }
+ }
+ ],
+ onLoadSuccess: function(){ //加载成功时执行
+ $(".page-list").show();
+ $("th").css({'text-align':'center','vertical-align':'middle'})
+ $("td").css({'text-align':'center','vertical-align':'middle'})
+ },
+ //监听分页点击事件
+ onPageChange: function(num, type) {
+ pageNumber = num;
+ },
+ //选中单个复选框
+ onCheck:function(row){
+ var checks = $("#checks").val();
+ $("#checks").val(checks+=row.roleId + ",");
+ },
+ //取消单个复选框
+ onUncheck:function(row){
+ var checks = $("#checks").val();
+ checks = checks.replace(row.roleId + ",","");
+ $("#checks").val(checks);
+ },
+ //全选
+ onCheckAll:function(rows){
+ $("#checks").val("");
+ var checks = '';
+ for(var i=0;i
1.0-SNAPSHOT
4.0.0
-
power-dao
-
-
UTF-8
UTF-8
-
-
diff --git a/power-dao/src/main/java/com/manage/dao/Power_NoticeMapper.java b/power-dao/src/main/java/com/manage/dao/Power_NoticeMapper.java
index 7eb600c..93d8b33 100644
--- a/power-dao/src/main/java/com/manage/dao/Power_NoticeMapper.java
+++ b/power-dao/src/main/java/com/manage/dao/Power_NoticeMapper.java
@@ -42,4 +42,6 @@ public interface Power_NoticeMapper {
* 按用户id查询未读通知数量
* */
int getUnReadCount(@Param("userId")Integer userId);
+
+ void simpleInsert(List list);
}
\ No newline at end of file
diff --git a/power-dao/src/main/resources/mapper/Power_NoticeMapper.xml b/power-dao/src/main/resources/mapper/Power_NoticeMapper.xml
index fcc1900..a184a41 100644
--- a/power-dao/src/main/resources/mapper/Power_NoticeMapper.xml
+++ b/power-dao/src/main/resources/mapper/Power_NoticeMapper.xml
@@ -1,36 +1,36 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
notice_id, sys_id, notice_type_flag, notice_type_name, notice_title, notice_content,
notice_send, notice_date, notice_receive, effective, read_flag, parent_id, remark
-
-
+
+
delete from power_notice
where notice_id = #{noticeId,jdbcType=INTEGER}
-
+
insert into power_notice (notice_id, sys_id, notice_type_flag,
notice_type_name, notice_title, notice_content,
notice_send, notice_date, notice_receive,
@@ -42,134 +42,134 @@
#{effective,jdbcType=INTEGER}, #{readFlag,jdbcType=INTEGER}, #{parentId,jdbcType=INTEGER},
#{remark,jdbcType=VARCHAR})
-
- insert into power_notice
-
-
- notice_id,
-
-
- sys_id,
-
-
- notice_type_flag,
-
-
- notice_type_name,
-
-
- notice_title,
-
-
- notice_content,
-
-
- notice_send,
-
-
- notice_date,
-
-
- notice_receive,
-
-
- effective,
-
-
- read_flag,
-
-
- parent_id,
-
-
- remark,
-
-
-
-
- #{noticeId,jdbcType=INTEGER},
-
-
- #{sysId,jdbcType=INTEGER},
-
-
- #{noticeTypeFlag,jdbcType=VARCHAR},
-
-
- #{noticeTypeName,jdbcType=VARCHAR},
-
-
- #{noticeTitle,jdbcType=VARCHAR},
-
-
- #{noticeContent,jdbcType=VARCHAR},
-
-
- #{noticeSend,jdbcType=VARCHAR},
-
-
- #{noticeDate,jdbcType=CHAR},
-
-
- #{noticeReceive,jdbcType=VARCHAR},
-
-
- #{effective,jdbcType=INTEGER},
-
-
- #{readFlag,jdbcType=INTEGER},
-
-
- #{parentId,jdbcType=INTEGER},
-
-
- #{remark,jdbcType=VARCHAR},
-
-
-
-
- update power_notice
-
-
- sys_id = #{sysId,jdbcType=INTEGER},
-
-
- notice_type_flag = #{noticeTypeFlag,jdbcType=VARCHAR},
-
-
- notice_type_name = #{noticeTypeName,jdbcType=VARCHAR},
-
-
- notice_title = #{noticeTitle,jdbcType=VARCHAR},
-
-
- notice_content = #{noticeContent,jdbcType=VARCHAR},
-
-
- notice_send = #{noticeSend,jdbcType=VARCHAR},
-
-
- notice_date = #{noticeDate,jdbcType=CHAR},
-
-
- notice_receive = #{noticeReceive,jdbcType=VARCHAR},
-
-
- effective = #{effective,jdbcType=INTEGER},
-
-
- read_flag = #{readFlag,jdbcType=INTEGER},
-
-
- parent_id = #{parentId,jdbcType=INTEGER},
-
-
- remark = #{remark,jdbcType=VARCHAR},
-
-
- where notice_id = #{noticeId,jdbcType=INTEGER}
-
-
+
+ insert into power_notice
+
+
+ notice_id,
+
+
+ sys_id,
+
+
+ notice_type_flag,
+
+
+ notice_type_name,
+
+
+ notice_title,
+
+
+ notice_content,
+
+
+ notice_send,
+
+
+ notice_date,
+
+
+ notice_receive,
+
+
+ effective,
+
+
+ read_flag,
+
+
+ parent_id,
+
+
+ remark,
+
+
+
+
+ #{noticeId,jdbcType=INTEGER},
+
+
+ #{sysId,jdbcType=INTEGER},
+
+
+ #{noticeTypeFlag,jdbcType=VARCHAR},
+
+
+ #{noticeTypeName,jdbcType=VARCHAR},
+
+
+ #{noticeTitle,jdbcType=VARCHAR},
+
+
+ #{noticeContent,jdbcType=VARCHAR},
+
+
+ #{noticeSend,jdbcType=VARCHAR},
+
+
+ #{noticeDate,jdbcType=CHAR},
+
+
+ #{noticeReceive,jdbcType=VARCHAR},
+
+
+ #{effective,jdbcType=INTEGER},
+
+
+ #{readFlag,jdbcType=INTEGER},
+
+
+ #{parentId,jdbcType=INTEGER},
+
+
+ #{remark,jdbcType=VARCHAR},
+
+
+
+
+ update power_notice
+
+
+ sys_id = #{sysId,jdbcType=INTEGER},
+
+
+ notice_type_flag = #{noticeTypeFlag,jdbcType=VARCHAR},
+
+
+ notice_type_name = #{noticeTypeName,jdbcType=VARCHAR},
+
+
+ notice_title = #{noticeTitle,jdbcType=VARCHAR},
+
+
+ notice_content = #{noticeContent,jdbcType=VARCHAR},
+
+
+ notice_send = #{noticeSend,jdbcType=VARCHAR},
+
+
+ notice_date = #{noticeDate,jdbcType=CHAR},
+
+
+ notice_receive = #{noticeReceive,jdbcType=VARCHAR},
+
+
+ effective = #{effective,jdbcType=INTEGER},
+
+
+ read_flag = #{readFlag,jdbcType=INTEGER},
+
+
+ parent_id = #{parentId,jdbcType=INTEGER},
+
+
+ remark = #{remark,jdbcType=VARCHAR},
+
+
+ where notice_id = #{noticeId,jdbcType=INTEGER}
+
+
update power_notice
set sys_id = #{sysId,jdbcType=INTEGER},
notice_type_flag = #{noticeTypeFlag,jdbcType=VARCHAR},
@@ -185,242 +185,242 @@
remark = #{remark,jdbcType=VARCHAR}
where notice_id = #{noticeId,jdbcType=INTEGER}
-
-
\ No newline at end of file
diff --git a/power-dao/src/main/resources/mapper/Power_Sys_DictMapper.xml b/power-dao/src/main/resources/mapper/Power_Sys_DictMapper.xml
index 768c3be..76f876b 100644
--- a/power-dao/src/main/resources/mapper/Power_Sys_DictMapper.xml
+++ b/power-dao/src/main/resources/mapper/Power_Sys_DictMapper.xml
@@ -711,15 +711,6 @@ on FIND_IN_SET(dict.deptIds,power_user.dept_id)
AND power_user.role_id != #{roleId}
-
-
- SELECT
- dept_id
- FROM
- power_sys_dict
- WHERE
- sys_flag = #{sysFlag}
-
SELECT
@@ -780,30 +771,6 @@ on FIND_IN_SET(dict.deptIds,power_user.dept_id)
AND dept_id IN (${deptIds})
-
-
- SELECT
- sys_flag,
- sys_name
- FROM
- power_sys_dict
- WHERE
- sys_flag IS NOT NULL
- GROUP BY
- sys_flag,
- sys_name
-
-
-
- SELECT
- power_sys_dict.sys_type,
- power_sys_dict.parent_id
- FROM
- power_notice
- LEFT JOIN power_sys_dict ON power_notice.notice_type_flag = power_sys_dict.sys_flag
- WHERE
- notice_id = ${noticeId}
-
SELECT
@@ -815,15 +782,6 @@ on FIND_IN_SET(dict.deptIds,power_user.dept_id)
AND
sys_name = #{sysName}
-
-
- SELECT
- parent_id
- FROM
- power_sys_dict
- WHERE
- sys_flag = #{sysFlag}
-
SELECT
diff --git a/power-service/src/main/java/com/manage/service/Power_RoleService.java b/power-service/src/main/java/com/manage/service/Power_RoleService.java
index 3822af7..d5cdb4f 100644
--- a/power-service/src/main/java/com/manage/service/Power_RoleService.java
+++ b/power-service/src/main/java/com/manage/service/Power_RoleService.java
@@ -46,6 +46,13 @@ public interface Power_RoleService {
* */
void export(Power_RoleVo powerRole,HttpServletResponse response,HttpServletRequest request)throws Exception;
+ /**
+ * @Date 2019-4-25
+ * @Author ly
+ * @Description 导出Excel表
+ * */
+ void exportNotDown(Power_RoleVo powerRole,HttpServletResponse response,HttpServletRequest request)throws Exception;
+
/**
* @Date 2019-4-30
* @Author ly
diff --git a/power-service/src/main/java/com/manage/service/ipml/Power_NoticeServiceImpl.java b/power-service/src/main/java/com/manage/service/ipml/Power_NoticeServiceImpl.java
index 0f52e34..d488d75 100644
--- a/power-service/src/main/java/com/manage/service/ipml/Power_NoticeServiceImpl.java
+++ b/power-service/src/main/java/com/manage/service/ipml/Power_NoticeServiceImpl.java
@@ -134,15 +134,30 @@ public class Power_NoticeServiceImpl{
powerNotice.setEffective(1);
if(null == powerNotice.getNoticeId()){
//添加
- if(StringUtils.isBlank(powerNotice.getNoticeTypeFlag())){
- powerNotice.setNoticeSend(user.getUserId().toString());
- SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- powerNotice.setNoticeDate(fmt.format(new Date()));
- powerNotice.setReadFlag(0);
+ String noticeReceive = powerNotice.getNoticeReceive();
+ if(StringUtils.isNotBlank(noticeReceive)){
+ List simpleInsert = new ArrayList<>();
+ String[] noticeReceives = noticeReceive.split(",");
+ for(String noticeReceiveStr : noticeReceives) {
+ //判断是否包含所有,
+ if (StringUtils.isBlank(powerNotice.getNoticeTypeFlag())) {
+ powerNotice.setNoticeSend(user.getUserId().toString());
+ SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ powerNotice.setNoticeDate(fmt.format(new Date()));
+ powerNotice.setReadFlag(0);
+ powerNotice.setNoticeReceive(noticeReceiveStr);
+ }
+ //添加进记录
+ Power_Notice vo = new Power_Notice();
+ BeanUtils.copyProperties(powerNotice,vo);
+ simpleInsert.add(vo);
+ }
+ noticeMapper.simpleInsert(simpleInsert);
+ simpleInsert.forEach(vos ->{
+ //发送通知
+ sendRecive(vos,user,vos.getNoticeTitle(),vos.getNoticeContent());
+ });
}
- noticeMapper.insert(powerNotice);
- //发送通知
- sendRecive(powerNotice,user,powerNotice.getNoticeTitle(),powerNotice.getNoticeContent());
}else{
//修改
noticeMapper.updateByPrimaryKeySelective(powerNotice);
@@ -165,7 +180,7 @@ public class Power_NoticeServiceImpl{
//all 该系统全部,不包括自己
//系统标识是power则该医院全部,否则该系统全部
//查询该用户医院id
- Integer hospitalId = null;
+ /*Integer hospitalId = null;
if(null != user.getUserId() && user.getRoleId() != 0){
hospitalId = userMapper.selectHospitalIdByUserId(user.getUserId());
}
@@ -202,7 +217,7 @@ public class Power_NoticeServiceImpl{
}
}
}
- }
+ }*/
}
}
}
diff --git a/power-service/src/main/java/com/manage/service/ipml/Power_RoleServiceImpl.java b/power-service/src/main/java/com/manage/service/ipml/Power_RoleServiceImpl.java
index 39d2581..5cb2acd 100644
--- a/power-service/src/main/java/com/manage/service/ipml/Power_RoleServiceImpl.java
+++ b/power-service/src/main/java/com/manage/service/ipml/Power_RoleServiceImpl.java
@@ -143,6 +143,30 @@ public class Power_RoleServiceImpl implements Power_RoleService {
//导出excel的操作
exportExcelUtil.expordExcel(tableThNames,fieldCns,roleList,fileName,response);
}
+ @Override
+ public void exportNotDown(Power_RoleVo powerRole,HttpServletResponse response,HttpServletRequest request) throws Exception {
+ Power_User powerUser1 =(Power_User) request.getSession().getAttribute("CURRENT_USER");
+ List roleList = powerRoleMapper.findSomeByMore(powerRole, powerUser1.getRoleId(),powerUser1.getUserId());
+ if(null != roleList && !roleList.isEmpty()){
+ for (int i = 0; i < roleList.size(); i++) {
+ if(roleList.get(i).getEffective() != null){
+ if(roleList.get(i).getEffective() == 1){
+ roleList.get(i).setEffectiveCn("是");
+ }else{
+ roleList.get(i).setEffectiveCn("否");
+ }
+ }
+ }
+ }
+ String tableThNames = "角色名称,备注,是否有效,创建时间,创建人";
+ String fieldCns = "roleName,remark,effectiveCn,createDate,creater";
+ //文件名
+ String fileName = "角色列表(" + new SimpleDateFormat("yyyy_MM_dd HH_mm_ss").format(new Date()) + ").xls";
+ //ExportExcelUtil
+ com.manage.util.ExportExcelUtil exportExcelUtil = new com.manage.util.ExportExcelUtil();
+ //导出excel的操作
+ exportExcelUtil.expordExcel(tableThNames,fieldCns,roleList,fileName,response);
+ }
@Override
public List selectList() {