pull/3/head
rekoe 2016-03-25 18:35:57 +08:00
parent d8c7cda742
commit e74f71a78c
11 changed files with 343 additions and 22 deletions

View File

@ -2,10 +2,11 @@ package com.rekoe.domain;
import java.io.Serializable;
import org.nutz.dao.entity.annotation.Comment;
import org.nutz.dao.entity.annotation.Column;
import org.nutz.dao.entity.annotation.Index;
import org.nutz.dao.entity.annotation.Name;
import org.nutz.dao.entity.annotation.PK;
import org.nutz.dao.entity.annotation.Readonly;
import org.nutz.dao.entity.annotation.Table;
import org.nutz.dao.entity.annotation.TableIndexes;
@ -28,17 +29,17 @@ public class PjGrUsr implements Serializable {
/**
*
*/
@Comment
@Column
private String usr;
/**
*
*/
@Comment
@Readonly
private String usrName;
/**
*
*/
@Comment
@Column
private String gr;
/**

View File

@ -28,7 +28,8 @@ public class AdminProjectGroupAct extends BaseAction {
@Ok("fm:template.admin.project_group.list")
@RequiresPermissions({ "project.group:view" })
@PermissionTag(name = "SVN浏览账号", tag = "SVN账号管理")
public Pagination list(@Param(value = "pageNumber", df = "1") Integer page, @Param("pj") String pj) {
public Pagination list(@Param(value = "pageNumber", df = "1") Integer page, @Param("pj") String pj,HttpServletRequest req) {
req.setAttribute("pj", pj);
return projectGroupService.getObjListByPager(page, 20, Cnd.where("pj", "=", pj));
}

View File

@ -0,0 +1,68 @@
package com.rekoe.module.admin;
import javax.servlet.http.HttpServletRequest;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import com.rekoe.annotation.PermissionTag;
import com.rekoe.common.Message;
import com.rekoe.common.page.Pagination;
import com.rekoe.domain.PjGrUsr;
import com.rekoe.module.BaseAction;
import com.rekoe.service.ProjectGroupUsrService;
import com.rekoe.service.SvnUserService;
@IocBean
@At("/admin/project/group/usr")
public class AdminProjectGroupUsrAct extends BaseAction {
@Inject
private ProjectGroupUsrService projectGroupUsrService;
@At
@Ok("fm:template.admin.project_group_usr.list")
@RequiresPermissions({ "project.group:view" })
@PermissionTag(name = "SVN浏览账号", tag = "SVN账号管理")
public Pagination list(@Param(value = "pageNumber", df = "1") int page, @Param("pj") String pj, @Param("gr") String gr, HttpServletRequest req) {
req.setAttribute("pj", pj);
req.setAttribute("gr", gr);
return projectGroupUsrService.getObjListByPager(page, 20, Cnd.where("pj", "=", pj).and("gr", "=", gr));
}
@Inject
private SvnUserService svnUserService;
@At
@Ok("fm:template.admin.project_group_usr.add")
@RequiresPermissions({ "project.group:add" })
@PermissionTag(name = "添加项目组用户", tag = "SVN账号管理", enable = true)
public String add(@Param("pj") String pj, @Param("gr") String gr, HttpServletRequest req) {
req.setAttribute("pj", pj);
req.setAttribute("gr", gr);
req.setAttribute("usrList", svnUserService.listUnSelected(pj, gr));
return pj;
}
@At
@Ok("json")
@RequiresPermissions("project.group:add")
@PermissionTag(name = "添加项目组用户", tag = "SVN账号管理", enable = false)
public Message o_save(@Param("::pgu.") PjGrUsr group, HttpServletRequest req) {
return Message.error("ok", req);
}
@At
@Ok("json")
@RequiresPermissions("project.group:delete")
@PermissionTag(name = "删除项目组用户", tag = "SVN账号管理", enable = true)
public Message delete(@Param("pj") String pj, @Param("gr") String gr, @Param("usr") String usr, HttpServletRequest req) {
projectGroupUsrService.delete(pj, gr, usr);
return Message.success("ok", req);
}
}

View File

@ -17,18 +17,18 @@ import com.rekoe.module.BaseAction;
import com.rekoe.service.SvnUserService;
@IocBean
@At("/admin/project/group")
@At("/admin/svn/user")
public class AdminSvnUserAct extends BaseAction {
@Inject
private SvnUserService projectUserService;
private SvnUserService svnUserService;
@At
@Ok("fm:template.admin.project_group.list")
@RequiresPermissions({ "project.group:view" })
@PermissionTag(name = "SVN浏览账号", tag = "SVN账号管理")
public Pagination list(@Param(value = "pageNumber", df = "1") int page) {
return projectUserService.getObjListByPager(page, 20, null);
return svnUserService.getObjListByPager(page, 20, null);
}
@At
@ -43,9 +43,9 @@ public class AdminSvnUserAct extends BaseAction {
@RequiresPermissions("project.group:add")
@PermissionTag(name = "SVN添加账号", tag = "SVN账号管理", enable = false)
public Message o_save(@Param("::user.") Usr user, HttpServletRequest req) {
boolean isOk = projectUserService.nameOk(user.getUsr());
boolean isOk = svnUserService.nameOk(user.getUsr());
if (isOk) {
isOk = projectUserService.insert(user);
isOk = svnUserService.insert(user);
}
if (isOk) {
return Message.success("ok", req);

View File

@ -1,10 +1,18 @@
package com.rekoe.service;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.sql.SqlCallback;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
@ -23,7 +31,7 @@ public class SvnUserService extends BaseService<Usr> {
public SvnUserService() {
}
public SvnUserService(Dao dao) {
super(dao);
}
@ -47,4 +55,40 @@ public class SvnUserService extends BaseService<Usr> {
public boolean isUsername(String username) {
return Pattern.matches(REGEX_USERNAME, username);
}
/**
* (*)
*
* @param pj
*
* @param gr
*
* @return (*)
*/
public List<Usr> listUnSelected(String pj, String gr) {
Sql sql = Sqls.create("select usr,name,psw,role from usr a where a.usr <> '*' " + " and not exists (select usr from pj_gr_usr b where a.usr = b.usr and b.pj=@pj and b.gr=@gr) order by a.usr");
sql.setParam("pj", pj).setParam("gr", gr);
final List<Usr> list = new ArrayList<Usr>();
sql.setCallback(new SqlCallback() {
@Override
public Object invoke(Connection conn, ResultSet rs, Sql sql) throws SQLException {
while (rs.next()) {
list.add(readUsr(rs));
}
return list;
}
});
dao().execute(sql);
return list;
}
Usr readUsr(ResultSet rs) throws SQLException {
Usr result = new Usr();
result.setUsr(rs.getString("usr"));
result.setName(rs.getString("name"));
result.setPsw(rs.getString("psw"));
result.setRole(rs.getString("role"));
return result;
}
}

