Commit fc007e96 authored by guanghongwei's avatar guanghongwei

޸ĺܶ

parent ad2a4d2d
...@@ -2,14 +2,17 @@ ...@@ -2,14 +2,17 @@
import django import django
import os import os
import sys import sys
import random
import datetime
sys.path.append('../') sys.path.append('../')
os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings' os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings'
django.setup() django.setup()
from juser.views import db_add_user, md5_crypt, CRYPTOR
from juser.views import db_add_user, md5_crypt, CRYPTOR, db_add_group
from jasset.models import Asset, IDC, BisGroup from jasset.models import Asset, IDC, BisGroup
from juser.models import UserGroup from juser.models import UserGroup, DEPT
from jasset.views import jasset_group_add from jasset.views import jasset_group_add
from jperm.models import CmdGroup from jperm.models import CmdGroup
...@@ -29,15 +32,18 @@ def test_add_asset_group(): ...@@ -29,15 +32,18 @@ def test_add_asset_group():
print 'Add: %s' % name print 'Add: %s' % name
def test_add_user_group(): def test_add_dept():
for i in range(1, 20): for i in range(1, 100):
name = 'DepartGroup' + str(i) name = 'DEPT' + str(i)
UserGroup.objects.create(name=name, type='M', comment=name) print "Add: %s" % name
print 'Add: %s' % name DEPT.objects.create(name=name, comment=name)
for i in range(1, 20):
def test_add_group():
dept_all = DEPT.objects.all()
for i in range(1, 100):
name = 'UserGroup' + str(i) name = 'UserGroup' + str(i)
UserGroup.objects.create(name=name, type='A', comment=name) UserGroup.objects.create(name=name, dept=random.choice(dept_all), comment=name)
print 'Add: %s' % name print 'Add: %s' % name
...@@ -52,15 +58,18 @@ def test_add_cmd_group(): ...@@ -52,15 +58,18 @@ def test_add_cmd_group():
def test_add_user(): def test_add_user():
for i in range(1, 500): for i in range(1, 500):
username = "test" + str(i) username = "test" + str(i)
dept_all = DEPT.objects.all()
group_all = UserGroup.objects.all()
group_all_id = [group.id for group in group_all]
db_add_user(username=username, db_add_user(username=username,
password=md5_crypt(username), password=md5_crypt(username),
dept=random.choice(dept_all),
name=username, email='%s@jumpserver.org' % username, name=username, email='%s@jumpserver.org' % username,
groups=[1,3], role='CU', groups=[random.choice(group_all_id) for i in range(1, 4)], role='CU',
ssh_pwd=CRYPTOR.encrypt(username),
ssh_key_pwd=CRYPTOR.encrypt(username), ssh_key_pwd=CRYPTOR.encrypt(username),
ldap_pwd=CRYPTOR.encrypt(username), ldap_pwd=CRYPTOR.encrypt(username),
is_active=True, is_active=True,
date_joined=0) date_joined=datetime.datetime.now())
print "Add: %s" % username print "Add: %s" % username
...@@ -73,11 +82,8 @@ def test_add_asset(): ...@@ -73,11 +82,8 @@ def test_add_asset():
if __name__ == '__main__': if __name__ == '__main__':
test_add_idc() #test_add_dept()
test_add_asset_group() #test_add_group()
test_add_user_group()
test_add_cmd_group()
test_add_asset()
test_add_user() test_add_user()
......
...@@ -4,7 +4,7 @@ import re ...@@ -4,7 +4,7 @@ import re
import time import time
from django import template from django import template
from juser.models import User, UserGroup from juser.models import User, UserGroup, DEPT
from jasset.models import BisGroup from jasset.models import BisGroup
from jumpserver.views import perm_user_asset from jumpserver.views import perm_user_asset
...@@ -26,16 +26,16 @@ def int2str(value): ...@@ -26,16 +26,16 @@ def int2str(value):
@register.filter(name='get_role') @register.filter(name='get_role')
def get_role(user_id): def get_role(user_id):
user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'} user_role = {'SU': u'超级管理员', 'DA': u'部门管理员', 'CU': u'普通用户'}
user = User.objects.get(id=user_id) user = User.objects.get(id=user_id)
return user_role.get(str(user.role)) return user_role.get(str(user.role))
@register.filter(name='groups_str') @register.filter(name='groups_str')
def groups_str(username): def groups_str(user_id):
groups = [] groups = []
user = User.objects.get(username=username) user = User.objects.get(id=user_id)
for group in user.user_group.filter(type='A'): for group in user.group.all():
groups.append(group.name) groups.append(group.name)
if len(groups) < 4: if len(groups) < 4:
return ' '.join(groups) return ' '.join(groups)
...@@ -71,6 +71,15 @@ def member_count(group_id): ...@@ -71,6 +71,15 @@ def member_count(group_id):
group = UserGroup.objects.get(id=group_id) group = UserGroup.objects.get(id=group_id)
return group.user_set.count() return group.user_set.count()
@register.filter(name='dept_member')
def dept_member(dept_id):
dept = DEPT.objects.filter(id=dept_id)
if dept:
dept = dept[0]
return dept.user_set.count()
else:
return 0
@register.filter(name='perm_count') @register.filter(name='perm_count')
def perm_count(group_id): def perm_count(group_id):
......
...@@ -13,6 +13,8 @@ urlpatterns = patterns('juser.views', ...@@ -13,6 +13,8 @@ urlpatterns = patterns('juser.views',
(r'^group_list/$', 'group_list'), (r'^group_list/$', 'group_list'),
(r'^dept_list/$', 'dept_list'), (r'^dept_list/$', 'dept_list'),
(r'^dept_add/$', 'dept_add'), (r'^dept_add/$', 'dept_add'),
(r'^dept_del/$', 'dept_del'),
(r'^dept_detail/$', 'dept_detail'),
(r'^user_detail/$', 'user_detail'), (r'^user_detail/$', 'user_detail'),
(r'^user_del/$', 'user_del'), (r'^user_del/$', 'user_del'),
(r'^user_edit/$', 'user_edit'), (r'^user_edit/$', 'user_edit'),
......
...@@ -62,15 +62,7 @@ def gen_sha512(salt, password): ...@@ -62,15 +62,7 @@ def gen_sha512(salt, password):
return crypt.crypt(password, '$6$%s$' % salt) return crypt.crypt(password, '$6$%s$' % salt)
def db_add_group(**kwargs): def group_add_user(group, user_id=None, username=None):
name = kwargs.get('name')
group = UserGroup.objects.filter(name=name)
if group:
raise AddError(u'用户组 %s 已经存在' % name)
UserGroup(**kwargs).save()
def group_add_user(group_name, user_id=None, username=None):
try: try:
if user_id: if user_id:
user = User.objects.get(id=user_id) user = User.objects.get(id=user_id)
...@@ -79,10 +71,24 @@ def group_add_user(group_name, user_id=None, username=None): ...@@ -79,10 +71,24 @@ def group_add_user(group_name, user_id=None, username=None):
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise AddError('用户获取失败') raise AddError('用户获取失败')
else: else:
group = UserGroup.objects.get(name=group_name)
group.user_set.add(user) group.user_set.add(user)
def db_add_group(**kwargs):
name = kwargs.get('name')
group = UserGroup.objects.filter(name=name)
users = kwargs.pop('users')
if group:
raise AddError(u'用户组 %s 已经存在' % name)
group = UserGroup(**kwargs)
group.save()
for user_id in users:
group_add_user(group, user_id)
def group_update_user(group_id, users_id): def group_update_user(group_id, users_id):
group = UserGroup.objects.get(id=group_id) group = UserGroup.objects.get(id=group_id)
group.user_set.clear() group.user_set.clear()
...@@ -109,11 +115,13 @@ def db_update_user(**kwargs): ...@@ -109,11 +115,13 @@ def db_update_user(**kwargs):
user = User.objects.filter(username=username) user = User.objects.filter(username=username)
user.update(**kwargs) user.update(**kwargs)
user = User.objects.get(username=username) user = User.objects.get(username=username)
user.save()
if groups_post:
group_select = [] group_select = []
for group_id in groups_post: for group_id in groups_post:
group = UserGroup.objects.filter(id=group_id) group = UserGroup.objects.filter(id=group_id)
group_select.extend(group) group_select.extend(group)
user.save()
user.user_group = group_select user.user_group = group_select
...@@ -249,6 +257,10 @@ def dept_add(request): ...@@ -249,6 +257,10 @@ def dept_add(request):
def dept_list(request): def dept_list(request):
header_title, path1, path2 = '查看部门', '用户管理', '查看部门' header_title, path1, path2 = '查看部门', '用户管理', '查看部门'
keyword = request.GET.get('search')
if keyword:
contact_list = DEPT.objects.filter(Q(name__icontains=keyword) | Q(comment__icontains=keyword)).order_by('name')
else:
contact_list = DEPT.objects.all() contact_list = DEPT.objects.all()
p = paginator = Paginator(contact_list, 10) p = paginator = Paginator(contact_list, 10)
...@@ -266,10 +278,32 @@ def dept_list(request): ...@@ -266,10 +278,32 @@ def dept_list(request):
return render_to_response('juser/dept_list.html', locals(), context_instance=RequestContext(request)) return render_to_response('juser/dept_list.html', locals(), context_instance=RequestContext(request))
def group_add(request, group_type_select='A'): def dept_detail(request):
dept_id = request.GET.get('id', None)
if not dept_id:
return HttpResponseRedirect('/juser/dept_list/')
dept = DEPT.objects.filter(id=dept_id)
if dept:
dept = dept[0]
users = dept.user_set.all()
return render_to_response('juser/dept_detail.html', locals(), context_instance=RequestContext(request))
def dept_del(request):
dept_id = request.GET.get('id', None)
if not dept_id:
return HttpResponseRedirect('/juser/dept_list/')
dept = DEPT.objects.filter(id=dept_id)
if dept:
dept = dept[0]
dept.delete()
return HttpResponseRedirect('/juser/dept_list/')
def group_add(request):
error = '' error = ''
msg = '' msg = ''
header_title, path1, path2 = '添加属组', '用户管理', '添加用户组' header_title, path1, path2 = '添加小组', '用户管理', '添加小组'
user_all = User.objects.all() user_all = User.objects.all()
dept_all = DEPT.objects.all() dept_all = DEPT.objects.all()
...@@ -290,7 +324,7 @@ def group_add(request, group_type_select='A'): ...@@ -290,7 +324,7 @@ def group_add(request, group_type_select='A'):
else: else:
AddError(u'部门不存在') AddError(u'部门不存在')
db_add_group(name=group_name, dept=dept, comment=comment) db_add_group(name=group_name, users=users_selected, dept=dept, comment=comment)
except AddError: except AddError:
pass pass
except TypeError: except TypeError:
...@@ -302,8 +336,12 @@ def group_add(request, group_type_select='A'): ...@@ -302,8 +336,12 @@ def group_add(request, group_type_select='A'):
def group_list(request): def group_list(request):
header_title, path1, path2 = '查看属组 | Show Group', '用户管理', '查看用户组' header_title, path1, path2 = '查看小组', '用户管理', '查看小组'
contact_list = UserGroup.objects.all() keyword = request.GET.get('search', '')
if keyword:
contact_list = UserGroup.objects.filter(Q(name__icontains=keyword) | Q(comment__icontains=keyword))
else:
contact_list = UserGroup.objects.all().order_by('name')
p = paginator = Paginator(contact_list, 10) p = paginator = Paginator(contact_list, 10)
try: try:
...@@ -370,10 +408,80 @@ def group_edit(request): ...@@ -370,10 +408,80 @@ def group_edit(request):
return HttpResponseRedirect('/juser/group_list/') return HttpResponseRedirect('/juser/group_list/')
def user_add(request):
error = ''
msg = ''
header_title, path1, path2 = '添加用户 | User Add', '用户管理', '添加用户'
user_role = {'SU': u'超级管理员', 'DA': u'部门管理员', 'CU': u'普通用户'}
dept_all = DEPT.objects.all()
group_all = UserGroup.objects.all()
if request.method == 'POST':
username = request.POST.get('username', '')
password = request.POST.get('password', '')
name = request.POST.get('name', '')
email = request.POST.get('email', '')
dept_id = request.POST.get('dept_id')
groups = request.POST.getlist('groups', [])
role_post = request.POST.get('role', 'CU')
ssh_key_pwd = request.POST.get('ssh_key_pwd', '')
is_active = request.POST.get('is_active', '1')
ldap_pwd = gen_rand_pwd(16)
try:
if None in [username, password, ssh_key_pwd, name, groups, role_post, is_active]:
error = u'带*内容不能为空'
raise AddError
user = User.objects.filter(username=username)
if user:
error = u'用户 %s 已存在' % username
raise AddError
dept = DEPT.objects.filter(id=dept_id)
if dept:
dept = dept[0]
else:
error = u'部门不存在'
raise AddError(error)
except AddError:
pass
else:
try:
db_add_user(username=username,
password=md5_crypt(password),
name=name, email=email, dept=dept,
groups=groups, role=role_post,
ssh_key_pwd=CRYPTOR.encrypt(ssh_key_pwd),
ldap_pwd=CRYPTOR.encrypt(ldap_pwd),
is_active=is_active,
date_joined=datetime.datetime.now())
server_add_user(username, password, ssh_key_pwd)
if LDAP_ENABLE:
ldap_add_user(username, ldap_pwd)
msg = u'添加用户 %s 成功!' % username
except Exception, e:
error = u'添加用户 %s 失败 %s ' % (username, e)
try:
db_del_user(username)
server_del_user(username)
if LDAP_ENABLE:
ldap_del_user(username)
except Exception:
pass
return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request))
def user_list(request): def user_list(request):
user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'} user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'}
header_title, path1, path2 = '查看用户 | Show User', '用户管理', '用户列表' header_title, path1, path2 = '查看用户', '用户管理', '用户列表'
users = contact_list = User.objects.all().order_by('id') keyword = request.GET.get('search', '')
if keyword:
contact_list = User.objects.filter(Q(username__icontains=keyword) | Q(name__icontains=keyword)).order_by('name')
else:
contact_list = User.objects.all().order_by('id')
p = paginator = Paginator(contact_list, 10) p = paginator = Paginator(contact_list, 10)
try: try:
...@@ -479,72 +587,6 @@ def user_edit(request): ...@@ -479,72 +587,6 @@ def user_edit(request):
return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request)) return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request))
def user_add(request):
error = ''
msg = ''
header_title, path1, path2 = '添加用户 | User Add', '用户管理', '添加用户'
user_role = {'SU': u'超级管理员', 'DA': u'部门管理员', 'CU': u'普通用户'}
dept_all = DEPT.objects.all()
group_all = UserGroup.objects.all()
if request.method == 'POST':
username = request.POST.get('username', '')
password = request.POST.get('password', '')
name = request.POST.get('name', '')
email = request.POST.get('email', '')
dept_id = request.POST.get('dept_id')
groups = request.POST.getlist('groups', [])
role_post = request.POST.get('role', 'CU')
ssh_key_pwd = request.POST.get('ssh_key_pwd', '')
is_active = request.POST.get('is_active', '1')
ldap_pwd = gen_rand_pwd(16)
try:
if None in [username, password, ssh_key_pwd, name, groups, role_post, is_active]:
error = u'带*内容不能为空'
raise AddError
user = User.objects.filter(username=username)
if user:
error = u'用户 %s 已存在' % username
raise AddError
dept = DEPT.objects.filter(id=dept_id)
if dept:
dept = dept[0]
else:
error = u'部门不存在'
raise AddError(error)
except AddError:
pass
else:
try:
db_add_user(username=username,
password=md5_crypt(password),
name=name, email=email, dept=dept,
groups=groups, role=role_post,
ssh_key_pwd=CRYPTOR.encrypt(ssh_key_pwd),
ldap_pwd=CRYPTOR.encrypt(ldap_pwd),
is_active=is_active,
date_joined=datetime.datetime.now())
server_add_user(username, password, ssh_key_pwd)
if LDAP_ENABLE:
ldap_add_user(username, ldap_pwd)
msg = u'添加用户 %s 成功!' % username
except Exception, e:
error = u'添加用户 %s 失败 %s ' % (username, e)
try:
db_del_user(username)
server_del_user(username)
if LDAP_ENABLE:
ldap_del_user(username)
except Exception:
pass
return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request))
def profile(request): def profile(request):
user_id = request.session.get('user_id') user_id = request.session.get('user_id')
if not user_id: if not user_id:
...@@ -558,6 +600,3 @@ def chg_pass(request): ...@@ -558,6 +600,3 @@ def chg_pass(request):
return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request)) return render_to_response('juser/user_add.html', locals(), context_instance=RequestContext(request))
{% load mytags %}
<html>
<head>
{% include 'link_css.html' %}
<style type="text/css">
body
{
background: #FFFFFF;
}
</style>
</head>
<body>
<div class="row">
<div class="contact-box">
<h2 class="text-center"><b>{{ dept.name }}</b> 部门成员</h2>
<div class="ibox-content">
<table class="table table-striped table-bordered table-hover " id="editable" >
<thead>
<tr>
<th class="text-center">用户名</th>
<th class="text-center">姓名</th>
<th class="text-center">角色</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr class="gradeX">
<td class="text-center">{{ user.username }}</td>
<td class="text-center">{{ user.name }}</td>
<td class="text-center">{{ user.id|get_role }}</td>
</tr>
{% endfor %}
</tbody>
</tbody>
</table>
</div>
</div>
</body>
</html>
\ No newline at end of file
...@@ -31,11 +31,25 @@ ...@@ -31,11 +31,25 @@
<div class="ibox-content"> <div class="ibox-content">
<div class=""> <div class="">
<a target="_blank" href="/juser/dept_add/" class="btn btn-sm btn-primary "> 添加 </a> <a target="_blank" href="/juser/dept_add/" class="btn btn-sm btn-primary "> 添加 </a>
<a target="_blank" href="/juser/group_add/" class="btn btn-sm btn-danger "> 删除所选 </a>
<form id="search_form" method="get" action="" class="pull-right mail-search">
<div class="input-group">
<input type="text" class="form-control input-sm" id="search_input" name="search" placeholder="Search">
<div class="input-group-btn">
<button id='search_btn' type="submit" class="btn btn-sm btn-primary">
Search
</button>
</div>
</div>
</form>
</div> </div>
<table class="table table-striped table-bordered table-hover " id="editable" > <table class="table table-striped table-bordered table-hover " id="editable" >
<thead> <thead>
<tr> <tr>
<th class="text-center">
<input type="checkbox" id="select_all" onclick="selectAll()" name="select_all">
</th>
<th class="text-center">部门名称</th> <th class="text-center">部门名称</th>
<th class="text-center">成员数量</th> <th class="text-center">成员数量</th>
<th class="text-center">备注</th> <th class="text-center">备注</th>
...@@ -45,13 +59,16 @@ ...@@ -45,13 +59,16 @@
<tbody> <tbody>
{% for dept in contacts.object_list %} {% for dept in contacts.object_list %}
<tr class="gradeX"> <tr class="gradeX">
<td class="text-center">
<input type="checkbox" name="selected" value="{{ dept.id }}">
</td>
<td class="text-center"> {{ dept.name }} </td> <td class="text-center"> {{ dept.name }} </td>
<td class="text-center"> {{ dept.name }} </td> <td class="text-center"> {{ dept.id | dept_member }} </td>
<td class="text-center"> {{ dept.comment }} </td> <td class="text-center"> {{ dept.comment }} </td>
<td class="text-center"> <td class="text-center">
<a title="[ {{ dept.name }} ] 成员信息" href="../dept_detail/?id={{ group.id }}" class="iframe btn btn-xs btn-primary">成员</a> <a title="[ {{ dept.name }} ] 成员信息" href="../dept_detail/?id={{ dept.id }}" class="iframe btn btn-xs btn-primary">成员</a>
<a href="../dept_edit/?id={{ group.id }}" class="btn btn-xs btn-info">编辑</a> <a href="../dept_edit/?id={{ dept.id }}" class="btn btn-xs btn-info">编辑</a>
<a href="../dept_del/?id={{ group.id }}" class="btn btn-xs btn-danger">删除</a> <a href="../dept_del/?id={{ dept.id }}" class="btn btn-xs btn-danger">删除</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
...@@ -75,8 +92,8 @@ ...@@ -75,8 +92,8 @@
<a href="#">Previous</a> <a href="#">Previous</a>
</li> </li>
{% endif %} {% endif %}
{% for page in p.page_range %} {% for page in page_range %}
{% ifequal offset1 page %} {% ifequal current_page page %}
<li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li> <li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li>
{% else %} {% else %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li> <li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li>
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<body> <body>
<div class="row"> <div class="row">
<div class="contact-box"> <div class="contact-box">
<h2 class="text-center">{{ group.name }} 属组详情</h2> <h2 class="text-center"><b>{{ group.name }}</b> 组中成员</h2>
<div class="ibox-content"> <div class="ibox-content">
<table class="table table-striped table-bordered table-hover " id="editable" > <table class="table table-striped table-bordered table-hover " id="editable" >
......
...@@ -31,11 +31,26 @@ ...@@ -31,11 +31,26 @@
<div class="ibox-content"> <div class="ibox-content">
<div class=""> <div class="">
<a target="_blank" href="/juser/group_add/" class="btn btn-sm btn-primary "> 添加 </a> <a target="_blank" href="/juser/group_add/" class="btn btn-sm btn-primary "> 添加 </a>
<a target="_blank" href="/juser/group_add/" class="btn btn-sm btn-danger "> 删除所选 </a>
<form id="search_form" method="get" action="" class="pull-right mail-search">
<div class="input-group">
<input type="text" class="form-control input-sm" id="search_input" name="search" placeholder="Search">
<div class="input-group-btn">
<button id='search_btn' type="submit" class="btn btn-sm btn-primary">
Search
</button>
</div>
</div>
</form>
</div> </div>
<table class="table table-striped table-bordered table-hover " id="editable" > <table class="table table-striped table-bordered table-hover " id="editable" >
<thead> <thead>
<tr> <tr>
<th class="text-center">
<input type="checkbox" id="select_all" onclick="selectAll()" name="select_all">
</th>
<th class="text-center">组名</th> <th class="text-center">组名</th>
<th class="text-center">所属部门</th> <th class="text-center">所属部门</th>
<th class="text-center">成员数量</th> <th class="text-center">成员数量</th>
...@@ -46,9 +61,12 @@ ...@@ -46,9 +61,12 @@
<tbody> <tbody>
{% for group in contacts.object_list %} {% for group in contacts.object_list %}
<tr class="gradeX"> <tr class="gradeX">
<td class="text-center">
<input type="checkbox" name="selected" value="{{ group.id }}">
</td>
<td class="text-center"> {{ group.name }} </td> <td class="text-center"> {{ group.name }} </td>
<td class="text-center"> {{ group.dept.name }} </td> <td class="text-center"> {{ group.dept.name }} </td>
<td class="text-center"> {{ group.name }} </td> <td class="text-center"> {{ group.id | member_count }} </td>
<td class="text-center"> {{ group.comment }} </td> <td class="text-center"> {{ group.comment }} </td>
<td class="text-center"> <td class="text-center">
<a title="[ {{ group.name }} ] 成员信息" href="../group_detail/?id={{ group.id }}" class="iframe btn btn-xs btn-primary">成员</a> <a title="[ {{ group.name }} ] 成员信息" href="../group_detail/?id={{ group.id }}" class="iframe btn btn-xs btn-primary">成员</a>
...@@ -77,8 +95,8 @@ ...@@ -77,8 +95,8 @@
<a href="#">Previous</a> <a href="#">Previous</a>
</li> </li>
{% endif %} {% endif %}
{% for page in p.page_range %} {% for page in page_range %}
{% ifequal offset1 page %} {% ifequal current_page page %}
<li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li> <li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li>
{% else %} {% else %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li> <li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li>
...@@ -107,6 +125,17 @@ ...@@ -107,6 +125,17 @@
$(document).ready(function(){ $(document).ready(function(){
$(".iframe").colorbox({iframe:true, width:"70%", height:"70%"}); $(".iframe").colorbox({iframe:true, width:"70%", height:"70%"});
}); });
{# function user_group_search(){#}
{# $.ajax({#}
{# type: "GET",#}
{# url: "/juser/group_search/",#}
{# data: $("#search_form").serialize(),#}
{# success: function (data) {#}
{# $("#contents_form").html(data);#}
{# }#}
{# });#}
{# }#}
</script> </script>
{% endblock %} {% endblock %}
\ No newline at end of file
...@@ -31,6 +31,17 @@ ...@@ -31,6 +31,17 @@
<div class="ibox-content"> <div class="ibox-content">
<div class=""> <div class="">
<a target="_blank" href="/juser/user_add/" class="btn btn-sm btn-primary "> 添加 </a> <a target="_blank" href="/juser/user_add/" class="btn btn-sm btn-primary "> 添加 </a>
<a target="_blank" href="/juser/group_add/" class="btn btn-sm btn-danger "> 删除所选 </a>
<form id="search_form" method="get" action="" class="pull-right mail-search">
<div class="input-group">
<input type="text" class="form-control input-sm" id="search_input" name="search" placeholder="Search">
<div class="input-group-btn">
<button id='search_btn' type="submit" class="btn btn-sm btn-primary">
Search
</button>
</div>
</div>
</form>
</div> </div>
<table class="table table-striped table-bordered table-hover " id="editable" > <table class="table table-striped table-bordered table-hover " id="editable" >
...@@ -39,11 +50,10 @@ ...@@ -39,11 +50,10 @@
<th class="text-center"> <th class="text-center">
<input type="checkbox" id="select_all" onclick="selectAll()" name="select_all"> <input type="checkbox" id="select_all" onclick="selectAll()" name="select_all">
</th> </th>
<th class="text-center">ID</th>
<th class="text-center">用户名</th> <th class="text-center">用户名</th>
<th class="text-center">姓名</th> <th class="text-center">姓名</th>
<th class="text-center">部门</th> <th class="text-center">部门</th>
<th class="text-center">用户</th> <th class="text-center"></th>
<th class="text-center">角色</th> <th class="text-center">角色</th>
<th class="text-center">激活</th> <th class="text-center">激活</th>
<th class="text-center">操作</th> <th class="text-center">操作</th>
...@@ -55,12 +65,11 @@ ...@@ -55,12 +65,11 @@
<td class="text-center"> <td class="text-center">
<input type="checkbox" name="selected" value="{{ user.id }}"> <input type="checkbox" name="selected" value="{{ user.id }}">
</td> </td>
<td class="text-center"> {{ user.id }} </td>
<td class="text-center"> {{ user.username }} </td> <td class="text-center"> {{ user.username }} </td>
<td class="text-center"> {{ user.name }} </td> <td class="text-center"> {{ user.name }} </td>
<td class="text-center"> {{ user.username|group_manage_str }} </td> <td class="text-center"> {{ user.dept.name }} </td>
<td class="text-center"> {{ user.username|groups_str }}</td> <td class="text-center"> {{ user.id | groups_str }} </td>
<td class="text-center">{{ user.id|get_role }}</td> <td class="text-center"> {{ user.id | get_role }}</td>
<td class="text-center">{{ user.is_active|bool2str }}</td> <td class="text-center">{{ user.is_active|bool2str }}</td>
<td class="text-center"> <td class="text-center">
<a title="[ {{ user.name }} ] 详情" href="../user_detail/?id={{ user.id }}" class="iframe btn btn-xs btn-primary">详情</a> <a title="[ {{ user.name }} ] 详情" href="../user_detail/?id={{ user.id }}" class="iframe btn btn-xs btn-primary">详情</a>
......
<nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0"> <nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
<div class="navbar-header"> <div class="navbar-header">
<a class="navbar-minimalize minimalize-styl-2 btn btn-primary " href="#"><i class="fa fa-bars"></i> </a> <a class="navbar-minimalize minimalize-styl-2 btn btn-primary " href="#"><i class="fa fa-bars"></i> </a>
<form role="search" class="navbar-form-custom" method="post" action="search_results.html"> <form role="search" class="navbar-form-custom" method="get" action="">
<div class="form-group"> <div class="form-group">
<input type="text" placeholder="输入搜索..." class="form-control" name="top-search" id="top-search"> <input type="text" placeholder="输入搜索..." class="form-control" name="search" id="top-search">
</div> </div>
</form> </form>
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment