diff --git a/apps/cmdb/templatetags/__init__.py b/apps/cmdb/templatetags/__init__.py new file mode 100644 index 0000000..e483ac4 --- /dev/null +++ b/apps/cmdb/templatetags/__init__.py @@ -0,0 +1,3 @@ +# @Time : 2019/2/17 21:28 +# @Author : RobbieHan +# @File : __init__.py.py \ No newline at end of file diff --git a/apps/cmdb/templatetags/extra_tags.py b/apps/cmdb/templatetags/extra_tags.py new file mode 100644 index 0000000..f4568c9 --- /dev/null +++ b/apps/cmdb/templatetags/extra_tags.py @@ -0,0 +1,60 @@ +from django import template +from django.db.models.query import QuerySet +from django.contrib.auth import get_user_model + +from cmdb.models import Code, Cabinet + +register = template.Library() + +User = get_user_model() + + +@register.simple_tag +def get_con(context, arg, field): + if isinstance(context, QuerySet): + context = context.values() + instance = [con for con in context if con['id'] == arg] + if instance: + return instance[0][field] + return '' + + +@register.filter(name='compare_result') +def get_change_compare(changes): + change_compare = [] + for key, value in changes.items(): + if key in ['network_type', 'service_type', 'operation_type']: + log = replace_log(key, value, Code, 'value') + elif key == 'dev_cabinet': + log = replace_log(key, value, Cabinet, 'number') + elif key == 'leader': + log = replace_log(key, value, User, 'name') + else: + log = '字段:"%(field)s",由:"%(old)s",变更为:"%(new)s"。' % { + 'field': key, + 'old': value[0], + 'new': value[1] + } + change_compare.append(log) + return ','.join(str(i) for i in change_compare) + + +def replace_log(key, value, model, field): + old = value[0] + new = value[1] + log_format = '字段:"%(field)s",由:"%(old)s",变更为:"%(new)s"。' + try: + data = model.objects.filter(id=old).values()[0] + old_data = data[field] + except Exception: + old_data = old + try: + data = model.objects.filter(id=new).values()[0] + new_data = data[field] + except Exception: + new_data = new + return log_format % { + 'field': key, + 'old': old_data, + 'new': new_data + } \ No newline at end of file diff --git a/apps/cmdb/urls.py b/apps/cmdb/urls.py index 4b94c76..267b023 100644 --- a/apps/cmdb/urls.py +++ b/apps/cmdb/urls.py @@ -33,4 +33,5 @@ urlpatterns = [ path('eam/device/list/', views_eam.DeviceListView.as_view(), name='eam-device-list'), path('eam/device/delete/', views_eam.DeviceDeleteView.as_view(), name='eam-device-delete'), path('eam/device/device2connection/', views_eam.Device2ConnectionView.as_view(), name='eam-device-device2connection'), + path('eam/device/detail/', views_eam.DeviceDetailView.as_view(), name='eam-device-detail'), ] diff --git a/apps/cmdb/views_eam.py b/apps/cmdb/views_eam.py index 557a269..e86f20a 100644 --- a/apps/cmdb/views_eam.py +++ b/apps/cmdb/views_eam.py @@ -11,6 +11,7 @@ from custom import (BreadcrumbMixin, SandboxDeleteView, SandboxListView, SandboxUpdateView, SandboxCreateView) from .models import Cabinet, DeviceInfo, Code, ConnectionInfo from .forms import DeviceCreateForm, DeviceUpdateForm, ConnectionInfoForm +from utils.db_utils import MongodbDriver User = get_user_model() @@ -157,4 +158,20 @@ class Device2ConnectionView(LoginRequiredMixin, View): form_errors = str(form.errors) errors = re.findall(pattern, form_errors) res['error'] = errors[0] - return JsonResponse(res) \ No newline at end of file + return JsonResponse(res) + + +class DeviceDetailView(LoginRequiredMixin, BreadcrumbMixin, TemplateView): + template_name = 'cmdb/deviceinfo_detail.html' + + def get_context_data(self, **kwargs): + device = get_object_or_404(DeviceInfo, pk=int(self.request.GET['id'])) + mongo = MongodbDriver() + logs = mongo.find(id=int(self.request.GET['id']), sort_by='history_date') + all_file = device.devicefile_set.all() + device_public = get_device_public() + kwargs['device'] = device + kwargs['logs'] = logs + kwargs['all_file'] = all_file + kwargs.update(device_public) + return super().get_context_data(**kwargs) \ No newline at end of file diff --git a/sandboxMP/settings.py b/sandboxMP/settings.py index 741f587..35147fa 100644 --- a/sandboxMP/settings.py +++ b/sandboxMP/settings.py @@ -44,6 +44,7 @@ INSTALLED_APPS = [ 'simple_history', 'system', 'cmdb', + 'cmdb.templatetags', ] MIDDLEWARE = [ diff --git a/templates/cmdb/deviceinfo.html b/templates/cmdb/deviceinfo.html index 3c697ec..b5a443c 100644 --- a/templates/cmdb/deviceinfo.html +++ b/templates/cmdb/deviceinfo.html @@ -339,5 +339,9 @@ } }); } + + function doDetail(id){ + window.location.href="{% url 'cmdb:eam-device-detail' %}?id="+id; + } {% endblock %} \ No newline at end of file diff --git a/templates/cmdb/deviceinfo_detail.html b/templates/cmdb/deviceinfo_detail.html new file mode 100644 index 0000000..82f0db2 --- /dev/null +++ b/templates/cmdb/deviceinfo_detail.html @@ -0,0 +1,192 @@ +{% extends "base-left.html" %} +{% load staticfiles %} +{% load extra_tags %} + +{% block css %} + +{% endblock %} + +{% block content %} + +
+ + +
+ + + +{% endblock %} + +{% block javascripts %} + + + + +{% endblock %} \ No newline at end of file