Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
fc007e96
Commit
fc007e96
authored
Mar 03, 2015
by
guanghongwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ĺܶ
parent
ad2a4d2d
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
287 additions
and
132 deletions
+287
-132
AddUserAsset.py
docs/AddUserAsset.py
+23
-17
mytags.py
jumpserver/templatetags/mytags.py
+14
-5
urls.py
juser/urls.py
+2
-0
views.py
juser/views.py
+131
-92
dept_detail.html
templates/juser/dept_detail.html
+43
-0
dept_list.html
templates/juser/dept_list.html
+23
-6
group_detail.html
templates/juser/group_detail.html
+1
-1
group_list.html
templates/juser/group_list.html
+33
-3
user_list.html
templates/juser/user_list.html
+15
-6
nav_bar_header.html
templates/nav_bar_header.html
+2
-2
No files found.
docs/AddUserAsset.py
View file @
fc007e96
...
...
@@ -2,14 +2,17 @@
import
django
import
os
import
sys
import
random
import
datetime
sys
.
path
.
append
(
'../'
)
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
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
juser.models
import
UserGroup
from
juser.models
import
UserGroup
,
DEPT
from
jasset.views
import
jasset_group_add
from
jperm.models
import
CmdGroup
...
...
@@ -29,15 +32,18 @@ def test_add_asset_group():
print
'Add:
%
s'
%
name
def
test_add_
user_group
():
for
i
in
range
(
1
,
2
0
):
name
=
'D
epartGroup
'
+
str
(
i
)
UserGroup
.
objects
.
create
(
name
=
name
,
type
=
'M'
,
comment
=
name
)
print
'Add:
%
s'
%
name
def
test_add_
dept
():
for
i
in
range
(
1
,
10
0
):
name
=
'D
EPT
'
+
str
(
i
)
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
)
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
...
...
@@ -52,15 +58,18 @@ def test_add_cmd_group():
def
test_add_user
():
for
i
in
range
(
1
,
500
):
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
,
password
=
md5_crypt
(
username
),
dept
=
random
.
choice
(
dept_all
),
name
=
username
,
email
=
'
%
s@jumpserver.org'
%
username
,
groups
=
[
1
,
3
],
role
=
'CU'
,
ssh_pwd
=
CRYPTOR
.
encrypt
(
username
),
groups
=
[
random
.
choice
(
group_all_id
)
for
i
in
range
(
1
,
4
)],
role
=
'CU'
,
ssh_key_pwd
=
CRYPTOR
.
encrypt
(
username
),
ldap_pwd
=
CRYPTOR
.
encrypt
(
username
),
is_active
=
True
,
date_joined
=
0
)
date_joined
=
datetime
.
datetime
.
now
()
)
print
"Add:
%
s"
%
username
...
...
@@ -73,11 +82,8 @@ def test_add_asset():
if
__name__
==
'__main__'
:
test_add_idc
()
test_add_asset_group
()
test_add_user_group
()
test_add_cmd_group
()
test_add_asset
()
#test_add_dept()
#test_add_group()
test_add_user
()
...
...
jumpserver/templatetags/mytags.py
View file @
fc007e96
...
...
@@ -4,7 +4,7 @@ import re
import
time
from
django
import
template
from
juser.models
import
User
,
UserGroup
from
juser.models
import
User
,
UserGroup
,
DEPT
from
jasset.models
import
BisGroup
from
jumpserver.views
import
perm_user_asset
...
...
@@ -26,16 +26,16 @@ def int2str(value):
@register.filter
(
name
=
'get_role'
)
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
)
return
user_role
.
get
(
str
(
user
.
role
))
@register.filter
(
name
=
'groups_str'
)
def
groups_str
(
user
name
):
def
groups_str
(
user
_id
):
groups
=
[]
user
=
User
.
objects
.
get
(
username
=
username
)
for
group
in
user
.
user_group
.
filter
(
type
=
'A'
):
user
=
User
.
objects
.
get
(
id
=
user_id
)
for
group
in
user
.
group
.
all
(
):
groups
.
append
(
group
.
name
)
if
len
(
groups
)
<
4
:
return
' '
.
join
(
groups
)
...
...
@@ -71,6 +71,15 @@ def member_count(group_id):
group
=
UserGroup
.
objects
.
get
(
id
=
group_id
)
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'
)
def
perm_count
(
group_id
):
...
...
juser/urls.py
View file @
fc007e96
...
...
@@ -13,6 +13,8 @@ urlpatterns = patterns('juser.views',
(
r'^group_list/$'
,
'group_list'
),
(
r'^dept_list/$'
,
'dept_list'
),
(
r'^dept_add/$'
,
'dept_add'
),
(
r'^dept_del/$'
,
'dept_del'
),
(
r'^dept_detail/$'
,
'dept_detail'
),
(
r'^user_detail/$'
,
'user_detail'
),
(
r'^user_del/$'
,
'user_del'
),
(
r'^user_edit/$'
,
'user_edit'
),
...
...
juser/views.py
View file @
fc007e96
...
...
@@ -62,15 +62,7 @@ def gen_sha512(salt, password):
return
crypt
.
crypt
(
password
,
'$6$
%
s$'
%
salt
)
def
db_add_group
(
**
kwargs
):
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
):
def
group_add_user
(
group
,
user_id
=
None
,
username
=
None
):
try
:
if
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
:
raise
AddError
(
'用户获取失败'
)
else
:
group
=
UserGroup
.
objects
.
get
(
name
=
group_name
)
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
):
group
=
UserGroup
.
objects
.
get
(
id
=
group_id
)
group
.
user_set
.
clear
()
...
...
@@ -109,12 +115,14 @@ def db_update_user(**kwargs):
user
=
User
.
objects
.
filter
(
username
=
username
)
user
.
update
(
**
kwargs
)
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
.
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
):
...
...
@@ -249,7 +257,11 @@ def dept_add(request):
def
dept_list
(
request
):
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
)
try
:
...
...
@@ -266,10 +278,32 @@ def dept_list(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
=
''
msg
=
''
header_title
,
path1
,
path2
=
'添加
属组'
,
'用户管理'
,
'添加用户
组'
header_title
,
path1
,
path2
=
'添加
小组'
,
'用户管理'
,
'添加小
组'
user_all
=
User
.
objects
.
all
()
dept_all
=
DEPT
.
objects
.
all
()
...
...
@@ -290,7 +324,7 @@ def group_add(request, group_type_select='A'):
else
:
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
:
pass
except
TypeError
:
...
...
@@ -302,8 +336,12 @@ def group_add(request, group_type_select='A'):
def
group_list
(
request
):
header_title
,
path1
,
path2
=
'查看属组 | Show Group'
,
'用户管理'
,
'查看用户组'
contact_list
=
UserGroup
.
objects
.
all
()
header_title
,
path1
,
path2
=
'查看小组'
,
'用户管理'
,
'查看小组'
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
)
try
:
...
...
@@ -370,10 +408,80 @@ def group_edit(request):
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
):
user_role
=
{
'SU'
:
u'超级管理员'
,
'GA'
:
u'组管理员'
,
'CU'
:
u'普通用户'
}
header_title
,
path1
,
path2
=
'查看用户 | Show User'
,
'用户管理'
,
'用户列表'
users
=
contact_list
=
User
.
objects
.
all
()
.
order_by
(
'id'
)
header_title
,
path1
,
path2
=
'查看用户'
,
'用户管理'
,
'用户列表'
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
)
try
:
...
...
@@ -479,72 +587,6 @@ def user_edit(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
):
user_id
=
request
.
session
.
get
(
'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
))
templates/juser/dept_detail.html
0 → 100644
View file @
fc007e96
{% 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
templates/juser/dept_list.html
View file @
fc007e96
...
...
@@ -31,11 +31,25 @@
<div
class=
"ibox-content"
>
<div
class=
""
>
<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>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<thead>
<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>
...
...
@@ -45,13 +59,16 @@
<tbody>
{% for dept in contacts.object_list %}
<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.
id | dept_member
}}
</td>
<td
class=
"text-center"
>
{{ dept.comment }}
</td>
<td
class=
"text-center"
>
<a
title=
"[ {{ dept.name }} ] 成员信息"
href=
"../dept_detail/?id={{
group
.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_del/?id={{
group
.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
<a
title=
"[ {{ dept.name }} ] 成员信息"
href=
"../dept_detail/?id={{
dept
.id }}"
class=
"iframe btn btn-xs btn-primary"
>
成员
</a>
<a
href=
"../dept_edit/?id={{
dept
.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"../dept_del/?id={{
dept
.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
</td>
</tr>
{% endfor %}
...
...
@@ -75,8 +92,8 @@
<a
href=
"#"
>
Previous
</a>
</li>
{% endif %}
{% for page in p
.p
age_range %}
{% ifequal
offset1
page %}
{% for page in page_range %}
{% ifequal
current_page
page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
...
...
templates/juser/group_detail.html
View file @
fc007e96
...
...
@@ -14,7 +14,7 @@
<body>
<div
class=
"row"
>
<div
class=
"contact-box"
>
<h2
class=
"text-center"
>
{{ group.name }} 属组详情
</h2>
<h2
class=
"text-center"
>
<b>
{{ group.name }}
</b>
组中成员
</h2>
<div
class=
"ibox-content"
>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
...
...
templates/juser/group_list.html
View file @
fc007e96
...
...
@@ -31,11 +31,26 @@
<div
class=
"ibox-content"
>
<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-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>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<thead>
<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>
...
...
@@ -46,9 +61,12 @@
<tbody>
{% for group in contacts.object_list %}
<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.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"
>
<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>
</li>
{% endif %}
{% for page in p
.p
age_range %}
{% ifequal
offset1
page %}
{% for page in page_range %}
{% ifequal
current_page
page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
<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
(){
$
(
".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>
{% endblock %}
\ No newline at end of file
templates/juser/user_list.html
View file @
fc007e96
...
...
@@ -31,6 +31,17 @@
<div
class=
"ibox-content"
>
<div
class=
""
>
<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>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
...
...
@@ -39,11 +50,10 @@
<th
class=
"text-center"
>
<input
type=
"checkbox"
id=
"select_all"
onclick=
"selectAll()"
name=
"select_all"
>
</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>
...
...
@@ -55,12 +65,11 @@
<td
class=
"text-center"
>
<input
type=
"checkbox"
name=
"selected"
value=
"{{ user.id }}"
>
</td>
<td
class=
"text-center"
>
{{ user.id }}
</td>
<td
class=
"text-center"
>
{{ user.username }}
</td>
<td
class=
"text-center"
>
{{ user.name }}
</td>
<td
class=
"text-center"
>
{{ user.
username|group_manage_str
}}
</td>
<td
class=
"text-center"
>
{{ user.
username|groups_str }}
</td>
<td
class=
"text-center"
>
{{ user.id|
get_role }}
</td>
<td
class=
"text-center"
>
{{ user.
dept.name
}}
</td>
<td
class=
"text-center"
>
{{ user.
id | groups_str }}
</td>
<td
class=
"text-center"
>
{{ user.id |
get_role }}
</td>
<td
class=
"text-center"
>
{{ user.is_active|bool2str }}
</td>
<td
class=
"text-center"
>
<a
title=
"[ {{ user.name }} ] 详情"
href=
"../user_detail/?id={{ user.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
...
...
templates/nav_bar_header.html
View file @
fc007e96
<nav
class=
"navbar navbar-static-top"
role=
"navigation"
style=
"margin-bottom: 0"
>
<div
class=
"navbar-header"
>
<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"
>
<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>
</form>
</div>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment