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
8ddda8e5
Commit
8ddda8e5
authored
Sep 12, 2019
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update] 修复页面bug和popover的问题
parent
444f494c
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
52 additions
and
23 deletions
+52
-23
asset.py
apps/assets/forms/asset.py
+7
-2
node.py
apps/assets/models/node.py
+7
-4
asset.py
apps/assets/views/asset.py
+1
-1
ftp_log_list.html
apps/audits/templates/audits/ftp_log_list.html
+3
-0
login_log_list.html
apps/audits/templates/audits/login_log_list.html
+6
-0
operate_log_list.html
apps/audits/templates/audits/operate_log_list.html
+6
-0
password_change_log_list.html
apps/audits/templates/audits/password_change_log_list.html
+6
-0
api.py
apps/common/mixins/api.py
+3
-2
tasks.py
apps/ops/tasks.py
+1
-1
command_execution_list.html
apps/ops/templates/ops/command_execution_list.html
+5
-8
api.py
apps/orgs/mixins/api.py
+4
-0
inspinia.js
apps/static/js/inspinia.js
+2
-3
jumpserver.js
apps/static/js/jumpserver.js
+1
-2
No files found.
apps/assets/forms/asset.py
View file @
8ddda8e5
...
@@ -33,11 +33,16 @@ class AssetCreateForm(OrgModelForm):
...
@@ -33,11 +33,16 @@ class AssetCreateForm(OrgModelForm):
return
return
nodes_field
=
self
.
fields
[
'nodes'
]
nodes_field
=
self
.
fields
[
'nodes'
]
if
self
.
instance
:
if
self
.
instance
:
nodes_field
.
choices
=
(
(
n
.
id
,
n
.
full_value
)
for
n
in
nodes_field
.
choices
=
[
(
n
.
id
,
n
.
full_value
)
for
n
in
self
.
instance
.
nodes
.
all
()
)
self
.
instance
.
nodes
.
all
()
]
else
:
else
:
nodes_field
.
choices
=
[]
nodes_field
.
choices
=
[]
def
add_nodes_initial
(
self
,
node
):
nodes_field
=
self
.
fields
[
'nodes'
]
nodes_field
.
choices
.
append
((
node
.
id
,
node
.
full_value
))
nodes_field
.
initial
=
[
node
]
class
Meta
:
class
Meta
:
model
=
Asset
model
=
Asset
fields
=
[
fields
=
[
...
...
apps/assets/models/node.py
View file @
8ddda8e5
...
@@ -37,19 +37,22 @@ class TreeMixin:
...
@@ -37,19 +37,22 @@ class TreeMixin:
def
tree
(
cls
):
def
tree
(
cls
):
from
..utils
import
TreeService
from
..utils
import
TreeService
tree_updated_time
=
cache
.
get
(
cls
.
tree_updated_time_cache_key
,
0
)
tree_updated_time
=
cache
.
get
(
cls
.
tree_updated_time_cache_key
,
0
)
now
=
time
.
time
()
# 什么时候重新初始化 _tree_service
if
not
cls
.
tree_created_time
or
\
if
not
cls
.
tree_created_time
or
\
tree_updated_time
>
cls
.
tree_created_time
:
tree_updated_time
>
cls
.
tree_created_time
:
logger
.
debug
(
"Create node tree"
)
logger
.
debug
(
"Create node tree"
)
tree
=
TreeService
.
new
()
tree
=
TreeService
.
new
()
cls
.
tree_created_time
=
time
.
time
()
cls
.
tree_created_time
=
now
cls
.
tree_assets_created_time
=
time
.
time
()
cls
.
tree_assets_created_time
=
now
cls
.
_tree_service
=
tree
cls
.
_tree_service
=
tree
return
tree
return
tree
# 是否要重新初始化节点资产
node_assets_updated_time
=
cache
.
get
(
cls
.
tree_assets_cache_key
,
0
)
node_assets_updated_time
=
cache
.
get
(
cls
.
tree_assets_cache_key
,
0
)
if
not
cls
.
tree_assets_created_time
or
\
if
not
cls
.
tree_assets_created_time
or
\
node_assets_updated_time
>
cls
.
tree_assets_created_time
:
node_assets_updated_time
>
cls
.
tree_assets_created_time
:
cls
.
_tree_service
.
init_assets
_async
()
cls
.
_tree_service
.
init_assets
()
cls
.
tree_assets_created_time
=
time
.
time
()
cls
.
tree_assets_created_time
=
now
logger
.
debug
(
"Refresh node tree assets"
)
logger
.
debug
(
"Refresh node tree assets"
)
return
cls
.
_tree_service
return
cls
.
_tree_service
...
...
apps/assets/views/asset.py
View file @
8ddda8e5
...
@@ -86,7 +86,7 @@ class AssetCreateView(PermissionsMixin, FormMixin, TemplateView):
...
@@ -86,7 +86,7 @@ class AssetCreateView(PermissionsMixin, FormMixin, TemplateView):
node
=
get_object_or_none
(
Node
,
id
=
node_id
)
node
=
get_object_or_none
(
Node
,
id
=
node_id
)
else
:
else
:
node
=
Node
.
org_root
()
node
=
Node
.
org_root
()
form
[
"nodes"
]
.
initial
=
node
form
.
add_nodes_initial
(
node
)
return
form
return
form
def
get_protocol_formset
(
self
):
def
get_protocol_formset
(
self
):
...
...
apps/audits/templates/audits/ftp_log_list.html
View file @
8ddda8e5
...
@@ -11,6 +11,9 @@
...
@@ -11,6 +11,9 @@
#search_btn
{
#search_btn
{
margin-bottom
:
0
;
margin-bottom
:
0
;
}
}
.form-control
{
height
:
30px
;
}
</style>
</style>
{% endblock %}
{% endblock %}
...
...
apps/audits/templates/audits/login_log_list.html
View file @
8ddda8e5
...
@@ -8,6 +8,12 @@
...
@@ -8,6 +8,12 @@
#search_btn
{
#search_btn
{
margin-bottom
:
0
;
margin-bottom
:
0
;
}
}
.form-control
{
height
:
30px
;
}
.select2-selection__rendered
span
.select2-selection
,
.select2-container
.select2-selection--single
{
height
:
30px
!important
;
}
</style>
</style>
{% endblock %}
{% endblock %}
...
...
apps/audits/templates/audits/operate_log_list.html
View file @
8ddda8e5
...
@@ -11,6 +11,12 @@
...
@@ -11,6 +11,12 @@
#search_btn
{
#search_btn
{
margin-bottom
:
0
;
margin-bottom
:
0
;
}
}
.form-control
{
height
:
30px
;
}
.select2-selection__rendered
span
.select2-selection
,
.select2-container
.select2-selection--single
{
height
:
30px
!important
;
}
</style>
</style>
{% endblock %}
{% endblock %}
...
...
apps/audits/templates/audits/password_change_log_list.html
View file @
8ddda8e5
...
@@ -11,6 +11,12 @@
...
@@ -11,6 +11,12 @@
#search_btn
{
#search_btn
{
margin-bottom
:
0
;
margin-bottom
:
0
;
}
}
.form-control
{
height
:
30px
;
}
.select2-selection__rendered
span
.select2-selection
,
.select2-container
.select2-selection--single
{
height
:
30px
!important
;
}
</style>
</style>
{% endblock %}
{% endblock %}
...
...
apps/common/mixins/api.py
View file @
8ddda8e5
...
@@ -44,8 +44,9 @@ class IDInCacheFilterMixin(object):
...
@@ -44,8 +44,9 @@ class IDInCacheFilterMixin(object):
return
queryset
return
queryset
cache_key
=
KEY_CACHE_RESOURCES_ID
.
format
(
spm
)
cache_key
=
KEY_CACHE_RESOURCES_ID
.
format
(
spm
)
resources_id
=
cache
.
get
(
cache_key
)
resources_id
=
cache
.
get
(
cache_key
)
if
resources_id
and
isinstance
(
resources_id
,
list
):
if
not
resources_id
or
not
isinstance
(
resources_id
,
list
):
queryset
=
queryset
.
filter
(
id__in
=
resources_id
)
queryset
=
queryset
.
none
()
queryset
=
queryset
.
filter
(
id__in
=
resources_id
)
return
queryset
return
queryset
...
...
apps/ops/tasks.py
View file @
8ddda8e5
...
@@ -40,7 +40,7 @@ def run_ansible_task(tid, callback=None, **kwargs):
...
@@ -40,7 +40,7 @@ def run_ansible_task(tid, callback=None, **kwargs):
logger
.
error
(
"No task found"
)
logger
.
error
(
"No task found"
)
@shared_task
(
soft_time_limit
=
60
)
@shared_task
(
soft_time_limit
=
60
,
queue
=
"ansible"
)
def
run_command_execution
(
cid
,
**
kwargs
):
def
run_command_execution
(
cid
,
**
kwargs
):
execution
=
get_object_or_none
(
CommandExecution
,
id
=
cid
)
execution
=
get_object_or_none
(
CommandExecution
,
id
=
cid
)
if
execution
:
if
execution
:
...
...
apps/ops/templates/ops/command_execution_list.html
View file @
8ddda8e5
...
@@ -9,6 +9,9 @@
...
@@ -9,6 +9,9 @@
<link
href=
"{% static 'css/plugins/select2/select2.min.css' %}"
rel=
"stylesheet"
>
<link
href=
"{% static 'css/plugins/select2/select2.min.css' %}"
rel=
"stylesheet"
>
<script
src=
"{% static 'js/plugins/select2/select2.full.min.js' %}"
></script>
<script
src=
"{% static 'js/plugins/select2/select2.full.min.js' %}"
></script>
<style>
<style>
.form-control
{
height
:
30px
;
}
#search_btn
{
#search_btn
{
margin-bottom
:
0
;
margin-bottom
:
0
;
...
@@ -88,13 +91,6 @@
...
@@ -88,13 +91,6 @@
<script
src=
"{% static "
js
/
plugins
/
footable
/
footable
.
all
.
min
.
js
"
%}"
></script>
<script
src=
"{% static "
js
/
plugins
/
footable
/
footable
.
all
.
min
.
js
"
%}"
></script>
<script>
<script>
$
(
document
).
ready
(
function
()
{
$
(
document
).
ready
(
function
()
{
{
#
$
(
'table'
).
DataTable
({
#
}
{
#
"searching"
:
false
,
#
}
{
#
"paging"
:
false
,
#
}
{
#
"bInfo"
:
false
,
#
}
{
#
"order"
:
[]
#
}
{
#
});
#
}
{
#
$
(
'.footable'
).
footable
();
#
}
$
(
'.select2'
).
select2
({
$
(
'.select2'
).
select2
({
dropdownAutoWidth
:
true
,
dropdownAutoWidth
:
true
,
width
:
'auto'
width
:
'auto'
...
@@ -114,9 +110,10 @@ $(document).ready(function() {
...
@@ -114,9 +110,10 @@ $(document).ready(function() {
data_list
.
pop
();
data_list
.
pop
();
}
}
var
html
=
createPopover
(
data_list
);
var
html
=
createPopover
(
data_list
);
console
.
log
(
html
);
$
(
this
).
html
(
html
);
$
(
this
).
html
(
html
);
});
});
$
(
'[data-toggle=
"popover"]'
).
popover
(
);
$
(
'[data-toggle=
popover]'
).
popover
({
html
:
true
}
);
})
})
</script>
</script>
{% endblock %}
{% endblock %}
...
...
apps/orgs/mixins/api.py
View file @
8ddda8e5
...
@@ -35,6 +35,10 @@ class OrgBulkModelViewSet(IDInCacheFilterMixin, BulkModelViewSet):
...
@@ -35,6 +35,10 @@ class OrgBulkModelViewSet(IDInCacheFilterMixin, BulkModelViewSet):
return
queryset
return
queryset
def
allow_bulk_destroy
(
self
,
qs
,
filtered
):
def
allow_bulk_destroy
(
self
,
qs
,
filtered
):
if
qs
.
count
()
<=
filtered
.
count
():
return
False
if
self
.
request
.
query_params
.
get
(
'spm'
,
''
):
return
True
return
False
return
False
...
...
apps/static/js/inspinia.js
View file @
8ddda8e5
...
@@ -76,10 +76,9 @@ $(document).ready(function () {
...
@@ -76,10 +76,9 @@ $(document).ready(function () {
if
(
!
$
(
"body"
).
hasClass
(
'body-small'
))
{
if
(
!
$
(
"body"
).
hasClass
(
'body-small'
))
{
fix_height
();
fix_height
();
}
}
})
})
;
$
(
"[data-toggle=popover]"
)
$
(
"[data-toggle=popover]"
).
popover
();
.
popover
();
});
});
...
...
apps/static/js/jumpserver.js
View file @
8ddda8e5
...
@@ -774,8 +774,7 @@ function createPopover(dataset, title, callback) {
...
@@ -774,8 +774,7 @@ function createPopover(dataset, title, callback) {
});
});
dataset
=
new_dataset
;
dataset
=
new_dataset
;
}
}
var
data_content
=
dataset
.
join
(
"</br>"
);
var
data_content
=
dataset
.
join
(
"<br>"
);
var
html
=
"<a data-toggle='popover' data-content='"
+
data_content
+
"'>"
+
dataset
.
length
+
"</a>"
;
var
html
=
"<a data-toggle='popover' data-content='"
+
data_content
+
"'>"
+
dataset
.
length
+
"</a>"
;
return
html
;
return
html
;
}
}
...
...
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