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
d90b5919
Commit
d90b5919
authored
Mar 02, 2015
by
guanghongwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ع1
parent
458ca42f
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
345 additions
and
84 deletions
+345
-84
models.py
juser/models.py
+15
-13
urls.py
juser/urls.py
+2
-0
views.py
juser/views.py
+69
-41
user.png
static/img/user.png
+0
-0
dept_add.html
templates/juser/dept_add.html
+134
-0
dept_list.html
templates/juser/dept_list.html
+111
-0
group_add.html
templates/juser/group_add.html
+6
-10
user_add.html
templates/juser/user_add.html
+4
-18
nav.html
templates/nav.html
+4
-2
No files found.
juser/models.py
View file @
d90b5919
from
django.db
import
models
from
django.db
import
models
class
UserGroup
(
models
.
Model
):
class
DEPT
(
models
.
Model
):
GROUP_TYPE_CHOICES
=
(
name
=
models
.
CharField
(
max_length
=
80
,
unique
=
True
)
(
'P'
,
'PrivateGroup'
),
comment
=
models
.
CharField
(
max_length
=
160
,
blank
=
True
,
null
=
True
)
(
'M'
,
'ManageGroup'
),
(
'A'
,
'AuthorizeGroup'
),
)
def
__unicode__
(
self
):
return
self
.
name
class
UserGroup
(
models
.
Model
):
name
=
models
.
CharField
(
max_length
=
80
,
unique
=
True
)
name
=
models
.
CharField
(
max_length
=
80
,
unique
=
True
)
type
=
models
.
CharField
(
max_length
=
1
,
choices
=
GROUP_TYPE_CHOICES
,
default
=
'P'
)
dept
=
models
.
ForeignKey
(
DEPT
)
comment
=
models
.
CharField
(
max_length
=
160
,
blank
=
True
,
null
=
True
)
comment
=
models
.
CharField
(
max_length
=
160
,
blank
=
True
,
null
=
True
)
def
__unicode__
(
self
):
def
__unicode__
(
self
):
...
@@ -19,21 +21,21 @@ class UserGroup(models.Model):
...
@@ -19,21 +21,21 @@ class UserGroup(models.Model):
class
User
(
models
.
Model
):
class
User
(
models
.
Model
):
USER_ROLE_CHOICES
=
(
USER_ROLE_CHOICES
=
(
(
'SU'
,
'SuperUser'
),
(
'SU'
,
'SuperUser'
),
(
'
GA'
,
'Group
Admin'
),
(
'
DA'
,
'Dept
Admin'
),
(
'CU'
,
'CommonUser'
),
(
'CU'
,
'CommonUser'
),
)
)
username
=
models
.
CharField
(
max_length
=
80
,
unique
=
True
)
username
=
models
.
CharField
(
max_length
=
80
,
unique
=
True
)
password
=
models
.
CharField
(
max_length
=
100
)
password
=
models
.
CharField
(
max_length
=
100
)
name
=
models
.
CharField
(
max_length
=
80
)
name
=
models
.
CharField
(
max_length
=
80
)
email
=
models
.
EmailField
(
max_length
=
75
,
null
=
True
,
blank
=
True
)
email
=
models
.
EmailField
(
max_length
=
75
)
role
=
models
.
CharField
(
max_length
=
2
,
choices
=
USER_ROLE_CHOICES
,
default
=
'CU'
)
role
=
models
.
CharField
(
max_length
=
2
,
choices
=
USER_ROLE_CHOICES
,
default
=
'CU'
)
user_group
=
models
.
ManyToManyField
(
UserGroup
)
dept
=
models
.
ForeignKey
(
DEPT
)
group
=
models
.
ManyToManyField
(
UserGroup
)
ldap_pwd
=
models
.
CharField
(
max_length
=
100
)
ldap_pwd
=
models
.
CharField
(
max_length
=
100
)
ssh_key_pwd
=
models
.
CharField
(
max_length
=
100
)
ssh_key_pwd
=
models
.
CharField
(
max_length
=
100
)
ssh_pwd
=
models
.
CharField
(
max_length
=
100
)
is_active
=
models
.
BooleanField
(
default
=
True
)
is_active
=
models
.
BooleanField
(
default
=
True
)
last_login
=
models
.
IntegerField
(
default
=
0
)
last_login
=
models
.
DateTimeField
(
null
=
True
)
date_joined
=
models
.
IntegerField
(
)
date_joined
=
models
.
DateTimeField
(
null
=
True
)
def
__unicode__
(
self
):
def
__unicode__
(
self
):
return
self
.
username
return
self
.
username
juser/urls.py
View file @
d90b5919
...
@@ -11,6 +11,8 @@ urlpatterns = patterns('juser.views',
...
@@ -11,6 +11,8 @@ urlpatterns = patterns('juser.views',
(
r'^group_add/$'
,
'group_add'
),
(
r'^group_add/$'
,
'group_add'
),
(
r'^group_add_ajax/$'
,
'group_add_ajax'
),
(
r'^group_add_ajax/$'
,
'group_add_ajax'
),
(
r'^group_list/$'
,
'group_list'
),
(
r'^group_list/$'
,
'group_list'
),
(
r'^dept_list/$'
,
'dept_list'
),
(
r'^dept_add/$'
,
'dept_add'
),
(
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'
),
...
...
juser/views.py
View file @
d90b5919
...
@@ -17,7 +17,7 @@ from django.template import RequestContext
...
@@ -17,7 +17,7 @@ from django.template import RequestContext
from
django.http
import
HttpResponse
from
django.http
import
HttpResponse
from
django.core.paginator
import
Paginator
,
EmptyPage
,
InvalidPage
from
django.core.paginator
import
Paginator
,
EmptyPage
,
InvalidPage
from
juser.models
import
UserGroup
,
User
from
juser.models
import
UserGroup
,
User
,
DEPT
from
connect
import
PyCrypt
,
KEY
from
connect
import
PyCrypt
,
KEY
from
connect
import
BASE_DIR
from
connect
import
BASE_DIR
from
connect
import
CONF
from
connect
import
CONF
...
@@ -61,12 +61,12 @@ def gen_sha512(salt, password):
...
@@ -61,12 +61,12 @@ def gen_sha512(salt, password):
return
crypt
.
crypt
(
password
,
'$6$
%
s$'
%
salt
)
return
crypt
.
crypt
(
password
,
'$6$
%
s$'
%
salt
)
def
group_db_add
(
**
kwargs
):
def
db_add_group
(
**
kwargs
):
group_
name
=
kwargs
.
get
(
'name'
)
name
=
kwargs
.
get
(
'name'
)
group
=
UserGroup
.
objects
.
filter
(
name
=
group_
name
)
group
=
UserGroup
.
objects
.
filter
(
name
=
name
)
if
group
:
if
group
:
raise
AddError
(
'Group
%
s have been exist .'
%
group_
name
)
raise
AddError
(
u'用户组
%
s 已经存在'
%
name
)
UserGroup
.
objects
.
create
(
**
kwargs
)
UserGroup
(
**
kwargs
)
.
save
(
)
def
group_add_user
(
group_name
,
user_id
=
None
,
username
=
None
):
def
group_add_user
(
group_name
,
user_id
=
None
,
username
=
None
):
...
@@ -210,32 +210,75 @@ def ldap_del_user(username):
...
@@ -210,32 +210,75 @@ def ldap_del_user(username):
# ldap_conn.add(group_dn, group_attr)
# ldap_conn.add(group_dn, group_attr)
# def group_add_ajax(request):
# group_type = request.POST.get('type', 'A')
# users_all = User.objects.all()
# if group_type == 'A':
# users = users_all
# else:
# users = [user for user in users_all if not user.user_group.filter(type='M')]
#
# return render_to_response('juser/group_add_ajax.html', locals(), context_instance=RequestContext(request))
def
dept_add
(
request
):
header_title
,
path1
,
path2
=
'添加部门'
,
'用户管理'
,
'添加部门'
if
request
.
method
==
'POST'
:
name
=
request
.
POST
.
get
(
'name'
,
''
)
comment
=
request
.
POST
.
get
(
'comment'
,
''
)
try
:
if
not
name
:
raise
AddError
(
'部门名称不能为空'
)
if
DEPT
.
objects
.
filter
(
name
=
name
):
raise
AddError
(
u'部门名称
%
s 已存在'
%
name
)
except
AddError
,
e
:
error
=
e
else
:
DEPT
(
name
=
name
,
comment
=
comment
)
.
save
()
msg
=
u'添加部门
%
s 成功'
%
name
return
render_to_response
(
'juser/dept_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
dept_list
(
request
):
header_title
,
path1
,
path2
=
'查看部门'
,
'用户管理'
,
'查看部门'
contact_list
=
DEPT
.
objects
.
all
()
p
=
paginator
=
Paginator
(
contact_list
,
10
)
try
:
current_page
=
int
(
request
.
GET
.
get
(
'page'
,
'1'
))
except
ValueError
:
current_page
=
1
page_range
=
page_list_return
(
len
(
p
.
page_range
),
current_page
)
try
:
contacts
=
paginator
.
page
(
current_page
)
except
(
EmptyPage
,
InvalidPage
):
contacts
=
paginator
.
page
(
paginator
.
num_pages
)
return
render_to_response
(
'juser/dept_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
group_add
(
request
,
group_type_select
=
'A'
):
def
group_add
(
request
,
group_type_select
=
'A'
):
error
=
''
error
=
''
msg
=
''
msg
=
''
header_title
,
path1
,
path2
=
'添加属组 | Group Add'
,
'用户管理'
,
'添加用户组'
header_title
,
path1
,
path2
=
'添加属组'
,
'用户管理'
,
'添加用户组'
group_types
=
{
user_all
=
User
.
objects
.
all
()
'M'
:
'部门'
,
dept_all
=
DEPT
.
objects
.
all
()
'A'
:
'用户组'
,
}
users_all
=
User
.
objects
.
all
()
if
group_type_select
==
'M'
:
users
=
[
user
for
user
in
users_all
if
not
user
.
user_group
.
filter
(
type
=
'M'
)]
else
:
users
=
users_all
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
group_name
=
request
.
POST
.
get
(
'group_name'
,
''
)
group_name
=
request
.
POST
.
get
(
'group_name'
,
''
)
group_type
=
request
.
POST
.
get
(
'group_type'
,
'A
'
)
dept_id
=
request
.
POST
.
get
(
'dept_id'
,
'
'
)
users_selected
=
request
.
POST
.
getlist
(
'users_selected'
,
''
)
users_selected
=
request
.
POST
.
getlist
(
'users_selected'
,
''
)
comment
=
request
.
POST
.
get
(
'comment'
,
''
)
comment
=
request
.
POST
.
get
(
'comment'
,
''
)
try
:
try
:
if
not
group_name
:
if
''
in
[
group_name
,
dept_id
]:
error
=
u'组名不能为空'
error
=
u'组名 或 部门 不能为空'
raise
AddError
raise
AddError
(
error
)
group_db_add
(
name
=
group_name
,
comment
=
comment
,
type
=
group_type
)
group_db_add
(
name
=
group_name
,
comment
=
comment
)
for
user_id
in
users_selected
:
for
user_id
in
users_selected
:
group_add_user
(
group_name
,
user_id
=
user_id
)
group_add_user
(
group_name
,
user_id
=
user_id
)
...
@@ -249,17 +292,6 @@ def group_add(request, group_type_select='A'):
...
@@ -249,17 +292,6 @@ def group_add(request, group_type_select='A'):
return
render_to_response
(
'juser/group_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'juser/group_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
group_add_ajax
(
request
):
group_type
=
request
.
POST
.
get
(
'type'
,
'A'
)
users_all
=
User
.
objects
.
all
()
if
group_type
==
'A'
:
users
=
users_all
else
:
users
=
[
user
for
user
in
users_all
if
not
user
.
user_group
.
filter
(
type
=
'M'
)]
return
render_to_response
(
'juser/group_add_ajax.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
group_list
(
request
):
def
group_list
(
request
):
header_title
,
path1
,
path2
=
'查看属组 | Show Group'
,
'用户管理'
,
'查看用户组'
header_title
,
path1
,
path2
=
'查看属组 | Show Group'
,
'用户管理'
,
'查看用户组'
groups
=
contact_list
=
UserGroup
.
objects
.
filter
(
Q
(
type
=
'M'
)
|
Q
(
type
=
'A'
))
.
order_by
(
'type'
)
groups
=
contact_list
=
UserGroup
.
objects
.
filter
(
Q
(
type
=
'M'
)
|
Q
(
type
=
'A'
))
.
order_by
(
'type'
)
...
@@ -442,21 +474,17 @@ def user_add(request):
...
@@ -442,21 +474,17 @@ def user_add(request):
error
=
''
error
=
''
msg
=
''
msg
=
''
header_title
,
path1
,
path2
=
'添加用户 | User Add'
,
'用户管理'
,
'添加用户'
header_title
,
path1
,
path2
=
'添加用户 | User Add'
,
'用户管理'
,
'添加用户'
user_role
=
{
'SU'
:
u'超级管理员'
,
'
GA'
:
u'组
管理员'
,
'CU'
:
u'普通用户'
}
user_role
=
{
'SU'
:
u'超级管理员'
,
'
DA'
:
u'部门
管理员'
,
'CU'
:
u'普通用户'
}
manage_groups
=
UserGroup
.
objects
.
filter
(
type
=
'M'
)
dept_all
=
DEPT
.
objects
.
all
(
)
auth_groups
=
UserGroup
.
objects
.
filter
(
type
=
'A'
)
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
username
=
request
.
POST
.
get
(
'username'
,
None
)
username
=
request
.
POST
.
get
(
'username'
,
None
)
password
=
request
.
POST
.
get
(
'password'
,
''
)
password
=
request
.
POST
.
get
(
'password'
,
''
)
name
=
request
.
POST
.
get
(
'name'
,
None
)
name
=
request
.
POST
.
get
(
'name'
,
None
)
email
=
request
.
POST
.
get
(
'email'
,
''
)
email
=
request
.
POST
.
get
(
'email'
,
''
)
manage_group_id
=
request
.
POST
.
get
(
'manage_group
'
)
dept_id
=
request
.
POST
.
get
(
'dept_id
'
)
auth_groups
=
request
.
POST
.
getlist
(
'groups'
,
None
)
auth_groups
=
request
.
POST
.
getlist
(
'groups'
,
None
)
groups
=
auth_groups
groups
.
append
(
manage_group_id
)
groups_str
=
' '
.
join
(
auth_groups
)
role_post
=
request
.
POST
.
get
(
'role'
,
'CU'
)
role_post
=
request
.
POST
.
get
(
'role'
,
'CU'
)
ssh_pwd
=
request
.
POST
.
get
(
'ssh_pwd'
,
''
)
ssh_key_pwd
=
request
.
POST
.
get
(
'ssh_key_pwd'
,
''
)
ssh_key_pwd
=
request
.
POST
.
get
(
'ssh_key_pwd'
,
''
)
is_active
=
request
.
POST
.
get
(
'is_active'
,
'1'
)
is_active
=
request
.
POST
.
get
(
'is_active'
,
'1'
)
ldap_pwd
=
gen_rand_pwd
(
16
)
ldap_pwd
=
gen_rand_pwd
(
16
)
...
...
static/img/user.png
0 → 100644
View file @
d90b5919
16.9 KB
templates/juser/dept_add.html
0 → 100644
View file @
d90b5919
{% extends 'base.html' %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<h5>
填写基本信息
</h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<form
id=
"deptForm"
method=
"post"
class=
"form-horizontal"
action=
""
>
{% if error %}
<div
class=
"alert alert-warning text-center"
>
{{ error }}
</div>
{% endif %}
{% if msg %}
<div
class=
"alert alert-success text-center"
>
{{ msg }}
</div>
{% endif %}
<div
class=
"form-group"
>
<label
for=
"name"
class=
"col-sm-2 control-label"
>
部门名称
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
{% if error %}
<input
id=
"name"
name=
"name"
placeholder=
"Dept name"
type=
"text"
class=
"form-control"
value=
"{{ name }}"
>
{% else %}
<input
id=
"name"
name=
"name"
placeholder=
"Dept name"
type=
"text"
class=
"form-control"
>
{% endif %}
</div>
</div>
{#
<div
class=
"hr-line-dashed"
></div>
#}
{#
<div
class=
"form-group"
>
#}
{#
<label
for=
"users"
class=
"col-lg-2 control-label"
>
管理员
</label>
#}
{#
<div
class=
"col-sm-3"
>
#}
{#
<select
id=
"users"
name=
"users"
size=
"12"
class=
"form-control m-b"
multiple
>
#}
{# {% for user in users %}#}
{#
<option
value=
"{{ user.id }}"
>
{{ user.name }}
</option>
#}
{# {% endfor %}#}
{#
</select>
#}
{#
</div>
#}
{#
<div
class=
"col-sm-1"
>
#}
{#
<div
class=
"btn-group"
style=
"margin-top: 50px;"
>
#}
{#
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('users', 'users_selected')"
><i
class=
"fa fa-chevron-right"
></i></button>
#}
{#
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('users_selected', 'users')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
#}
{#
</div>
#}
{#
</div>
#}
{#
<div
class=
"col-sm-3"
>
#}
{#
<div>
#}
{#
<select
id=
"users_selected"
name=
"users_selected"
class=
"form-control m-b"
size=
"12"
multiple
>
#}
{#
</select>
#}
{#
</div>
#}
{#
</div>
#}
{#
</div>
#}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"comment"
class=
"col-sm-2 control-label"
>
备注
</label>
<div
class=
"col-sm-8"
>
{% if error %}
<input
id=
"comment"
name=
"comment"
placeholder=
"Comment"
type=
"text"
class=
"form-control"
value=
"{{ comment }}"
>
{% else %}
<input
id=
"comment"
name=
"comment"
placeholder=
"Comment"
type=
"text"
class=
"form-control"
>
{% endif %}
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-2"
>
<button
class=
"btn btn-white"
type=
"reset"
>
取消
</button>
<button
id=
"submit_button"
class=
"btn btn-primary"
type=
"submit"
>
确认保存
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$
(
'#deptForm'
).
validator
({
timely
:
2
,
theme
:
"yellow_right_effect"
,
fields
:
{
"name"
:
{
rule
:
"required"
,
tip
:
"输入部门名称"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
}
},
valid
:
function
(
form
)
{
form
.
submit
();
}
});
function
change_type
(
type
){
$
.
post
(
'/juser/group_add_ajax/'
,
{
'type'
:
type
},
function
(
data
){
$
(
'#users'
).
html
(
data
)
})
}
$
(
document
).
ready
(
function
(){
$
(
"#submit_button"
).
click
(
function
(){
$
(
'#users_selected option'
).
each
(
function
(){
$
(
this
).
prop
(
'selected'
,
true
)
})
})
})
</script>
{% endblock %}
\ No newline at end of file
templates/juser/dept_list.html
0 → 100644
View file @
d90b5919
{% extends 'base.html' %}
{% load mytags %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<h5>
查看部门
</h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<div
class=
""
>
<a
target=
"_blank"
href=
"/juser/dept_add/"
class=
"btn btn-sm btn-primary "
>
添加
</a>
</div>
<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>
<th
class=
"text-center"
>
操作
</th>
</tr>
</thead>
<tbody>
{% for dept in contacts.object_list %}
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
{{ dept.name }}
</td>
<td
class=
"text-center"
>
{{ dept.name }}
</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>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div
class=
"row"
>
<div
class=
"col-sm-6"
>
<div
class=
"dataTables_info"
id=
"editable_info"
role=
"status"
aria-live=
"polite"
>
Showing {{ contacts.start_index }} to {{ contacts.end_index }} of {{ p.count }} entries
</div>
</div>
<div
class=
"col-sm-6"
>
<div
class=
"dataTables_paginate paging_simple_numbers"
id=
"editable_paginate"
>
<ul
class=
"pagination"
style=
"margin-top: 0; float: right"
>
{% if contacts.has_previous %}
<li
class=
"paginate_button previous"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"?page={{ contacts.previous_page_number }}"
>
Previous
</a>
</li>
{% else %}
<li
class=
"paginate_button previous disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"#"
>
Previous
</a>
</li>
{% endif %}
{% for page in p.page_range %}
{% ifequal offset1 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>
{% endifequal %}
{% endfor %}
{% if contacts.has_next %}
<li
class=
"paginate_button next"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"?page={{ contacts.next_page_number }}"
>
Next
</a>
</li>
{% else %}
<li
class=
"paginate_button next disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"#"
>
Next
</a>
</li>
{% endif %}
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
$
(
document
).
ready
(
function
(){
$
(
".iframe"
).
colorbox
({
iframe
:
true
,
width
:
"70%"
,
height
:
"70%"
});
});
</script>
{% endblock %}
\ No newline at end of file
templates/juser/group_add.html
View file @
d90b5919
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
<div
class=
"col-lg-10"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<div
class=
"ibox-title"
>
<h5>
填写基本信息
<small>
Fill group info.
</small>
</h5>
<h5>
填写基本信息
</h5>
<div
class=
"ibox-tools"
>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
<i
class=
"fa fa-chevron-up"
></i>
...
@@ -42,15 +42,11 @@
...
@@ -42,15 +42,11 @@
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"
group_type"
class=
"col-sm-2 control-label"
>
类型
<span
class=
"red-fonts"
>
*
</span></label>
<label
for=
"
dept_id"
class=
"col-sm-2 control-label"
>
部门
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<select
id=
"group_type"
name=
"group_type"
class=
"form-control m-b"
onchange=
"change_type(this.value)"
>
<select
id=
"dept_id"
name=
"dept_id"
class=
"form-control m-b"
>
{% for t, type_name in group_types.items %}
{% for dept in dept_all %}
{% ifequal t group_type_select %}
<option
value=
"{{ dept.id }}"
selected
>
{{ dept.name }}
</option>
<option
value=
"{{ t }}"
selected
>
{{ type_name }}
</option>
{% else %}
<option
value=
"{{ t }}"
>
{{ type_name }}
</option>
{% endifequal %}
{% endfor %}
{% endfor %}
</select>
</select>
</div>
</div>
...
@@ -60,7 +56,7 @@
...
@@ -60,7 +56,7 @@
<label
for=
"users"
class=
"col-lg-2 control-label"
>
用户
</label>
<label
for=
"users"
class=
"col-lg-2 control-label"
>
用户
</label>
<div
class=
"col-sm-3"
>
<div
class=
"col-sm-3"
>
<select
id=
"users"
name=
"users"
size=
"12"
class=
"form-control m-b"
multiple
>
<select
id=
"users"
name=
"users"
size=
"12"
class=
"form-control m-b"
multiple
>
{% for user in user
s
%}
{% for user in user
_all
%}
<option
value=
"{{ user.id }}"
>
{{ user.name }}
</option>
<option
value=
"{{ user.id }}"
>
{{ user.name }}
</option>
{% endfor %}
{% endfor %}
</select>
</select>
...
...
templates/juser/user_add.html
View file @
d90b5919
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
<div
class=
"col-lg-10"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<div
class=
"ibox-title"
>
<h5>
填写基本信息
<small>
Add user info.
</small>
</h5>
<h5>
填写基本信息
</h5>
<div
class=
"ibox-tools"
>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
<i
class=
"fa fa-chevron-up"
></i>
...
@@ -74,12 +74,8 @@
...
@@ -74,12 +74,8 @@
<label
for=
"manage_group"
class=
"col-lg-2 control-label"
>
部门
<span
class=
"red-fonts"
>
*
</span></label>
<label
for=
"manage_group"
class=
"col-lg-2 control-label"
>
部门
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<select
id=
"manage_group"
name=
"manage_group"
class=
"form-control m-b"
>
<select
id=
"manage_group"
name=
"manage_group"
class=
"form-control m-b"
>
{% for group in manage_groups %}
{% for dept in dept_all %}
{% ifequal group.id manage_group_id %}
<option
value=
"{{ dept.id }}"
>
{{ dept.name }}
</option>
<option
value=
"{{ group.id }}"
selected
>
{{ group.name }}
</option>
{% else %}
<option
value=
"{{ group.id }}"
>
{{ group.name }}
</option>
{% endifequal %}
{% endfor %}
{% endfor %}
</select>
</select>
</div>
</div>
...
@@ -89,7 +85,7 @@
...
@@ -89,7 +85,7 @@
<label
for=
"groups"
class=
"col-lg-2 control-label"
>
小组
</label>
<label
for=
"groups"
class=
"col-lg-2 control-label"
>
小组
</label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<select
id=
"groups"
name=
"groups"
class=
"form-control m-b"
multiple
size=
"12"
>
<select
id=
"groups"
name=
"groups"
class=
"form-control m-b"
multiple
size=
"12"
>
{% for group in
auth_
groups %}
{% for group in groups %}
{% if groups_str %}
{% if groups_str %}
{% if group.id|int2str in groups_str %}
{% if group.id|int2str in groups_str %}
<option
value=
"{{ group.id }}"
selected
>
{{ group.name }}
</option>
<option
value=
"{{ group.id }}"
selected
>
{{ group.name }}
</option>
...
@@ -123,16 +119,6 @@
...
@@ -123,16 +119,6 @@
</div>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"ssh_pwd"
class=
"col-sm-2 control-label"
>
SSH密码
</label>
<div
class=
"col-sm-8"
>
<input
id=
"ssh_pwd"
name=
"ssh_pwd"
type=
"password"
placeholder=
"SSH Password"
class=
"form-control"
value=
"{{ ssh_pwd }}"
>
<span
class=
"help-block m-b-none"
>
如果使用password方式,该密码是用户在后端服务器的密码
</span>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"email"
class=
"col-sm-2 control-label"
>
Email
<span
class=
"red-fonts"
>
*
</span></label>
<label
for=
"email"
class=
"col-sm-2 control-label"
>
Email
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
...
...
templates/nav.html
View file @
d90b5919
...
@@ -16,8 +16,10 @@
...
@@ -16,8 +16,10 @@
<ul
class=
"nav nav-second-level"
>
<ul
class=
"nav nav-second-level"
>
<li
id=
"user_list"
><a
href=
"/juser/user_list/"
>
查看用户
<span
class=
"label label-primary pull-right"
>
16/24
</span></a></li>
<li
id=
"user_list"
><a
href=
"/juser/user_list/"
>
查看用户
<span
class=
"label label-primary pull-right"
>
16/24
</span></a></li>
<li
id=
"user_add"
><a
href=
"/juser/user_add/"
>
添加用户
</a></li>
<li
id=
"user_add"
><a
href=
"/juser/user_add/"
>
添加用户
</a></li>
<li
id=
"group_list"
><a
href=
"/juser/group_list/"
>
查看属组
</a></li>
<li
id=
"dept_list"
><a
href=
"/juser/dept_list/"
>
查看部门
</a></li>
<li
id=
"group_add"
><a
href=
"/juser/group_add/"
>
添加属组
</a></li>
<li
id=
"dept_add"
><a
href=
"/juser/dept_add/"
>
添加部门
</a></li>
<li
id=
"group_list"
><a
href=
"/juser/group_list/"
>
查看小组
</a></li>
<li
id=
"group_add"
><a
href=
"/juser/group_add/"
>
添加小组
</a></li>
</ul>
</ul>
</li>
</li>
<li
id=
"jasset"
>
<li
id=
"jasset"
>
...
...
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