问题提出:
实现方式:将专业和年级用"@23@"的形式存数据库,判断like则有权限
CREATE TABLE `notice` (
`notice_id` INT(11) NOT NULL AUTO_INCREMENT,
`content` LONGTEXT NULL COMMENT '内容' COLLATE 'utf8_bin',
`create_date` DATETIME NOT NULL COMMENT '创建时间',
`user_id` INT(11) NOT NULL COMMENT '创建人主键',
`user_name` VARCHAR(50) NOT NULL COMMENT '创建人名字' COLLATE 'utf8_bin',
`publish_date` DATETIME NOT NULL COMMENT '发布时间',
`title` VARCHAR(300) NOT NULL COMMENT '标题' COLLATE 'utf8_bin',
`visible_orgs` VARCHAR(300) NULL DEFAULT NULL COMMENT '可见机构' COLLATE 'utf8_bin',
`visible_type` SMALLINT(6) NOT NULL COMMENT '1:按机构选择(机构下的教师和学生都可见) 2年级下对应专业学生可见(毕业离校通知和其他通知处理方式不一致)',
`visible_grades` VARCHAR(300) NULL DEFAULT NULL COMMENT '添加年级作为通知权限控制,保存年级的id,@隔开' COLLATE 'utf8_bin',
`type_id` INT(11) NOT NULL COMMENT '通知类型',
`pk_id` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`notice_id`)
)
COLLATE='utf8_bin'
ENGINE=InnoDB
SELECT DISTINCT N.notice_id,N.title,N.publish_date,N.user_id,N.user_name,N.visible_type,N.visible_orgs, IFNULL(NR.isread,0) AS isread
FROM (
SELECT *
FROM commonuser.notice
WHERE type_id= 14 AND publish_date >= '2014-09-01 00:00:00')N
LEFT JOIN commonuser.notice_user_record NR ON (NR.notice_id=N.notice_id AND NR.info_id = 738)
WHERE (N.visible_type=1 AND N.visible_orgs LIKE '%@21@%') -- 组织机构
OR (N.visible_type = 2 AND N.visible_orgs LIKE '%@25@%' AND N.visible_grades LIKE '%@7@%') -- 年级和专业
ORDER BY publish_date DESC
页面:
<input type="hidden" id="visibleOrgs_in" value="${notice.visibleOrgs}" />
<input type="hidden" id="visibleGrades_in" value="${notice.visibleGrades}" />
<pre name="code" class="html">
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="limit" uri="http://www.yineng.com/limit"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
%>
<div style="margin-left: 120px;">
<table cellpadding="8" cellspacing="8">
<tr>
<c:forEach var="x" step="1" items="${requestScope.gradeList}" varStatus="status">
<td>
<td valign="top"><input type="checkbox" name="grade_ids"
value="${x.gradeId }" onclick="allSel_specity(this)" />
</td>
<td valign="top">
${x.gradeName }
</td>
</td>
</c:forEach>
</tr>
</table>
<table cellpadding="8" cellspacing="8">
<tr>
<c:forEach var="x" step="1" items="${requestScope.voList}" varStatus="status">
<td valign="top">
<input type="checkbox" name="specSubiect_ids" value="${x.speSubjectId }" onclick="allSel_speSubject(this,'${x.speSubjectId }')" />
</td>
<td valign="top">
${x.speSubjectName }</br>
<c:forEach var="y" step="1" items="${x.specityVos}" varStatus="sta">
<input id="specityIds${y.specityId }" type="checkbox" name="specityIds${x.speSubjectId }" value="${y.specityId }" /> ${y.specityName }</br>
</c:forEach>
</td>
<c:if test="${(status.index+1) % 5 == 0 }"> 每5个则换行
</tr>
<tr>
<td height="10px;"></td>
</tr>
<tr>
</c:if>
</c:forEach>
</tr>
</table>
</div>
<script type="text/javascript">
$(function(){
//初始化年级
var visibleType=$("input[type=radio][name=visibleType]:checked").val();
if(visibleGrades != undefined && visibleGrades != null && visibleGrades != ""){
$("input[name ='grade_ids']").each(function(){
if(("@"+$(this).val()+"@").indexOf(visibleGrades) != -1){
$(this).attr("checked",'true');// 初始化已经选择的选项
}
});
}
var visibleType=$("input[type=radio][name=visibleType]:checked").val();
if(visibleOrgs != undefined && visibleOrgs != null && visibleOrgs != ""){
visibleOrgs = visibleOrgs.substring(1,visibleOrgs.length-1);
var orgs = visibleOrgs.split("@");
for(var i = 0;i<orgs.length;i++){
var ch_id = "specityIds" + orgs[i];
$("#" + ch_id).attr("checked",'true');// 初始化已经选择的选项
}
}
load_button_css(); //加载btn样式
});
</script>
主要的js方法
function allSel_speSubject(obj,id){
var ischeck = obj.checked;
var ch_name = "specityIds" + id;
if(ischeck){
$("[name="+ch_name+"]").attr("checked",'true');//全选
} else{
$("[name="+ch_name+"]").removeAttr("checked");//取消全选
}
}
function allSel_specity(obj){
var ischeck = obj.checked;
if(ischeck){
$("[name=specSubiect_ids]").attr("checked",'true');//全选
$("input[name^='specityIds']").attr("checked",'true');//全选
} else{
if($("input[type=checkbox][name=grade_ids]:checked").length == 0){
$("[name=specSubiect_ids]").removeAttr("checked");//取消全选
$("input[name^='specityIds']").removeAttr("checked");//取消全选
}
}
}
//保存通知的可见范围
saveOrUpdateVisiblePerson = function(){
var visibleType=$("input[type=radio][name=visibleType]:checked").val();//可见类型 是机构还是年级+专业
var orgIds = ''; //组织机构
var specityIds = '';//专业的选择id
var gradeIds='';//年级的选择项id
var s = '@';
if(visibleType ==2){
$("input[name *='grade_ids']:checked").each(function(){ //获取选择年级
if($(this).attr('checked')){
s += $(this).attr('value')+"@";
}
});
if(s.length <= 1){
$.ligerDialog.alert('请选择年级!','信息', 'error');
return;
}
gradeIds = s; //选择的年级
s = '@';
$("input[name *='specityIds']:checked").each(function(){ //获取选择专业
if($(this).attr('checked')){
s += $(this).attr('value')+"@";
}
});
if(s.length <= 1){
$.ligerDialog.alert('请选择专业!','信息', 'error');
return;
}
specityIds = s;//选择的专业
}else{
$("input[name *='org_ids']:checked").each(function(){ //获取选择的组织机构
if($(this).attr('checked')){
s += $(this).attr('value')+"@";
}
});
if(s.length <= 1){
$.ligerDialog.alert('请选择组织机构!','信息', 'error');
return;
}
orgIds = s;
}
$.ligerDialog.waitting('请稍候...');
$.ajax({
type: "POST",
url: '<%=path%>/notice/notice!saveOrUpdateVisiblePerson.action',
dataType:"html",
data:{
'noticeId':noticeId,
'visibleType':visibleType,
'orgIds':orgIds,
'gradeIds':gradeIds,
'specityIds':specityIds
},
success: function(response){
$.ligerDialog.closeWaitting();
backIndexPage();
$.ligerDialog.alert('操作成功!','信息', 'success');
},
error:function(){
$.ligerDialog.closeWaitting();
$.ligerDialog.alert('加载失败!','信息', 'error');
}
});
};