Commit d6171f7f authored by ibuler's avatar ibuler

merge

parents 9acba2dd 75e1ea7f
This diff is collapsed.
...@@ -21,6 +21,7 @@ CONF.read('%s/jumpserver.conf' % BASE_DIR) ...@@ -21,6 +21,7 @@ CONF.read('%s/jumpserver.conf' % BASE_DIR)
def get_user_info(request, offset): def get_user_info(request, offset):
""" 获取用户信息及环境 """
env_dic = {'online': 0, 'offline': 1} env_dic = {'online': 0, 'offline': 1}
env = env_dic[offset] env = env_dic[offset]
keyword = request.GET.get('keyword', '') keyword = request.GET.get('keyword', '')
...@@ -33,32 +34,37 @@ def get_user_info(request, offset): ...@@ -33,32 +34,37 @@ def get_user_info(request, offset):
def get_user_log(ret_list): def get_user_log(ret_list):
""" 获取不同类型用户日志记录 """
request, keyword, env, username, dept_name = ret_list request, keyword, env, username, dept_name = ret_list
post_all = Log.objects.filter(is_finished=env).order_by('-start_time')
post_keyword_all = Log.objects.filter(Q(user__contains=keyword) |
Q(host__contains=keyword)) \
.filter(is_finished=env).order_by('-start_time')
if is_super_user(request): if is_super_user(request):
if keyword: if keyword:
posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \ posts = post_keyword_all
.filter(is_finished=env).order_by('-start_time')
else: else:
posts = Log.objects.filter(is_finished=env).order_by('-start_time') posts = post_all
elif is_group_admin(request): elif is_group_admin(request):
if keyword: if keyword:
posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \ posts = post_keyword_all.filter(dept_name=dept_name)
.filter(is_finished=env).filter(dept_name=dept_name).order_by('-start_time')
else: else:
posts = Log.objects.filter(is_finished=env).filter(dept_name=dept_name).order_by('-start_time') posts = post_all.filter(dept_name=dept_name)
elif is_common_user(request): elif is_common_user(request):
if keyword: if keyword:
posts = Log.objects.filter(user=username).filter(Q(user__contains=keyword) | Q(host__contains=keyword))\ posts = post_keyword_all.filter(user=username)
.filter(is_finished=env).order_by('-start_time')
else: else:
posts = Log.objects.filter(is_finished=env).filter(user=username).order_by('-start_time') posts = post_all.filter(user=username)
return posts return posts
@require_login @require_login
def log_list(request, offset): def log_list(request, offset):
""" 显示日志 """
header_title, path1, path2 = u'查看日志', u'查看日志', u'在线用户' header_title, path1, path2 = u'查看日志', u'查看日志', u'在线用户'
keyword = request.GET.get('keyword', '') keyword = request.GET.get('keyword', '')
web_socket_host = CONF.get('websocket', 'web_socket_host') web_socket_host = CONF.get('websocket', 'web_socket_host')
...@@ -70,6 +76,7 @@ def log_list(request, offset): ...@@ -70,6 +76,7 @@ def log_list(request, offset):
@require_admin @require_admin
def log_kill(request): def log_kill(request):
""" 杀掉connect进程 """
pid = request.GET.get('id', '') pid = request.GET.get('id', '')
log = Log.objects.filter(pid=pid) log = Log.objects.filter(pid=pid)
if log: if log:
...@@ -85,6 +92,7 @@ def log_kill(request): ...@@ -85,6 +92,7 @@ def log_kill(request):
@require_login @require_login
def log_history(request): def log_history(request):
""" 命令历史记录 """
log_id = request.GET.get('id', 0) log_id = request.GET.get('id', 0)
log = Log.objects.filter(id=int(log_id)) log = Log.objects.filter(id=int(log_id))
if log: if log:
...@@ -108,6 +116,7 @@ def log_history(request): ...@@ -108,6 +116,7 @@ def log_history(request):
@require_login @require_login
def log_search(request): def log_search(request):
""" 日志搜索 """
offset = request.GET.get('env', '') offset = request.GET.get('env', '')
keyword = request.GET.get('keyword', '') keyword = request.GET.get('keyword', '')
posts = get_user_log(get_user_info(request, offset)) posts = get_user_log(get_user_info(request, offset))
......
# coding: utf-8 # coding: utf-8
import sys import sys
reload(sys) reload(sys)
sys.setdefaultencoding('utf8') sys.setdefaultencoding('utf8')
...@@ -182,6 +183,7 @@ def perm_edit_adm(request): ...@@ -182,6 +183,7 @@ def perm_edit_adm(request):
return HttpResponseRedirect('/jperm/perm_list/') return HttpResponseRedirect('/jperm/perm_list/')
return render_to_response('jperm/perm_edit.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/perm_edit.html', locals(), context_instance=RequestContext(request))
@require_admin @require_admin
def perm_detail(request): def perm_detail(request):
header_title, path1, path2 = u'编辑授权', u'授权管理', u'授权详情' header_title, path1, path2 = u'编辑授权', u'授权管理', u'授权详情'
...@@ -241,7 +243,6 @@ def unicode2str(unicode_list): ...@@ -241,7 +243,6 @@ def unicode2str(unicode_list):
def sudo_ldap_add(user_group, user_runas, asset_groups_select, def sudo_ldap_add(user_group, user_runas, asset_groups_select,
cmd_groups_select): cmd_groups_select):
if not LDAP_ENABLE: if not LDAP_ENABLE:
return True return True
...@@ -479,6 +480,7 @@ def sudo_refresh(request): ...@@ -479,6 +480,7 @@ def sudo_refresh(request):
sudo_ldap_add(user_group, user_runas, asset_groups_select, cmd_groups_select) sudo_ldap_add(user_group, user_runas, asset_groups_select, cmd_groups_select)
return HttpResponse('ok') return HttpResponse('ok')
# @require_admin # @require_admin
# def sudo_detail(request): # def sudo_detail(request):
# header_title, path1, path2 = u'Sudo授权详情', u'授权管理', u'授权详情' # header_title, path1, path2 = u'Sudo授权详情', u'授权管理', u'授权详情'
...@@ -669,15 +671,19 @@ def cmd_detail(request): ...@@ -669,15 +671,19 @@ def cmd_detail(request):
@require_login @require_login
def perm_apply(request): def perm_apply(request):
""" 权限申请 """
header_title, path1, path2 = u'主机权限申请', u'权限管理', u'申请主机' header_title, path1, path2 = u'主机权限申请', u'权限管理', u'申请主机'
user_id, username = get_session_user_info(request)[0:2] user_id, username = get_session_user_info(request)[0:2]
dept_id, deptname, dept = get_session_user_info(request)[3:6] dept_id, deptname, dept = get_session_user_info(request)[3:6]
perm_host = user_perm_asset_api(username) perm_host = user_perm_asset_api(username)
all_host = Asset.objects.filter(dept=dept) all_host = Asset.objects.filter(dept=dept)
perm_group = user_perm_group_api(username) perm_group = user_perm_group_api(username)
all_group = dept.bisgroup_set.all() all_group = dept.bisgroup_set.all()
posts = [g for g in all_host if g not in perm_host] posts = [g for g in all_host if g not in perm_host]
egroup = [d for d in all_group if d not in perm_group] egroup = [d for d in all_group if d not in perm_group]
dept_da = User.objects.filter(dept_id=dept_id, role='DA') dept_da = User.objects.filter(dept_id=dept_id, role='DA')
if request.method == 'POST': if request.method == 'POST':
...@@ -693,7 +699,8 @@ def perm_apply(request): ...@@ -693,7 +699,8 @@ def perm_apply(request):
group_lis = ', '.join(group) group_lis = ', '.join(group)
hosts_lis = ', '.join(hosts) hosts_lis = ', '.join(hosts)
time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
a = Apply.objects.create(applyer=applyer, dept=dept, bisgroup=group, date_add=datetime.datetime.now(), asset=hosts, status=0, comment=comment) a = Apply.objects.create(applyer=applyer, dept=dept, bisgroup=group, date_add=datetime.datetime.now(),
asset=hosts, status=0, comment=comment)
uuid = a.uuid uuid = a.uuid
url = "http://%s:%s/jperm/apply_exec/?uuid=%s" % (SEND_IP, SEND_PORT, uuid) url = "http://%s:%s/jperm/apply_exec/?uuid=%s" % (SEND_IP, SEND_PORT, uuid)
mail_msg = """ mail_msg = """
...@@ -710,13 +717,14 @@ def perm_apply(request): ...@@ -710,13 +717,14 @@ def perm_apply(request):
""" % (da.username, applyer, group_lis, hosts_lis, time_now, comment, url) """ % (da.username, applyer, group_lis, hosts_lis, time_now, comment, url)
send_mail(mail_title, mail_msg, MAIL_FROM, [mail_address], fail_silently=False) send_mail(mail_title, mail_msg, MAIL_FROM, [mail_address], fail_silently=False)
smg = "提交成功,已发邮件通知部门管理员。" smg = "提交成功,已发邮件%s 通知部门管理员。" % mail_address
return render_to_response('jperm/perm_apply.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/perm_apply.html', locals(), context_instance=RequestContext(request))
return render_to_response('jperm/perm_apply.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/perm_apply.html', locals(), context_instance=RequestContext(request))
@require_admin @require_admin
def perm_apply_exec(request): def perm_apply_exec(request):
""" 确认权限 """
header_title, path1, path2 = u'主机权限申请', u'权限管理', u'审批完成' header_title, path1, path2 = u'主机权限申请', u'权限管理', u'审批完成'
uuid = request.GET.get('uuid') uuid = request.GET.get('uuid')
user_id = request.session.get('user_id') user_id = request.session.get('user_id')
...@@ -737,7 +745,7 @@ def perm_apply_exec(request): ...@@ -737,7 +745,7 @@ def perm_apply_exec(request):
Hi,%s: Hi,%s:
您所申请的权限已由 %s 在 %s 审批完成, 请登录验证。 您所申请的权限已由 %s 在 %s 审批完成, 请登录验证。
""" % (q_apply.applyer, q_apply.approver, time_now) """ % (q_apply.applyer, q_apply.approver, time_now)
send_mail(mail_title, mail_msg, 'jkfunshion@fun.tv', [mail_address], fail_silently=False) send_mail(mail_title, mail_msg, MAIL_FROM, [mail_address], fail_silently=False)
smg = '授权完成, 已邮件通知申请人, 十秒钟后返回首页' smg = '授权完成, 已邮件通知申请人, 十秒钟后返回首页'
return render_to_response('jperm/perm_apply_exec.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/perm_apply_exec.html', locals(), context_instance=RequestContext(request))
else: else:
...@@ -746,37 +754,38 @@ def perm_apply_exec(request): ...@@ -746,37 +754,38 @@ def perm_apply_exec(request):
def get_apply_posts(request, status, username, dept_name, keyword=None): def get_apply_posts(request, status, username, dept_name, keyword=None):
""" 获取申请记录 """
post_all = Apply.objects.filter(status=status).order_by('-date_add')
post_keyword_all = Apply.objects.filter(Q(applyer__contains=keyword) |
Q(approver__contains=keyword)) \
.filter(status=status).order_by('-date_add')
if is_super_user(request): if is_super_user(request):
if keyword: if keyword:
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \ posts = post_keyword_all
.filter(status=status).order_by('-date_add')
else: else:
posts = Apply.objects.filter(status=status).order_by('-date_add') posts = post_all
elif is_group_admin(request): elif is_group_admin(request):
if keyword: if keyword:
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \ posts = post_keyword_all.filter(dept=dept_name)
.filter(status=status).filter(dept=dept_name).order_by('-date_add')
else: else:
posts = Apply.objects.filter(status=status).filter(dept=dept_name).order_by('-date_add') posts = post_all.filter(dept=dept_name)
elif is_common_user(request): elif is_common_user(request):
if keyword: if keyword:
posts = Apply.objects.filter(applyer=username).filter(status=status).filter(Q(applyer__contains=keyword) | posts = post_keyword_all.filter(user=username)
Q(asset__contains=keyword)).order_by('-date_add')
else: else:
posts = Apply.objects.filter(applyer=username).filter(status=status).order_by('-date_add') posts = post_all.filter(user=username)
return posts return posts
@require_login @require_login
def perm_apply_log(request, offset): def perm_apply_log(request, offset):
""" 申请记录 """
header_title, path1, path2 = u'权限申请记录', u'权限管理', u'申请记录' header_title, path1, path2 = u'权限申请记录', u'权限管理', u'申请记录'
keyword = request.GET.get('keyword') keyword = request.GET.get('keyword', '')
dept_id = get_user_dept(request) username = get_session_user_info(request)[1]
dept_name = DEPT.objects.get(id=dept_id).name dept_name = get_session_user_info(request)[4]
user_id = request.session.get('user_id')
username = User.objects.get(id=user_id).username
status_dic = {'online': 0, 'offline': 1} status_dic = {'online': 0, 'offline': 1}
status = status_dic[offset] status = status_dic[offset]
posts = get_apply_posts(request, status, username, dept_name, keyword) posts = get_apply_posts(request, status, username, dept_name, keyword)
...@@ -786,6 +795,7 @@ def perm_apply_log(request, offset): ...@@ -786,6 +795,7 @@ def perm_apply_log(request, offset):
@require_login @require_login
def perm_apply_info(request): def perm_apply_info(request):
""" 申请信息详情 """
uuid = request.GET.get('uuid') uuid = request.GET.get('uuid')
post = Apply.objects.get(uuid=uuid) post = Apply.objects.get(uuid=uuid)
return render_to_response('jperm/perm_apply_info.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/perm_apply_info.html', locals(), context_instance=RequestContext(request))
...@@ -793,6 +803,7 @@ def perm_apply_info(request): ...@@ -793,6 +803,7 @@ def perm_apply_info(request):
@require_admin @require_admin
def perm_apply_del(request): def perm_apply_del(request):
""" 删除日志记录 """
uuid = request.GET.get('uuid') uuid = request.GET.get('uuid')
u_apply = Apply.objects.filter(uuid=uuid) u_apply = Apply.objects.filter(uuid=uuid)
if u_apply: if u_apply:
...@@ -802,12 +813,11 @@ def perm_apply_del(request): ...@@ -802,12 +813,11 @@ def perm_apply_del(request):
@require_login @require_login
def perm_apply_search(request): def perm_apply_search(request):
""" 申请搜索 """
keyword = request.GET.get('keyword') keyword = request.GET.get('keyword')
offset = request.GET.get('env') offset = request.GET.get('env')
dept_id = get_user_dept(request) username = get_session_user_info(request)[1]
dept_name = DEPT.objects.get(id=dept_id).name dept_name = get_session_user_info(request)[3]
user_id = request.session.get('user_id')
username = User.objects.get(id=user_id).username
status_dic = {'online': 0, 'offline': 1} status_dic = {'online': 0, 'offline': 1}
status = status_dic[offset] status = status_dic[offset]
posts = get_apply_posts(request, status, username, dept_name, keyword) posts = get_apply_posts(request, status, username, dept_name, keyword)
......
...@@ -66,83 +66,16 @@ def index_cu(request): ...@@ -66,83 +66,16 @@ def index_cu(request):
return render_to_response('index_cu.html', locals(), context_instance=RequestContext(request)) return render_to_response('index_cu.html', locals(), context_instance=RequestContext(request))
@require_admin @require_login
def admin_index(request): def index(request):
user_id = request.session.get('user_id', '')
user = User.objects.get(id=user_id)
dept = user.dept
dept_name = user.dept.name
users = User.objects.filter(dept=dept)
hosts = Asset.objects.filter(dept=dept)
online = Log.objects.filter(dept_name=dept_name, is_finished=0)
online_host = online.values('host').distinct()
online_user = online.values('user').distinct()
active_users = users.filter(is_active=1)
active_hosts = hosts.filter(is_active=1)
# percent of dashboard
if users.count() == 0:
percent_user, percent_online_user = '0%', '0%'
else:
percent_user = format(active_users.count() / users.count(), '.0%')
percent_online_user = format(online_user.count() / users.count(), '.0%')
if hosts.count() == 0:
percent_host, percent_online_host = '0%', '0%'
else:
percent_host = format(active_hosts.count() / hosts.count(), '.0%')
percent_online_host = format(online_host.count() / hosts.count(), '.0%')
li_date, li_str = getDaysByNum(7) li_date, li_str = getDaysByNum(7)
today = datetime.datetime.now().day today = datetime.datetime.now().day
from_week = datetime.datetime.now() - datetime.timedelta(days=7) from_week = datetime.datetime.now() - datetime.timedelta(days=7)
week_data = Log.objects.filter(dept_name=dept_name, start_time__range=[from_week, datetime.datetime.now()])
user_top_ten = week_data.values('user').annotate(times=Count('user')).order_by('-times')[:10]
host_top_ten = week_data.values('host').annotate(times=Count('host')).order_by('-times')[:10]
user_dic, host_dic = get_data(week_data, user_top_ten, 'user'), get_data(week_data, host_top_ten, 'host')
# a week data
week_users = week_data.values('user').distinct().count()
week_hosts = week_data.count()
user_top_five = week_data.values('user').annotate(times=Count('user')).order_by('-times')[:5]
color = ['label-success', 'label-info', 'label-primary', 'label-default', 'label-warnning']
# perm apply latest 10
perm_apply_10 = Apply.objects.order_by('-date_add')[:10]
# latest 10 login
login_10 = Log.objects.order_by('-start_time')[:10]
login_more_10 = Log.objects.order_by('-start_time')[10:21]
# a week top 10
for user_info in user_top_ten:
username = user_info.get('user')
last = Log.objects.filter(user=username).latest('start_time')
user_info['last'] = last
print user_top_ten
top = {'user': '活跃用户数', 'host': '活跃主机数', 'times': '登录次数'}
top_dic = {}
for key, value in top.items():
li = []
for t in li_date:
year, month, day = t.year, t.month, t.day
if key != 'times':
times = week_data.filter(start_time__year=year, start_time__month=month, start_time__day=day).values(key).distinct().count()
else:
times = week_data.filter(start_time__year=year, start_time__month=month, start_time__day=day).count()
li.append(times)
top_dic[value] = li
return render_to_response('index.html', locals(), context_instance=RequestContext(request))
@require_login
def index(request):
if is_common_user(request): if is_common_user(request):
return index_cu(request) return index_cu(request)
if is_group_admin(request): elif is_super_user(request):
return admin_index(request)
users = User.objects.all() users = User.objects.all()
hosts = Asset.objects.all() hosts = Asset.objects.all()
online = Log.objects.filter(is_finished=0) online = Log.objects.filter(is_finished=0)
...@@ -150,6 +83,19 @@ def index(request): ...@@ -150,6 +83,19 @@ def index(request):
online_user = online.values('user').distinct() online_user = online.values('user').distinct()
active_users = User.objects.filter(is_active=1) active_users = User.objects.filter(is_active=1)
active_hosts = Asset.objects.filter(is_active=1) active_hosts = Asset.objects.filter(is_active=1)
week_data = Log.objects.filter(start_time__range=[from_week, datetime.datetime.now()])
elif is_group_admin(request):
user = get_session_user_info(request)[2]
dept_name, dept = get_session_user_info(request)[4:]
users = User.objects.filter(dept=dept)
hosts = Asset.objects.filter(dept=dept)
online = Log.objects.filter(dept_name=dept_name, is_finished=0)
online_host = online.values('host').distinct()
online_user = online.values('user').distinct()
active_users = users.filter(is_active=1)
active_hosts = hosts.filter(is_active=1)
week_data = Log.objects.filter(dept_name=dept_name, start_time__range=[from_week, datetime.datetime.now()])
# percent of dashboard # percent of dashboard
if users.count() == 0: if users.count() == 0:
...@@ -163,10 +109,6 @@ def index(request): ...@@ -163,10 +109,6 @@ def index(request):
percent_host = format(active_hosts.count() / hosts.count(), '.0%') percent_host = format(active_hosts.count() / hosts.count(), '.0%')
percent_online_host = format(online_host.count() / hosts.count(), '.0%') percent_online_host = format(online_host.count() / hosts.count(), '.0%')
li_date, li_str = getDaysByNum(7)
today = datetime.datetime.now().day
from_week = datetime.datetime.now() - datetime.timedelta(days=7)
week_data = Log.objects.filter(start_time__range=[from_week, datetime.datetime.now()])
user_top_ten = week_data.values('user').annotate(times=Count('user')).order_by('-times')[:10] user_top_ten = week_data.values('user').annotate(times=Count('user')).order_by('-times')[:10]
host_top_ten = week_data.values('host').annotate(times=Count('host')).order_by('-times')[:10] host_top_ten = week_data.values('host').annotate(times=Count('host')).order_by('-times')[:10]
user_dic, host_dic = get_data(week_data, user_top_ten, 'user'), get_data(week_data, host_top_ten, 'host') user_dic, host_dic = get_data(week_data, user_top_ten, 'user'), get_data(week_data, host_top_ten, 'host')
...@@ -180,17 +122,16 @@ def index(request): ...@@ -180,17 +122,16 @@ def index(request):
# perm apply latest 10 # perm apply latest 10
perm_apply_10 = Apply.objects.order_by('-date_add')[:10] perm_apply_10 = Apply.objects.order_by('-date_add')[:10]
login_more_10 = Log.objects.order_by('-start_time')[10:20]
# latest 10 login # latest 10 login
login_10 = Log.objects.order_by('-start_time')[:10] login_10 = Log.objects.order_by('-start_time')[:10]
login_more_10 = Log.objects.order_by('-start_time')[10:21]
# a week top 10 # a week top 10
for user_info in user_top_ten: for user_info in user_top_ten:
username = user_info.get('user') username = user_info.get('user')
last = Log.objects.filter(user=username).latest('start_time') last = Log.objects.filter(user=username).latest('start_time')
user_info['last'] = last user_info['last'] = last
print user_top_ten
top = {'user': '活跃用户数', 'host': '活跃主机数', 'times': '登录次数'} top = {'user': '活跃用户数', 'host': '活跃主机数', 'times': '登录次数'}
top_dic = {} top_dic = {}
......
...@@ -70,10 +70,13 @@ function move(from, to, from_o, to_o) { ...@@ -70,10 +70,13 @@ function move(from, to, from_o, to_o) {
}); });
} }
function move_left(from, to) { function move_left(from, to, from_o, to_o) {
$("#" + from + " option").each(function () { $("#" + from + " option").each(function () {
if ($(this).prop("selected") == true) { if ($(this).prop("selected") == true) {
$("#" + to).append(this); $("#" + to).append(this);
if( typeof from_o !== 'undefined'){
$("#"+to_o).append($("#"+from_o +" option[value='"+this.value+"']"));
}
} }
$(this).attr("selected",'true'); $(this).attr("selected",'true');
}); });
......
...@@ -2,6 +2,21 @@ ...@@ -2,6 +2,21 @@
{% load mytags %} {% load mytags %}
{% block content %} {% block content %}
{% include 'nav_cat_bar.html' %} {% include 'nav_cat_bar.html' %}
<script type="text/javascript">
function search_ip(text, noselect, total){
$("#" + noselect).children().each(
function(){
$(this).remove();
});
$("#" + total).children().each(function(){
if($(this).text().search(text) != -1){
$("#" + noselect).append($(this).clone())
}
})
}
</script>
<div class="wrapper wrapper-content animated fadeInRight"> <div class="wrapper wrapper-content animated fadeInRight">
<div class="row"> <div class="row">
<div class="col-lg-10"> <div class="col-lg-10">
...@@ -26,6 +41,19 @@ ...@@ -26,6 +41,19 @@
</a> </a>
</div> </div>
</div> </div>
<select id="assets_total" name="assets" class="form-control m-b" size="12" multiple style="display: none">
{% for asset in posts %}
<option value="{{ asset.id }}">{{ asset.ip }}</option>
{% endfor %}
</select>
<select id="asset_select_total" name="j_hosts" class="form-control m-b" size="12" multiple style="display: none">
{% for asset in eposts %}
<option value="{{ asset.id }}">{{ asset.ip }}</option>
{% endfor %}
</select>
<div class="ibox-content"> <div class="ibox-content">
{% if emg %} {% if emg %}
<div class="alert alert-warning text-center">{{ emg }}</div> <div class="alert alert-warning text-center">{{ emg }}</div>
...@@ -63,35 +91,40 @@ ...@@ -63,35 +91,40 @@
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<div class="form-group"> <div class="form-group">
<div> <label for="group_name" class="col-sm-2 control-label">过滤</label>
<label for="hosts" class="col-lg-2 control-label">主机</label> <div class="col-sm-4">
<div class="col-sm-3"> <input id="noselect" class="form-control" oninput="search_ip(this.value, 'assets', 'assets_total')">
<select multiple="multiple" id="id_domains_filter" name="domains_filter" style="display: none;"> </div>
</select> <div class="col-sm-1">
<div class="input-group" style="padding-bottom: 5px"> </div>
<input type="text" size="19" class="form-control input-sm" id="search" name="keyword" placeholder="过滤"> <div id="select" class="col-sm-3">
<input class="form-control" oninput="search_ip(this.value, 'asset_select', 'asset_select_total')">
</div> </div>
<select id="hosts" size="12" class="form-control m-b" multiple> </div>
<div class="form-group">
<label for="" class="col-sm-2 control-label">主机<span class="red-fonts">*</span></label>
<div class="col-sm-4">
<div>
<select id="assets" name="assets" class="form-control m-b" size="12" multiple>
{% for post in posts %} {% for post in posts %}
<option value="{{ post.id }}">{{ post.ip }}</option> <option value="{{ post.id }}">{{ post.ip }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
</div>
<div class="col-sm-1"> <div class="col-sm-1">
<div class="btn-group" style="margin-top: 50px;"> <div class="btn-group" style="margin-top: 60px;">
<button type="button" class="btn btn-xm btn-white" onclick="move('hosts', 'hosts_selected')"><i class="fa fa-chevron-right"></i></button> <button type="button" class="btn btn-white" onclick="move('assets', 'asset_select', 'assets_total', 'asset_select_total' )"><i class="fa fa-chevron-right"></i></button>
<button type="button" class="btn btn-xm btn-white" onclick="move_left('hosts_selected', 'hosts')"><i class="fa fa-chevron-left"></i></button> <button type="button" class="btn btn-white" onclick="move_left('asset_select', 'assets', 'asset_select_total', 'assets_total')"><i class="fa fa-chevron-left"></i> </button>
</div> </div>
</div> </div>
<div class="col-sm-3"> <div class="col-sm-3">
<h4 style="padding-bottom: 5px">已选中主机</h4>
<div> <div>
<select id="hosts_selected" name="j_hosts" class="form-control m-b" size="12" multiple> <select id="asset_select" name="j_hosts" class="form-control m-b" size="12" multiple></select>
{% for post in eposts %}
<option value="{{ post.id }}">{{ post.ip }}</option>
{% endfor %}
</select>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -105,7 +138,7 @@ ...@@ -105,7 +138,7 @@
<div class="form-group"> <div class="form-group">
<div class="col-sm-4 col-sm-offset-5"> <div class="col-sm-4 col-sm-offset-5">
<button class="btn btn-white" type="submit"> 重置 </button> <button class="btn btn-white" type="submit"> 重置 </button>
<button class="btn btn-primary" type="submit" onclick="on_submit('groups_selected') "> 提交 </button> <button class="btn btn-primary" id="submit_button" type="submit" onclick="on_submit('groups_selected') "> 提交 </button>
</div> </div>
</div> </div>
</form> </form>
...@@ -116,6 +149,15 @@ ...@@ -116,6 +149,15 @@
</div> </div>
<script> <script>
$(document).ready(function(){
$("#submit_button").click(function(){
$('#assetForm option').each(function(){
$(this).prop('selected', true)
})
});
})
$('#assetForm').validator({ $('#assetForm').validator({
timely: 2, timely: 2,
theme: "yellow_right_effect", theme: "yellow_right_effect",
...@@ -140,15 +182,15 @@ ...@@ -140,15 +182,15 @@
}) })
} }
$('#search').keyup(function() { // $('#search').keyup(function() {
var $rows = $('#hosts option'); // var $rows = $('#hosts option');
var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase(); // var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase();
//
$rows.show().filter(function() { // $rows.show().filter(function() {
var text = $(this).text().replace(/\s+/g, ' ').toLowerCase(); // var text = $(this).text().replace(/\s+/g, ' ').toLowerCase();
return !~text.indexOf(val); // return !~text.indexOf(val);
}).hide(); // }).hide();
}); // });
function change_dept(dept_id){ function change_dept(dept_id){
$.get('/jasset/dept_host_ajax/', $.get('/jasset/dept_host_ajax/',
...@@ -157,6 +199,7 @@ ...@@ -157,6 +199,7 @@
$('#hosts').html(data) $('#hosts').html(data)
}) })
} }
</script> </script>
{% endblock %} {% endblock %}
\ No newline at end of file
...@@ -75,7 +75,78 @@ ...@@ -75,7 +75,78 @@
<input type="button" id="del_button" class="btn btn-danger btn-sm" name="del_button" value="删除" onclick="del('contents_form')" /> <input type="button" id="del_button" class="btn btn-danger btn-sm" name="del_button" value="删除" onclick="del('contents_form')" />
<input type="button" id="alter_button" class="btn btn-warning btn-sm" name="alter_button" value="修改" onclick="alter('contents_form')" /> <input type="button" id="alter_button" class="btn btn-warning btn-sm" name="alter_button" value="修改" onclick="alter('contents_form')" />
</div> </div>
{% include 'paginator.html' %} <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 keyword %}
{% if contacts.has_previous %}
<li class="paginate_button previous" aria-controls="editable" tabindex="0" id="editable_previous">
<a href="?keyword={{ keyword }}&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 %}
{% ifequal show_first 1 %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?keyword={{ keyword }}&page=1&id={{ group.id }}" title="第1页">1...</a></li>
{% endifequal %}
{% for page in page_range %}
{% ifequal current_page page %}
<li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?keyword={{ keyword }}&page={{ page }}&id={{ group.id }}" title="第{{ page }}页">{{ page }}</a></li>
{% else %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?keyword={{ keyword }}&page={{ page }}&id={{ group.id }}" title="第{{ page }}页">{{ page }}</a></li>
{% endifequal %}
{% endfor %}
{% ifequal show_end 1 %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?keyword={{ keyword }}&page={{ p.num_pages }}&id={{ group.id }}" title="第{{ page }}页">...{{ p.num_pages }}</a></li>
{% endifequal %}
{% if contacts.has_next %}
<li class="paginate_button next" aria-controls="editable" tabindex="0" id="editable_next">
<a href="?keyword={{ keyword }}&page={{ contacts.next_page_number }}&id={{ group.id }}">Next</a>
</li>
{% else %}
<li class="paginate_button next disabled" aria-controls="editable" tabindex="0" id="editable_next">
<a href="#">Next</a>
</li>
{% endif %}
{% else %}
{% if contacts.has_previous %}
<li class="paginate_button previous" aria-controls="editable" tabindex="0" id="editable_previous">
<a href="?page={{ contacts.previous_page_number }}&id={{ group.id }}">Previous</a>
</li>
{% else %}
<li class="paginate_button previous disabled" aria-controls="editable" tabindex="0" id="editable_previous">
<a href="#">Previous</a>
</li>
{% endif %}
{% ifequal show_first 1 %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page=1&id={{ group.id }}" title="第1页">1...</a></li>
{% endifequal %}
{% for page in page_range %}
{% ifequal current_page page %}
<li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?page={{ page }}&id={{ group.id }}" title="第{{ page }}页">{{ page }}</a></li>
{% else %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}&id={{ group.id }}" title="第{{ page }}页">{{ page }}</a></li>
{% endifequal %}
{% endfor %}
{% ifequal show_end 1 %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ p.num_pages }}&id={{ group.id }}" title="第{{ page }}页">...{{ p.num_pages }}</a></li>
{% endifequal %}
{% if contacts.has_next %}
<li class="paginate_button next" aria-controls="editable" tabindex="0" id="editable_next">
<a href="?page={{ contacts.next_page_number }}&id={{ group.id }}">Next</a>
</li>
{% else %}
<li class="paginate_button next disabled" aria-controls="editable" tabindex="0" id="editable_next">
<a href="#">Next</a>
</li>
{% endif %}
{% endif %}
</ul>
</div>
</div>
</div> </div>
</form> </form>
</div> </div>
......
...@@ -2,13 +2,58 @@ ...@@ -2,13 +2,58 @@
{% load mytags %} {% load mytags %}
{% block content %} {% block content %}
{% include 'nav_cat_bar.html' %} {% include 'nav_cat_bar.html' %}
<script type="text/javascript">
function search_ip(text, noselect, total){
$("#" + noselect).children().each(
function(){
$(this).remove();
});
$("#" + total).children().each(function(){
if($(this).text().search(text) != -1){
$("#" + noselect).append($(this).clone())
}
})
}
</script>
<div class="wrapper wrapper-content animated fadeInRight"> <div class="wrapper wrapper-content animated fadeInRight">
<div class="row"> <div class="row">
<div class="col-lg-10"> <div class="col-lg-10">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div id="ibox-content" class="ibox-title"> <div id="ibox-content" class="ibox-title">
<h5> 填写主机组基本信息 </h5> <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>
<select id="assets_total" name="assets" class="form-control m-b" size="12" multiple style="display: none">
{% for asset in posts %}
<option value="{{ asset.id }}">{{ asset.ip }}</option>
{% endfor %}
</select>
<select id="asset_select_total" name="j_hosts" class="form-control m-b" size="12" multiple style="display: none">
{% for asset in eposts %}
<option value="{{ asset.id }}">{{ asset.ip }}</option>
{% endfor %}
</select>
<div class="ibox-content"> <div class="ibox-content">
{% if emg %} {% if emg %}
<div class="alert alert-warning text-center">{{ emg }}</div> <div class="alert alert-warning text-center">{{ emg }}</div>
...@@ -50,38 +95,47 @@ ...@@ -50,38 +95,47 @@
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<div class="form-group"> <div class="form-group">
<div> <label for="group_name" class="col-sm-2 control-label">过滤</label>
<label for="hosts" class="col-lg-2 control-label">主机</label> <div class="col-sm-4">
<div class="col-sm-3"> <input id="noselect" class="form-control" oninput="search_ip(this.value, 'assets', 'assets_total')">
<select multiple="multiple" id="id_domains_filter" name="domains_filter" style="display: none;"> </div>
</select> <div class="col-sm-1">
<div class="input-group" style="padding-bottom: 5px"> </div>
<input type="text" size="19" class="form-control input-sm" id="search" name="keyword" placeholder="过滤"> <div id="select" class="col-sm-3">
<input class="form-control" oninput="search_ip(this.value, 'asset_select', 'asset_select_total')">
</div>
</div> </div>
<select id="hosts" size="12" class="form-control m-b" multiple>
<div class="form-group">
<label for="" class="col-sm-2 control-label">主机<span class="red-fonts">*</span></label>
<div class="col-sm-4">
<div>
<select id="assets" name="assets" class="form-control m-b" size="12" multiple>
{% for post in posts %} {% for post in posts %}
<option value="{{ post.id }}">{{ post.ip }}</option> <option value="{{ post.id }}">{{ post.ip }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
</div>
<div class="col-sm-1"> <div class="col-sm-1">
<div class="btn-group" style="margin-top: 50px;"> <div class="btn-group" style="margin-top: 60px;">
<button type="button" class="btn btn-xm btn-white" onclick="move('hosts', 'hosts_selected')"><i class="fa fa-chevron-right"></i></button> <button type="button" class="btn btn-white" onclick="move('assets', 'asset_select', 'assets_total', 'asset_select_total' )"><i class="fa fa-chevron-right"></i></button>
<button type="button" class="btn btn-xm btn-white" onclick="move_left('hosts_selected', 'hosts')"><i class="fa fa-chevron-left"></i></button> <button type="button" class="btn btn-white" onclick="move_left('asset_select', 'assets', 'asset_select_total', 'assets_total')"><i class="fa fa-chevron-left"></i> </button>
</div> </div>
</div> </div>
<div class="col-sm-3"> <div class="col-sm-3">
<h4 style="padding-bottom: 5px">已选中主机</h4>
<div> <div>
<select id="hosts_selected" name="j_hosts" class="form-control m-b" size="12" multiple> <select id="asset_select" name="j_hosts" class="form-control m-b" size="12" multiple>
{% for post in eposts %} {% for asset in eposts %}
<option value="{{ post.id }}">{{ post.ip }}</option> <option value="{{ asset.id }}">{{ asset.ip }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<div class="form-group"><label class="col-sm-2 control-label"> 备注 </label> <div class="form-group"><label class="col-sm-2 control-label"> 备注 </label>
...@@ -92,7 +146,7 @@ ...@@ -92,7 +146,7 @@
<div class="form-group"> <div class="form-group">
<div class="col-sm-4 col-sm-offset-5"> <div class="col-sm-4 col-sm-offset-5">
<button class="btn btn-white" type="submit"> 重置 </button> <button class="btn btn-white" type="submit"> 重置 </button>
<button class="btn btn-primary" type="submit" onclick="on_submit('groups_selected') "> 提交 </button> <button class="btn btn-primary" id="submit_button" type="submit" onclick="on_submit('groups_selected') "> 提交 </button>
</div> </div>
</div> </div>
</form> </form>
...@@ -103,6 +157,15 @@ ...@@ -103,6 +157,15 @@
</div> </div>
<script> <script>
$(document).ready(function(){
$("#submit_button").click(function(){
$('#assetForm option').each(function(){
$(this).prop('selected', true)
})
});
})
$('#assetForm').validator({ $('#assetForm').validator({
timely: 2, timely: 2,
theme: "yellow_right_effect", theme: "yellow_right_effect",
...@@ -127,16 +190,16 @@ ...@@ -127,16 +190,16 @@
}) })
} }
$('#search').keyup(function() { // $('#search').keyup(function() {
var $rows = $('#hosts option'); // var $rows = $('#hosts option');
console.log($rows); // console.log($rows);
var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase(); // var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase();
//
$rows.show().filter(function() { // $rows.show().filter(function() {
var text = $(this).text().replace(/\s+/g, ' ').toLowerCase(); // var text = $(this).text().replace(/\s+/g, ' ').toLowerCase();
return !~text.indexOf(val); // return !~text.indexOf(val);
}).hide(); // }).hide();
}); // });
function change_dept(dept_id){ function change_dept(dept_id){
$.get('/jasset/dept_host_ajax/', $.get('/jasset/dept_host_ajax/',
......
...@@ -83,7 +83,78 @@ ...@@ -83,7 +83,78 @@
<input type="button" id="del_button" class="btn btn-danger btn-sm" name="del_button" value="删除" onclick="del('contents_form')" /> <input type="button" id="del_button" class="btn btn-danger btn-sm" name="del_button" value="删除" onclick="del('contents_form')" />
<input type="button" id="alter_button" class="btn btn-warning btn-sm" name="alter_button" value="修改" onclick="alter('contents_form')" /> <input type="button" id="alter_button" class="btn btn-warning btn-sm" name="alter_button" value="修改" onclick="alter('contents_form')" />
</div> </div>
{% include 'paginator.html' %} <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 keyword %}
{% if contacts.has_previous %}
<li class="paginate_button previous" aria-controls="editable" tabindex="0" id="editable_previous">
<a href="?keyword={{ keyword }}&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 %}
{% ifequal show_first 1 %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?keyword={{ keyword }}&page=1&id={{ idc.id }}" title="第1页">1...</a></li>
{% endifequal %}
{% for page in page_range %}
{% ifequal current_page page %}
<li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?keyword={{ keyword }}&page={{ page }}&id={{ idc.id }}" title="第{{ page }}页">{{ page }}</a></li>
{% else %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?keyword={{ keyword }}&page={{ page }}&id={{ idc.id }}" title="第{{ page }}页">{{ page }}</a></li>
{% endifequal %}
{% endfor %}
{% ifequal show_end 1 %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?keyword={{ keyword }}&page={{ p.num_pages }}&id={{ idc.id }}" title="第{{ page }}页">...{{ p.num_pages }}</a></li>
{% endifequal %}
{% if contacts.has_next %}
<li class="paginate_button next" aria-controls="editable" tabindex="0" id="editable_next">
<a href="?keyword={{ keyword }}&page={{ contacts.next_page_number }}&id={{ idc.id }}">Next</a>
</li>
{% else %}
<li class="paginate_button next disabled" aria-controls="editable" tabindex="0" id="editable_next">
<a href="#">Next</a>
</li>
{% endif %}
{% else %}
{% if contacts.has_previous %}
<li class="paginate_button previous" aria-controls="editable" tabindex="0" id="editable_previous">
<a href="?page={{ contacts.previous_page_number }}&id={{ idc.id }}">Previous</a>
</li>
{% else %}
<li class="paginate_button previous disabled" aria-controls="editable" tabindex="0" id="editable_previous">
<a href="#">Previous</a>
</li>
{% endif %}
{% ifequal show_first 1 %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page=1&id={{ idc.id }}" title="第1页">1...</a></li>
{% endifequal %}
{% for page in page_range %}
{% ifequal current_page page %}
<li class="paginate_button active" aria-controls="editable" tabindex="0"><a href="?page={{ page }}&id={{ idc.id }}" title="第{{ page }}页">{{ page }}</a></li>
{% else %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ page }}&id={{ idc.id }}" title="第{{ page }}页">{{ page }}</a></li>
{% endifequal %}
{% endfor %}
{% ifequal show_end 1 %}
<li class="paginate_button" aria-controls="editable" tabindex="0"><a href="?page={{ p.num_pages }}&id={{ idc.id }}" title="第{{ page }}页">...{{ p.num_pages }}</a></li>
{% endifequal %}
{% if contacts.has_next %}
<li class="paginate_button next" aria-controls="editable" tabindex="0" id="editable_next">
<a href="?page={{ contacts.next_page_number }}&id={{ idc.id }}">Next</a>
</li>
{% else %}
<li class="paginate_button next disabled" aria-controls="editable" tabindex="0" id="editable_next">
<a href="#">Next</a>
</li>
{% endif %}
{% endif %}
</ul>
</div>
</div>
</div> </div>
</form> </form>
</div> </div>
......
{% extends 'base.html' %} {% extends 'base.html' %}
{% block content %} {% block content %}
{% include 'nav_cat_bar.html' %} {% include 'nav_cat_bar.html' %}
<!--<h3 class="text-center">项目发布申请</h3>--> <script type="text/javascript">
function search_ip(text, noselect, total){
$("#" + noselect).children().each(
function(){
$(this).remove();
});
$("#" + total).children().each(function(){
if($(this).text().search(text) != -1){
$("#" + noselect).append($(this).clone())
}
})
}
</script>
<div class="wrapper wrapper-content animated fadeInRight"> <div class="wrapper wrapper-content animated fadeInRight">
<div class="row"> <div class="row">
<div class="col-lg-10"> <div class="col-lg-10">
...@@ -16,10 +29,6 @@ ...@@ -16,10 +29,6 @@
<i class="fa fa-wrench"></i> <i class="fa fa-wrench"></i>
</a> </a>
<ul class="dropdown-menu dropdown-user"> <ul class="dropdown-menu dropdown-user">
<li><a href="#">未启用 1</a>
</li>
<li><a href="#">未启用 2</a>
</li>
</ul> </ul>
<a class="close-link"> <a class="close-link">
<i class="fa fa-times"></i> <i class="fa fa-times"></i>
...@@ -27,6 +36,18 @@ ...@@ -27,6 +36,18 @@
</div> </div>
</div> </div>
<select id="assets_total" name="assets" class="form-control m-b" size="12" multiple style="display: none">
{% for asset in posts %}
<option value="{{ asset.ip }}">{{ asset.ip }}</option>
{% endfor %}
</select>
<select id="asset_select_total" name="j_hosts" class="form-control m-b" size="12" multiple style="display: none">
{% for asset in eposts %}
<option value="{{ asset.ip }}">{{ asset.ip }}</option>
{% endfor %}
</select>
<div class="ibox-content"> <div class="ibox-content">
{% if emg %} {% if emg %}
<div class="alert alert-warning text-center">{{ emg }}</div> <div class="alert alert-warning text-center">{{ emg }}</div>
...@@ -46,10 +67,10 @@ ...@@ -46,10 +67,10 @@
</div> </div>
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<div class="form-group"><label class="col-sm-2 control-label"> 部门管理员 <span class="red-fonts">*</span></label> <div class="form-group" id="j_da"><label class="col-sm-2 control-label"> 部门管理员 <span class="red-fonts">*</span></label>
<div class="radio"> <div class="radio">
{% for da in dept_da %} {% for da in dept_da %}
<label><input type="radio" value="{{ da.id }}" id="da" name="da"> {{ da }}</label> <label><input type="radio" value="{{ da.id }}" name="da"> {{ da }}</label>
{% endfor %} {% endfor %}
</div> </div>
</div> </div>
...@@ -68,35 +89,40 @@ ...@@ -68,35 +89,40 @@
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<div class="form-group"> <div class="form-group">
<div> <label for="group_name" class="col-sm-2 control-label">过滤</label>
<label for="groups" class="col-lg-2 control-label">主机<span class="red-fonts">*</span></label> <div class="col-sm-4">
<div class="col-sm-3"> <input id="noselect" class="form-control" oninput="search_ip(this.value, 'assets', 'assets_total')">
<select multiple="multiple" id="id_domains_filter" name="domains_filter" style="display: none;"> </div>
</select> <div class="col-sm-1">
<div class="input-group" style="padding-bottom: 5px"> </div>
<input type="text" size="19" class="form-control input-sm" id="search" name="keyword" placeholder="过滤"> <div id="select" class="col-sm-3">
<input class="form-control" oninput="search_ip(this.value, 'asset_select', 'asset_select_total')">
</div>
</div> </div>
<select id="groups" size="12" class="form-control m-b" multiple>
<div class="form-group">
<label for="" class="col-sm-2 control-label">主机<span class="red-fonts">*</span></label>
<div class="col-sm-4">
<div>
<select id="assets" name="assets" class="form-control m-b" size="12" multiple>
{% for post in posts %} {% for post in posts %}
<option value="{{ post.ip }}">{{ post.ip }}</option> <option value="{{ post.ip }}">{{ post.ip }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
</div>
<div class="col-sm-1"> <div class="col-sm-1">
<div class="btn-group" style="margin-top: 50px;"> <div class="btn-group" style="margin-top: 60px;">
<button type="button" class="btn btn-xm btn-white" onclick="move('groups', 'groups_selected')"><i class="fa fa-chevron-right"></i></button> <button type="button" class="btn btn-white" onclick="move('assets', 'asset_select', 'assets_total', 'asset_select_total' )"><i class="fa fa-chevron-right"></i></button>
<button type="button" class="btn btn-xm btn-white" onclick="move_left('groups_selected', 'groups')"><i class="fa fa-chevron-left"></i></button> <button type="button" class="btn btn-white" onclick="move_left('asset_select', 'assets', 'asset_select_total', 'assets_total')"><i class="fa fa-chevron-left"></i> </button>
</div> </div>
</div> </div>
<div class="col-sm-3"> <div class="col-sm-3">
<h4 style="padding-bottom: 5px">已选中主机</h4>
<div> <div>
<select id="groups_selected" name="hosts" class="form-control m-b" size="12" multiple> <select id="asset_select" name="hosts" class="form-control m-b" size="12" multiple></select>
{% for post in eposts %}
<option value="{{ post.ip }}">{{ post.ip }}</option>
{% endfor %}
</select>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -110,7 +136,7 @@ ...@@ -110,7 +136,7 @@
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<div class="form-group"> <div class="form-group">
<div class="col-sm-4 col-sm-offset-5"> <div class="col-sm-4 col-sm-offset-5">
<button class="btn btn-primary" type="submit"> 提交 </button> <button class="btn btn-primary" id="submit_button" type="submit"> 提交 </button>
</div> </div>
</div> </div>
</form> </form>
...@@ -121,6 +147,32 @@ ...@@ -121,6 +147,32 @@
</div> </div>
<script> <script>
$(document).ready(function(){
$("#submit_button").click(function(){
$('#assetForm option').each(function(){
$(this).prop('selected', true)
})
});
})
$('#assetForm').validator({
timely: 2,
theme: "yellow_right_effect",
fields: {
"j_da": {
rule: "required",
tip: "选择管理员",
ok: "",
msg: {required: "管理员必须选择!"},
data: {'data-ok':"ok"}
}
},
valid: function(form) {
form.submit();
}
});
var $rows = $('#groups option'); var $rows = $('#groups option');
$('#search').keyup(function() { $('#search').keyup(function() {
var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase(); var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase();
......
...@@ -5,12 +5,6 @@ ...@@ -5,12 +5,6 @@
{% include 'nav_li_profile.html' %} {% include 'nav_li_profile.html' %}
<li id="index"> <li id="index">
<a href="/"><i class="fa fa-th-large"></i> <span class="nav-label">仪表盘</span><span class="label label-info pull-right"></span></a> <a href="/"><i class="fa fa-th-large"></i> <span class="nav-label">仪表盘</span><span class="label label-info pull-right"></span></a>
<!--<a href="index.html"><i class="fa fa-th-large"></i> <span class="nav-label">仪表盘</span> <span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li><a href="index.html">Dashboard v.1</a></li>
<li ><a href="dashboard_2.html">Dashboard v.2</a></li>
<li ><a href="dashboard_3.html">Dashboard v.3</a></li>
</ul>-->
</li> </li>
<li id="juser"> <li id="juser">
<a href="#"><i class="fa fa-rebel"></i> <span class="nav-label">用户管理</span><span class="fa arrow"></span></a> <a href="#"><i class="fa fa-rebel"></i> <span class="nav-label">用户管理</span><span class="fa arrow"></span></a>
...@@ -51,13 +45,6 @@ ...@@ -51,13 +45,6 @@
<li class="apply_show online"><a href="/jperm/apply_show/online/">权限审批</a></li> <li class="apply_show online"><a href="/jperm/apply_show/online/">权限审批</a></li>
</ul> </ul>
</li> </li>
{# <li id="jlog">#}
{# <a href="#"><i class="fa fa-files-o"></i> <span class="nav-label">日志审计</span><span class="fa arrow"></span></a>#}
{# <ul class="nav nav-second-level">#}
{# <li id="log_list"><a href="/jlog/log_list/online/">查看日志</a></li>#}
{# <li id="log_detail"><a href="/jlog/log_detail/">日志分析</a></li>#}
{# </ul>#}
{# </li>#}
<li id="jlog"> <li id="jlog">
<a href="/jlog/log_list/online/"><i class="fa fa-files-o"></i> <span class="nav-label">日志审计</span><span class="label label-info pull-right"></span></a> <a href="/jlog/log_list/online/"><i class="fa fa-files-o"></i> <span class="nav-label">日志审计</span><span class="label label-info pull-right"></span></a>
</li> </li>
...@@ -76,12 +63,6 @@ ...@@ -76,12 +63,6 @@
{% include 'nav_li_profile.html' %} {% include 'nav_li_profile.html' %}
<li id="index"> <li id="index">
<a href="/"><i class="fa fa-th-large"></i> <span class="nav-label">仪表盘</span><span class="label label-info pull-right"></span></a> <a href="/"><i class="fa fa-th-large"></i> <span class="nav-label">仪表盘</span><span class="label label-info pull-right"></span></a>
<!--<a href="index.html"><i class="fa fa-th-large"></i> <span class="nav-label">仪表盘</span> <span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li><a href="index.html">Dashboard v.1</a></li>
<li ><a href="dashboard_2.html">Dashboard v.2</a></li>
<li ><a href="dashboard_3.html">Dashboard v.3</a></li>
</ul>-->
</li> </li>
<li id="juser"> <li id="juser">
<a href="#"><i class="fa fa-rebel"></i> <span class="nav-label">用户管理</span><span class="fa arrow"></span></a> <a href="#"><i class="fa fa-rebel"></i> <span class="nav-label">用户管理</span><span class="fa arrow"></span></a>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment