修改很多内容

pull/6/head
guanghongwei 2015-03-03 18:42:06 +08:00
parent ad2a4d2d5d
commit fc007e96d7
10 changed files with 285 additions and 132 deletions

View File

@ -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():
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():
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():
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()

View File

@ -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):
@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):
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):

View File

@ -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'),

View File

@ -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):
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,12 +115,14 @@ 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)
group_select = []
for group_id in groups_post:
group = UserGroup.objects.filter(id=group_id)
group_select.extend(group)
user.save() user.save()
user.user_group = group_select
if groups_post:
group_select = []
for group_id in groups_post:
group = UserGroup.objects.filter(id=group_id)
group_select.extend(group)
user.user_group = group_select
def db_del_user(username): def db_del_user(username):
@ -249,7 +257,11 @@ def dept_add(request):
def dept_list(request): def dept_list(request):
header_title, path1, path2 = '鏌ョ湅閮ㄩ棬', '鐢ㄦ埛绠$悊', '鏌ョ湅閮ㄩ棬' header_title, path1, path2 = '鏌ョ湅閮ㄩ棬', '鐢ㄦ埛绠$悊', '鏌ョ湅閮ㄩ棬'
contact_list = DEPT.objects.all() 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()
p = paginator = Paginator(contact_list, 10) p = paginator = Paginator(contact_list, 10)
try: try:
@ -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'):
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'):
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):
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):
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):
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))

View File

@ -0,0 +1,42 @@
{% 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>

View File

@ -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 @@
<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 @@
<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>

View File

@ -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" >

View File

@ -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 @@
<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 @@
<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 @@
$(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 %}

View File

@ -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 @@
<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 @@
<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>

View File

@ -1,9 +1,9 @@
<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>