View File

@ -12,21 +12,18 @@ $(function() {
</head>
<body>
<div class="box-positon">
<div class="rpos"><@s.m "global.position"/>: SVN账号 - <@s.m "global.add"/></div>
<div class="rpos"><@s.m "global.position"/>: SVN项目组账号 - <@s.m "global.add"/></div>
<form class="ropt">
<input type="submit" value="<@s.m "global.backToList"/>" onclick="this.form.action='list.rk';" class="return-button"/>
</form>
<div class="clear"></div>
</div>
<div class="body-box">
<@p.form id="jvForm" action="o_update" labelWidth="12" onsubmit="return false;">
<@p.text width="30" label="姓名" id="user.name" name="user.name" value="" maxlength="100" class="required" required="true"/><@p.tr/>
<@p.text width="30" label="用户名" id="user.usr" name="user.usr" value="" maxlength="100" class="required" required="true"/><@p.tr/>
<@p.text width="30" label="密码" id="user.psw" name="user.psw" value="" maxlength="100" class="required" required="true"/><@p.tr/>
<@p.text width="30" label="邮箱地址" id="user.email" name="user.email" value="" maxlength="100" class="required" required="true"/><@p.tr/>
<@p.td width="50" label="角色" required="true">
<@p.select id="user.role" name="user.role" value='0' list={"guest":"选择角色","admin":"admin"} required="true"/>
</@p.td><@p.tr/>
<@p.form id="jvForm" action="o_save" labelWidth="12" onsubmit="return false;">
<@p.hidden name="pgu.pj" value='${obj}' />
<@p.text width="30" label="项目" id="pgu.pj" name="pgu.pj" value="${obj}" maxlength="100" class="required" required="true" readonly="true"/><@p.tr/>
<@p.text width="30" label="用户组" id="pgu.gr" name="pgu.gr" value="" maxlength="100" class="required" required="true"/><@p.tr/>
<@p.text width="30" label="描述" id="pgu.des" name="pgu.des" value="" maxlength="100" class="required" required="true"/><@p.tr/>
<@p.td colspan="2">
<@p.submit code="global.submit" onclick="Cms.add();"/>
</@p.td><@p.tr/>

View File

@ -39,6 +39,7 @@ function deleted(pj,gr){
<div class="box-positon">
<div class="rpos"><@s.m "global.position"/>: OauthUser - <@s.m "global.list"/></div>
<form class="ropt">
<input type="hidden" name="pj" id="pj" value="${pj}"/>
<input type="submit" class="add" value="<@s.m "global.add"/>" onclick="this.form.action='add';"/>
</form>
<div class="clear"></div>
@ -51,7 +52,7 @@ function deleted(pj,gr){
<@p.column title="项目" align="center">${group.pj}</@p.column><#t/>
<@p.column title="用户组" align="center">${group.gr}</@p.column><#t/>
<@p.column title="描述" align="center">${group.des!}</@p.column><#t/>
<@p.column title="设置用户" align="center">设置用户</@p.column><#t/>
<@p.column title="设置用户" align="center"><a href="${base}/admin/project/group/usr/list?pageNumber=1&pj=${group.pj}&gr=${group.gr}">设置用户</a></@p.column><#t/>
<@shiro.hasPermission name="project.group:delete">
<@p.column title="删除" align="center">
<#if group.gr != "manager"><a href="javascript:void(0);" onclick="deleted('${group.pj}','${group.gr}')" class="pn-opt">删除</a></#if><#rt/>

View File

@ -0,0 +1,112 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title></title>
<#include "/template/admin/head.ftl"/>
<script type="text/javascript">
$(function() {
$("#jvForm").validate();
//移到右边
$('#add').click(function() {
//获取选中的选项,删除并追加给对方
$('#select1 option:selected').appendTo('#select2');
});
//移到左边
$('#remove').click(function() {
$('#select2 option:selected').appendTo('#select1');
});
//全部移到右边
$('#add_all').click(function() {
//获取全部的选项,删除并追加给对方
$('#select1 option').appendTo('#select2');
});
//全部移到左边
$('#remove_all').click(function() {
$('#select2 option').appendTo('#select1');
});
//双击选项
$('#select1').dblclick(function(){ //绑定双击事件
//获取全部的选项,删除并追加给对方
$("option:selected",this).appendTo('#select2'); //追加给对方
});
//双击选项
$('#select2').dblclick(function(){
$("option:selected",this).appendTo('#select1');
});
});
function checkForm(f){
var x = f.elements["usrs"];
if(x.value==""){
alert("用户不可以为空");
f.elements["usrs"].focus();
return false;
}
var s="";
for (var i=0;i<x.length;i++)
{
s += x[i].value;
s += ",";
}
$.dialog({
type: "warn",
content: '确定要添加此记录?',
ok: 'Ok',
cancel: 'Cancel',
onOk: function() {
$.ajax({
url: "o_save.rk",
type: "POST",
data: {"pj":'${pj}',"gr":'${gr}',"usrs":s},
dataType: "json",
cache: false,
success: function(message) {
$.message(message);
if (message.type == "success")
{
window.location.href = "list.rk"
}
}
});
}
});
return false;
}
</script>
</head>
<body>
<div class="box-positon">
<div class="rpos"><@s.m "global.position"/>: SVN项目组账号 - <@s.m "global.add"/></div>
<form class="ropt">
<input type="hidden" name="pj" id="pj" value="${pj}" />
<input type="submit" value="<@s.m "global.backToList"/>" onclick="this.form.action='${base}/admin/project/group/list.rk';" class="return-button"/>
</form>
<div class="clear"></div>
</div>
<div class="body-box">
<@p.form action="o_save" method="post" labelWidth="12" onsubmit="return checkForm(this);">
<@p.hidden name="pgu.pj" id="pgu.pj" value="${pj}" />
<@p.hidden name="pgu.gr" id="gr" value="${gr}" />
<@p.td width="50"required="true">
<select multiple="multiple" id="select1" style="height: 150px;width: 480px;">
<#list usrList as usr>
<option value="${usr.usr}">${usr.name!usr.usr}(${usr.usr})</option>
</#list>
</select>
</@p.td>
<@p.td width="50" required="true">
<input id="add" type="button" value="&gt;" style="width:30px;"><br>
<input id="add_all" type="button" value="&gt;&gt;" style="width:30px;"><br><br>
<input id="remove" type="button" value="&lt;" style="width:30px;"><br>
<input id="remove_all" type="button" value="&lt;&lt;" style="width:30px;"><br><br>
</@p.td>
<@p.td width="50" required="true">
<select id="select2" name="usrs" multiple="multiple" style="height: 150px;width: 480px;"></select>
</@p.td><@p.tr/>
<@p.td colspan="3">
<@p.submit code="global.submit"/>
</@p.td><@p.tr/>
</@p.form>
</div>
</body>
</html>

View File

@ -0,0 +1,31 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title></title>
<#include "/template/admin/head.ftl"/>
<script type="text/javascript">
$(function() {
$("#jvForm").validate();
});
</script>
</head>
<body>
<div class="box-positon">
<div class="rpos"><@s.m "global.position"/>: OauthUser - <@s.m "global.edit"/></div>
<form class="ropt">
<input type="submit" value="<@s.m "global.backToList"/>" onclick="this.form.action='list.rk';" class="return-button"/>
</form>
<div class="clear"></div>
</div>
<div class="body-box">
<@p.form id="jvForm" action="o_update" labelWidth="12" onsubmit="return false;">
<@p.hidden name="user.id" value='${obj.id}' />
<@p.text width="30" label="名称" id="user.userName" name="user.userName" value="${obj.userName!}" maxlength="100" class="required" required="true" readonly="true"/><@p.tr/>
<@p.td colspan="2">
<@p.submit code="global.submit" onclick="Cms.update();"/>
</@p.td><@p.tr/>
</@p.form>
</div>
</body>
</html>

View File

@ -0,0 +1,66 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title></title>
<#include "/template/admin/head.ftl"/>
<script type="text/javascript">
function getTableForm() {
return document.getElementById('tableForm');
}
function deleted(pj,gr,usr){
$.dialog({
type: "warn",
content: '确定要删除此记录?',
ok: 'Ok',
cancel: 'Cancel',
onOk: function() {
$.ajax({
url: "delete.rk",
type: "POST",
data: {"pj":pj,"gr":gr,"usr":usr},
dataType: "json",
cache: false,
success: function(message) {
$.message(message);
if (message.type == "success")
{
window.location.href = back;
}
}
});
}
});
return false;
}
</script>
</head>
<body>
<div class="box-positon">
<div class="rpos"><@s.m "global.position"/>: OauthUser - <@s.m "global.list"/></div>
<form class="ropt">
<input type="hidden" name="pj" id="pj" value="${pj}"/>
<input type="hidden" name="gr" id="pj" value="${gr}"/>
<input type="submit" class="add" value="<@s.m "global.add"/>" onclick="this.form.action='add';"/>
</form>
<div class="clear"></div>
</div>
<div class="body-box">
<@p.form id="tableForm" method="post">
<@p.hidden name="pageNumber" value="${pageNo!}" />
<@p.table value=obj;group,i,has_next><#rt/>
<@p.column title="ID" align="center">${i+1}</@p.column><#t/>
<@p.column title="项目" align="center">${group.pj}</@p.column><#t/>
<@p.column title="用户组" align="center">${group.gr}</@p.column><#t/>
<@p.column title="用户名" align="center">${group.usr!}</@p.column><#t/>
<@p.column title="姓名" align="center">${group.usrName}</@p.column><#t/>
<@shiro.hasPermission name="project.group:delete">
<@p.column title="删除" align="center">
<#if group.gr != "manager"><a href="javascript:void(0);" onclick="deleted('${group.pj}','${group.gr}')" class="pn-opt">删除</a></#if><#rt/>
</@p.column><#t/>
</@shiro.hasPermission>
</@p.table>
</@p.form>
</div>
</body>
</html>

View File

@ -40,7 +40,7 @@ Cms.lmenu = function(id) {
});
});
}
Cms.add = function(id){
Cms.add = function(){
$.dialog({
type: "warn",
content: '确定要添加此记录?',