diff --git a/apps/assets/templates/assets/asset_detail.html b/apps/assets/templates/assets/asset_detail.html
index 51e5adaf2..c766f583c 100644
--- a/apps/assets/templates/assets/asset_detail.html
+++ b/apps/assets/templates/assets/asset_detail.html
@@ -77,6 +77,10 @@
{% trans 'Admin user' %}: |
{{ asset.admin_user }} |
+
+ {% trans 'Domain' %}: |
+ {{ asset.domain|default:"" }} |
+
{% trans 'Vendor' %}: |
{{ asset.vendor|default:"" }} |
diff --git a/apps/ops/templates/ops/command_execution_create.html b/apps/ops/templates/ops/command_execution_create.html
index 9a0916153..a832b7fc9 100644
--- a/apps/ops/templates/ops/command_execution_create.html
+++ b/apps/ops/templates/ops/command_execution_create.html
@@ -171,7 +171,7 @@ function initResultTerminal() {
cursorBlink: false,
screenKeys: false,
fontFamily: '"Monaco", "Consolas", "monospace"',
- fontSize: 12,
+ fontSize: 13,
rightClickSelectsWord: true,
disableStdin: true,
theme: {
@@ -182,6 +182,10 @@ function initResultTerminal() {
term.write("选择左侧资产, 选择运行的系统用户,批量执行命令\r\n")
}
+function wrapperError(msg) {
+ return '\033[31m' + msg + '\033[0m' + '\r\n';
+}
+
function execute() {
if (!term) {
initResultTerminal()
@@ -192,6 +196,18 @@ function execute() {
var hosts = getSelectedAssetsNode().map(function (node) {
return node.id;
});
+ if (hosts.length === 0) {
+ term.write(wrapperError('没有选中资产'));
+ return
+ }
+ if (!command) {
+ term.write(wrapperError('没有输入命令'));
+ return
+ }
+ if (!run_as) {
+ term.write(wrapperError('没有选择运行用户'));
+ return
+ }
var data = {
hosts: hosts,
run_as: run_as,
@@ -247,7 +263,10 @@ function execute() {
var editor;
$(document).ready(function(){
systemUserId = $('#system-users-select').val();
- $(".select2").select2().on('select2:select', function(evt) {
+ $(".select2").select2({
+ dropdownAutoWidth : true,
+ width: 'auto'
+ }).on('select2:select', function(evt) {
var data = evt.params.data;
systemUserId = data.id;
initTree();
diff --git a/apps/ops/templates/ops/command_execution_list.html b/apps/ops/templates/ops/command_execution_list.html
index 10f3c0fe3..4c38aa2d1 100644
--- a/apps/ops/templates/ops/command_execution_list.html
+++ b/apps/ops/templates/ops/command_execution_list.html
@@ -3,6 +3,18 @@
{% load static %}
{% load common_tags %}
+{% block custom_head_css_js %}
+
+
+
+
+
+{% endblock %}
+
{% block content_left_head %}
{% endblock %}
@@ -39,46 +51,49 @@
{% endblock %}
-{% block table_head %}
- |
- {% trans 'Hosts' %} |
- {% trans 'User' %} |
- {% trans 'Command' %} |
- {% trans 'Run as' %} |
- {% trans 'Output' %} |
- {% trans 'Finished' %} |
- {% trans 'Success' %} |
- {% trans 'Date start' %} |
- {% trans 'Date finished' %} |
-{% endblock %}
-
-{% block table_body %}
+{% block table_container %}
+
{% endblock %}
{% block custom_foot_js %}
+
{% endblock %}
diff --git a/apps/perms/api.py b/apps/perms/api.py
index 37497e2f1..e07fe17a5 100644
--- a/apps/perms/api.py
+++ b/apps/perms/api.py
@@ -227,8 +227,9 @@ class UserGrantedNodesWithAssetsAsTreeApi(ListAPIView):
@staticmethod
def parse_asset_to_tree_node(node, asset, system_users):
+ system_users_protocol_matched = [s for s in system_users if s.protocol == asset.protocol]
system_user_serializer = serializers.GrantedSystemUserSerializer(
- system_users, many=True
+ system_users_protocol_matched, many=True
)
asset_serializer = serializers.GrantedAssetSerializer(asset)
icon_skin = 'file'