Commit 30fd51c2 authored by ibuler's avatar ibuler

Asset group detail

parent dc01833a
...@@ -2,19 +2,10 @@ ...@@ -2,19 +2,10 @@
from __future__ import unicode_literals, absolute_import from __future__ import unicode_literals, absolute_import
from django.db import models from django.db import models
import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
logger = logging.getLogger(__name__)
class AssetGroup(models.Model):
name = models.CharField(max_length=64, unique=True, null=True, blank=True, verbose_name=_('Name'))
created_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by'))
comment = models.TextField(blank=True, verbose_name=_('Comment'))
def __unicode__(self):
return self.name
class Meta:
db_table = 'asset_group'
class IDC(models.Model): class IDC(models.Model):
...@@ -24,7 +15,7 @@ class IDC(models.Model): ...@@ -24,7 +15,7 @@ class IDC(models.Model):
phone = models.CharField(max_length=32, blank=True, verbose_name=_('Phone')) phone = models.CharField(max_length=32, blank=True, verbose_name=_('Phone'))
address = models.CharField(max_length=128, blank=True, verbose_name=_("Address")) address = models.CharField(max_length=128, blank=True, verbose_name=_("Address"))
network = models.TextField(blank=True, verbose_name=_('Network')) network = models.TextField(blank=True, verbose_name=_('Network'))
date_created = models.DateField(auto_now=True, null=True, verbose_name=_('Date added')) date_created = models.DateTimeField(auto_now=True, null=True, verbose_name=_('Date added'))
operator = models.CharField(max_length=32, blank=True, verbose_name=_('Operator')) operator = models.CharField(max_length=32, blank=True, verbose_name=_('Operator'))
created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by')) created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by'))
comment = models.TextField(blank=True, verbose_name=_('Comment')) comment = models.TextField(blank=True, verbose_name=_('Comment'))
...@@ -47,7 +38,7 @@ class AssetExtend(models.Model): ...@@ -47,7 +38,7 @@ class AssetExtend(models.Model):
return self.name return self.name
class Meta: class Meta:
db_table = 'assetextend' db_table = 'asset_extend'
class AdminUser(models.Model): class AdminUser(models.Model):
...@@ -65,10 +56,10 @@ class AdminUser(models.Model): ...@@ -65,10 +56,10 @@ class AdminUser(models.Model):
return self.name return self.name
class Meta: class Meta:
db_table = 'adminuser' db_table = 'admin_user'
class SysUser(models.Model): class SystemUser(models.Model):
PROTOCOL_CHOICES = ( PROTOCOL_CHOICES = (
('ssh', 'ssh'), ('ssh', 'ssh'),
('telnet', 'telnet'), ('telnet', 'telnet'),
...@@ -94,7 +85,44 @@ class SysUser(models.Model): ...@@ -94,7 +85,44 @@ class SysUser(models.Model):
return self.name return self.name
class Meta: class Meta:
db_table = 'sysuser' db_table = 'system_user'
class AssetGroup(models.Model):
name = models.CharField(max_length=64, unique=True, verbose_name=_('Name'))
system_users = models.ManyToManyField(SystemUser, related_name='asset_groups', blank=True)
created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by'))
date_created = models.DateTimeField(auto_now=True, null=True, verbose_name=_('Date added'))
comment = models.TextField(blank=True, verbose_name=_('Comment'))
def __unicode__(self):
return self.name
class Meta:
db_table = 'asset_group'
@classmethod
def initial(cls):
asset_group = cls(name=_('Default'), commont=_('Default asset group'))
asset_group.save()
@classmethod
def generate_fake(cls, count=100):
from random import seed
import forgery_py
from django.db import IntegrityError
seed()
for i in range(count):
group = cls(name=forgery_py.name.full_name(),
comment=forgery_py.lorem_ipsum.sentence(),
created_by='Fake')
try:
group.save()
logger.debug('Generate fake asset group: %s' % group.name)
except IntegrityError:
print('Error continue')
continue
class Asset(models.Model): class Asset(models.Model):
...@@ -106,8 +134,8 @@ class Asset(models.Model): ...@@ -106,8 +134,8 @@ class Asset(models.Model):
groups = models.ManyToManyField(AssetGroup, related_name='assets', verbose_name=_('Asset groups')) groups = models.ManyToManyField(AssetGroup, related_name='assets', verbose_name=_('Asset groups'))
username = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Admin user')) username = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Admin user'))
password = models.CharField(max_length=256, null=True, blank=True, verbose_name=_("Admin password")) password = models.CharField(max_length=256, null=True, blank=True, verbose_name=_("Admin password"))
admin_user = models.ForeignKey(AdminUser, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=_("Admin user")) admin_user = models.ForeignKey(AdminUser, null=True, on_delete=models.SET_NULL, verbose_name=_("Admin user"))
sys_user = models.ManyToManyField(SysUser, null=True, blank=True, verbose_name=_("System User")) system_user = models.ManyToManyField(SystemUser, blank=True, verbose_name=_("System User"))
idc = models.ForeignKey(IDC, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=_('IDC')) idc = models.ForeignKey(IDC, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=_('IDC'))
mac_addr = models.CharField(max_length=20, null=True, blank=True, verbose_name=_("Mac address")) mac_addr = models.CharField(max_length=20, null=True, blank=True, verbose_name=_("Mac address"))
brand = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('Brand')) brand = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('Brand'))
......
{% extends 'base.html' %}
{% load common_tags %}
{% load users_tags %}
{% load static %}
{% load i18n %}
{% block custom_head_css_js %}
<link href="{% static "css/plugins/select2/select2.min.css" %}" rel="stylesheet">
<script src="{% static "js/plugins/select2/select2.full.min.js" %}"></script>
{% endblock %}
{% block content %}
<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
<div class="col-sm-12">
<div class="ibox float-e-margins">
<div class="panel-options">
<ul class="nav nav-tabs">
<li class="active"><a href="" class="text-center"><i class="fa fa-laptop"></i> {% trans 'Detail' %} </a>
</li>
<li><a href="" class="text-center"><i class="fa fa-bar-chart-o"></i> {% trans 'Asset group perm' %}</a></li>
</ul>
</div>
<div class="tab-content">
<div class="col-sm-7" style="padding-left: 0;">
<div class="ibox float-e-margins">
<div class="ibox-title">
<span class="label"><b>{{ asset_group.name }}</b></span>
<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="#"></a>
</li>
<li><a href="#"></a>
</li>
</ul>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
<table class="table">
<tbody>
<tr class="no-borders-tr">
<td>{% trans 'Name' %}:</td>
<td><b>{{ asset_group.name }}</b></td>
</tr>
<tr>
<td>{% trans 'Date created' %}:</td>
<td><b>{{ asset_group.date_created }}</b></td>
</tr>
<tr>
<td>{% trans 'Created by' %}:</td>
<td><b>{{ asset_group.created_by }}</b></td>
</tr>
<tr>
<td>{% trans 'Comment' %}:</td>
<td><b>{{ asset_group.comment }}</b></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="ibox float-e-margins">
<div class="ibox-title">
<span class="label"><b>{{ asset_group.name }}</b></span>
<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="#"></a>
</li>
<li><a href="#"></a>
</li>
</ul>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
<table class="table">
<tbody>
<tr class="no-borders-tr">
<td>{% trans 'Name' %}:</td>
<td><b>{{ asset_group.name }}</b></td>
</tr>
<tr>
<td>{% trans 'Date created' %}:</td>
<td><b>{{ asset_group.date_created }}</b></td>
</tr>
<tr>
<td>{% trans 'Created by' %}:</td>
<td><b>{{ asset_group.created_by }}</b></td>
</tr>
<tr>
<td>{% trans 'Comment' %}:</td>
<td><b>{{ asset_group.comment }}</b></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="col-sm-5" style="padding-left: 0;padding-right: 0">
<div class="panel panel-primary">
<div class="panel-heading">
<i class="fa fa-info-circle"></i> {% trans 'Associate asset user(system/admin)' %}
</div>
<div class="panel-body">
<table class="table">
<tbody>
<tr class="no-borders-tr">
<td width="50%">{% trans 'repush system user' %}:</td>
<td>
<span style="float: right">
<button class="btn btn-danger btn-xs" type="button"><i class="fa fa-refresh"></i></button>
</span>
</td>
</tr>
<form>
<tr>
<td colspan="2">
<select class="select2 form-control">
<option value="1">{% trans 'System user' %}</option>
<option value="2">{% trans 'Admin user' %}</option>
</select>
</td>
</tr>
<tr class="no-borders-tr">
<td colspan="2">
<select data-placeholder="{% trans 'Select asset user' %}" class="select2" style="width: 100%" multiple="" tabindex="4">
{% for group in groups %}
<option value="{{ group.id }}">{{ group.name }}</option>
{% endfor %}
</select>
</td>
</tr>
<tr class="no-borders-tr">
<td colspan="2">
<button type="button" class="btn btn-primary btn-sm">{% trans 'Associate' %}</button>
</td>
</tr>
</form>
{% for group in user.groups.all %}
<tr>
<td ><b>{{ group.name }}</b></td>
<td>
<button class="btn btn-danger btn-xs" type="button" style="float: right;"><i class="fa fa-minus"></i></button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block custom_foot_js %}
<script>
function switch_user_status(obj) {
var status = $(obj).prop('checked');
$.ajax({
url: "{% url 'users:user-active-api' pk=user.id %}",
type: "PUT",
data: {
'is_active': status
},
success: function (data, status) {
console.log(data)
},
error: function () {
console.log('error')
}
})
}
$(document).ready(function () {
$('.select2').select2();
})
</script>
{% endblock %}
\ No newline at end of file
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
</a> </a>
</td> </td>
<td class="text-center">{{ asset_group.assets.count }}</td> <td class="text-center">{{ asset_group.assets.count }}</td>
<td class="text-center">{{ asset_group.comment }}</td> <td class="text-center">{{ asset_group.comment|truncatewords:8 }}</td>
<td class="text-center"> <td class="text-center">
<a href="{% url 'assets:asset-group-update' pk=asset_group.id %}" class="btn btn-xs btn-info">{% trans 'Update' %}</a> <a href="{% url 'assets:asset-group-update' pk=asset_group.id %}" class="btn btn-xs btn-info">{% trans 'Update' %}</a>
<a href="{% url 'assets:asset-group-delete' pk=asset_group.id %}" class="btn btn-xs btn-danger del">{% trans 'Delete' %}</a> <a href="{% url 'assets:asset-group-delete' pk=asset_group.id %}" class="btn btn-xs btn-danger del">{% trans 'Delete' %}</a>
......
{% load i18n %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% trans 'Confirm delete' %}</title>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<p>Are you sure you want to delete "{{ object.name }}"?</p>
<input type="submit" value="Confirm" />
</form>
</body>
</html>
\ No newline at end of file
...@@ -6,6 +6,8 @@ from django.shortcuts import get_object_or_404 ...@@ -6,6 +6,8 @@ from django.shortcuts import get_object_or_404
from django.views.generic import TemplateView, ListView from django.views.generic import TemplateView, ListView
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView
from django.conf import settings
from django.db.models import Q
from django.views.generic import TemplateView, ListView from django.views.generic import TemplateView, ListView
from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView
from django.urls import reverse_lazy from django.urls import reverse_lazy
...@@ -70,20 +72,45 @@ class AssetGroupCreateView(CreateView): ...@@ -70,20 +72,45 @@ class AssetGroupCreateView(CreateView):
class AssetGroupListView(ListView): class AssetGroupListView(ListView):
model = AssetGroup model = AssetGroup
paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
context_object_name = 'asset_group_list' context_object_name = 'asset_group_list'
template_name = 'assets/asset_group_list.html' template_name = 'assets/asset_group_list.html'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = { context = {
'app': _('Assets'), 'app': _('Assets'),
'action': _('Asset group list') 'action': _('Asset group list'),
'keyword': self.request.GET.get('keyword', '')
} }
kwargs.update(context) kwargs.update(context)
return super(AssetGroupListView, self).get_context_data(**kwargs) return super(AssetGroupListView, self).get_context_data(**kwargs)
def get_queryset(self):
self.queryset = super(AssetGroupListView, self).get_queryset()
self.keyword = keyword = self.request.GET.get('keyword', '')
self.sort = sort = self.request.GET.get('sort', '-date_created')
if keyword:
self.queryset = self.queryset.filter(Q(name__icontains=keyword) |
Q(comment__icontains=keyword))
if sort:
self.queryset = self.queryset.order_by(sort)
return self.queryset
class AssetGroupDetailView(DetailView): class AssetGroupDetailView(DetailView):
pass template_name = 'assets/asset_group_detail.html'
model = AssetGroup
context_object_name = 'asset_group'
def get_context_data(self, **kwargs):
context = {
'app': _('Assets'),
'action': _('Asset group detail')
}
kwargs.update(context)
return super(AssetGroupDetailView, self).get_context_data(**kwargs)
class AssetGroupUpdateView(UpdateView): class AssetGroupUpdateView(UpdateView):
...@@ -103,4 +130,6 @@ class AssetGroupUpdateView(UpdateView): ...@@ -103,4 +130,6 @@ class AssetGroupUpdateView(UpdateView):
class AssetGroupDeleteView(DeleteView): class AssetGroupDeleteView(DeleteView):
pass template_name = 'assets/delete_confirm.html'
model = AssetGroup
success_url = reverse_lazy('assets:asset-group-list')
...@@ -8,7 +8,7 @@ msgid "" ...@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Jumpserver 0.3.3\n" "Project-Id-Version: Jumpserver 0.3.3\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-06 15:08+0800\n" "POT-Creation-Date: 2016-09-06 19:12+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: ibuler <ibuler@qq.com>\n" "Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: Jumpserver team<ibuler@qq.com>\n" "Language-Team: Jumpserver team<ibuler@qq.com>\n"
...@@ -21,7 +21,7 @@ msgstr "" ...@@ -21,7 +21,7 @@ msgstr ""
msgid "Select asset groups" msgid "Select asset groups"
msgstr "添加到资产组" msgstr "添加到资产组"
#: assets/forms.py:25 assets/models.py:144 templates/_nav.html:21 #: assets/forms.py:25 assets/models.py:171 templates/_nav.html:21
msgid "Asset" msgid "Asset"
msgstr "资产" msgstr "资产"
...@@ -29,67 +29,79 @@ msgstr "资产" ...@@ -29,67 +29,79 @@ msgstr "资产"
msgid "Select assets" msgid "Select assets"
msgstr "选择资产" msgstr "选择资产"
#: assets/models.py:9 assets/models.py:21 assets/models.py:54 #: assets/models.py:12 assets/models.py:48 assets/models.py:81
#: assets/models.py:76 assets/templates/assets/asset_group_list.html:12 #: assets/models.py:103 assets/templates/assets/asset_group_detail.html:63
#: users/models.py:60 users/models.py:107 #: assets/templates/assets/asset_group_list.html:12 users/models.py:60
#: users/templates/users/user_detail.html:69 #: users/models.py:107 users/templates/users/user_detail.html:69
#: users/templates/users/user_list.html:12 #: users/templates/users/user_list.html:12
msgid "Name" msgid "Name"
msgstr "名称" msgstr "名称"
#: assets/models.py:10 assets/models.py:29 assets/models.py:42 #: assets/models.py:13 assets/models.py:56 assets/models.py:69
#: assets/models.py:61 assets/models.py:90 assets/models.py:125 #: assets/models.py:88 assets/models.py:117 assets/models.py:152
#: assets/models.py:145 users/models.py:122 #: assets/models.py:172 users/models.py:122
#: users/templates/users/user_detail.html:101 #: users/templates/users/user_detail.html:101
msgid "Created by" msgid "Created by"
msgstr "创建者" msgstr "创建者"
#: assets/models.py:11 assets/models.py:30 assets/models.py:44 #: assets/models.py:14 assets/models.py:54 assets/models.py:154
#: assets/models.py:62 assets/models.py:91 assets/models.py:128 msgid "Date added"
#: assets/models.py:147 assets/templates/assets/asset_group_list.html:14 msgstr "加入日期"
#: users/models.py:61 users/models.py:118
#: users/templates/users/user_detail.html:113 #: assets/models.py:15 assets/models.py:57 assets/models.py:71
#: assets/models.py:89 assets/models.py:118 assets/models.py:155
#: assets/models.py:174 assets/templates/assets/asset_group_detail.html:75
#: assets/templates/assets/asset_group_list.html:14 users/models.py:61
#: users/models.py:118 users/templates/users/user_detail.html:113
msgid "Comment" msgid "Comment"
msgstr "备注" msgstr "备注"
#: assets/models.py:22 #: assets/models.py:25
#, fuzzy
#| msgid "As default"
msgid "Default"
msgstr "默认使用"
#: assets/models.py:25
#, fuzzy
#| msgid "Create asset group"
msgid "Default asset group"
msgstr "创建资产组"
#: assets/models.py:49
msgid "Bandwidth" msgid "Bandwidth"
msgstr "带宽" msgstr "带宽"
#: assets/models.py:23 #: assets/models.py:50
msgid "Contact" msgid "Contact"
msgstr "联系人" msgstr "联系人"
#: assets/models.py:24 users/models.py:113 #: assets/models.py:51 users/models.py:113
#: users/templates/users/user_detail.html:82 #: users/templates/users/user_detail.html:82
msgid "Phone" msgid "Phone"
msgstr "手机" msgstr "手机"
#: assets/models.py:25 #: assets/models.py:52
msgid "Address" msgid "Address"
msgstr "地址" msgstr "地址"
#: assets/models.py:26 #: assets/models.py:53
msgid "Network" msgid "Network"
msgstr "网络" msgstr "网络"
#: assets/models.py:27 assets/models.py:127 #: assets/models.py:55
msgid "Date added"
msgstr "加入日期"
#: assets/models.py:28
msgid "Operator" msgid "Operator"
msgstr "运营商" msgstr "运营商"
#: assets/models.py:40 assets/models.py:142 #: assets/models.py:67 assets/models.py:169
msgid "KEY" msgid "KEY"
msgstr "KEY" msgstr "KEY"
#: assets/models.py:41 assets/models.py:143 #: assets/models.py:68 assets/models.py:170
msgid "VALUE" msgid "VALUE"
msgstr "VALUE" msgstr "VALUE"
#: assets/models.py:55 assets/models.py:77 users/forms.py:13 #: assets/models.py:82 assets/models.py:104 users/forms.py:13
#: users/models.py:106 users/templates/users/login.html:53 #: users/models.py:106 users/templates/users/login.html:53
#: users/templates/users/user_detail.html:73 #: users/templates/users/user_detail.html:73
#: users/templates/users/user_list.html:13 #: users/templates/users/user_list.html:13
...@@ -97,7 +109,7 @@ msgstr "VALUE" ...@@ -97,7 +109,7 @@ msgstr "VALUE"
msgid "Username" msgid "Username"
msgstr "用户名" msgstr "用户名"
#: assets/models.py:56 assets/models.py:78 users/forms.py:15 #: assets/models.py:83 assets/models.py:105 users/forms.py:15
#: users/templates/users/login.html:56 #: users/templates/users/login.html:56
#: users/templates/users/reset_password.html:52 #: users/templates/users/reset_password.html:52
#: users/templates/users/user_create.html:8 #: users/templates/users/user_create.html:8
...@@ -107,149 +119,151 @@ msgstr "用户名" ...@@ -107,149 +119,151 @@ msgstr "用户名"
msgid "Password" msgid "Password"
msgstr "密码" msgstr "密码"
#: assets/models.py:57 assets/models.py:80 #: assets/models.py:84 assets/models.py:107
msgid "SSH private key" msgid "SSH private key"
msgstr "ssh密钥" msgstr "ssh密钥"
#: assets/models.py:58 assets/models.py:82 #: assets/models.py:85 assets/models.py:109
msgid "As default" msgid "As default"
msgstr "默认使用" msgstr "默认使用"
#: assets/models.py:59 assets/models.py:84 #: assets/models.py:86 assets/models.py:111
msgid "Auto update pass/key" msgid "Auto update pass/key"
msgstr "自动更新密码/密钥" msgstr "自动更新密码/密钥"
#: assets/models.py:79 #: assets/models.py:106
msgid "Protocol" msgid "Protocol"
msgstr "协议" msgstr "协议"
#: assets/models.py:81 #: assets/models.py:108
msgid "SSH public key" msgid "SSH public key"
msgstr "ssh公钥" msgstr "ssh公钥"
#: assets/models.py:83 #: assets/models.py:110
msgid "Auto push" msgid "Auto push"
msgstr "自动推送" msgstr "自动推送"
#: assets/models.py:85 #: assets/models.py:112
msgid "Sudo" msgid "Sudo"
msgstr "Sudo" msgstr "Sudo"
#: assets/models.py:86 #: assets/models.py:113
msgid "Shell" msgid "Shell"
msgstr "Shell" msgstr "Shell"
#: assets/models.py:87 templates/_header_bar.html:41 templates/_nav.html:4 #: assets/models.py:114 templates/_header_bar.html:41 templates/_nav.html:4
msgid "Home" msgid "Home"
msgstr "仪表盘" msgstr "仪表盘"
#: assets/models.py:88 #: assets/models.py:115
msgid "Uid" msgid "Uid"
msgstr "Uid" msgstr "Uid"
#: assets/models.py:101 #: assets/models.py:128
msgid "IP" msgid "IP"
msgstr "IP" msgstr "IP"
#: assets/models.py:102 #: assets/models.py:129
msgid "Other IP" msgid "Other IP"
msgstr "其它IP" msgstr "其它IP"
#: assets/models.py:103 #: assets/models.py:130
msgid "Remote card IP" msgid "Remote card IP"
msgstr "远控卡IP" msgstr "远控卡IP"
#: assets/models.py:104 #: assets/models.py:131
msgid "Hostname" msgid "Hostname"
msgstr "用户名" msgstr "用户名"
#: assets/models.py:105 #: assets/models.py:132
msgid "Port" msgid "Port"
msgstr "端口" msgstr "端口"
#: assets/models.py:106 #: assets/models.py:133
msgid "Asset groups" msgid "Asset groups"
msgstr "用户组" msgstr "用户组"
#: assets/models.py:107 assets/models.py:109 templates/_nav.html:24 #: assets/models.py:134 assets/models.py:136 templates/_nav.html:24
msgid "Admin user" msgid "Admin user"
msgstr "管理用户" msgstr "管理用户"
#: assets/models.py:108 #: assets/models.py:135
msgid "Admin password" msgid "Admin password"
msgstr "管理员密码" msgstr "管理员密码"
#: assets/models.py:110 #: assets/models.py:137
msgid "System User" msgid "System User"
msgstr "系统用户" msgstr "系统用户"
#: assets/models.py:111 templates/_nav.html:23 #: assets/models.py:138 templates/_nav.html:23
msgid "IDC" msgid "IDC"
msgstr "机房" msgstr "机房"
#: assets/models.py:112 #: assets/models.py:139
msgid "Mac address" msgid "Mac address"
msgstr "Mac地址" msgstr "Mac地址"
#: assets/models.py:113 #: assets/models.py:140
msgid "Brand" msgid "Brand"
msgstr "品牌" msgstr "品牌"
#: assets/models.py:114 #: assets/models.py:141
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
#: assets/models.py:115 #: assets/models.py:142
msgid "Memory" msgid "Memory"
msgstr "内存" msgstr "内存"
#: assets/models.py:116 #: assets/models.py:143
msgid "Disk" msgid "Disk"
msgstr "硬盘" msgstr "硬盘"
#: assets/models.py:117 #: assets/models.py:144
msgid "OS" msgid "OS"
msgstr "操作系统" msgstr "操作系统"
#: assets/models.py:118 #: assets/models.py:145
msgid "Cabinet number" msgid "Cabinet number"
msgstr "机柜编号" msgstr "机柜编号"
#: assets/models.py:119 #: assets/models.py:146
msgid "Cabinet position" msgid "Cabinet position"
msgstr "机柜层号" msgstr "机柜层号"
#: assets/models.py:120 #: assets/models.py:147
msgid "Asset number" msgid "Asset number"
msgstr "资产编号" msgstr "资产编号"
#: assets/models.py:121 #: assets/models.py:148
msgid "Asset status" msgid "Asset status"
msgstr "资产状态" msgstr "资产状态"
#: assets/models.py:122 #: assets/models.py:149
msgid "Asset type" msgid "Asset type"
msgstr "系统类型" msgstr "系统类型"
#: assets/models.py:123 #: assets/models.py:150
msgid "Asset environment" msgid "Asset environment"
msgstr "资产环境" msgstr "资产环境"
#: assets/models.py:124 #: assets/models.py:151
msgid "Serial number" msgid "Serial number"
msgstr "序列号" msgstr "序列号"
#: assets/models.py:126 #: assets/models.py:153
msgid "Is active" msgid "Is active"
msgstr "是否激活" msgstr "是否激活"
#: assets/templates/assets/asset_group_create.html:16 #: assets/templates/assets/asset_group_create.html:16
#: assets/templates/assets/asset_group_list.html:5 assets/views.py:60 #: assets/templates/assets/asset_group_list.html:5 assets/views.py:62
#: assets/views.py:98 #: assets/views.py:117
msgid "Create asset group" msgid "Create asset group"
msgstr "创建资产组" msgstr "创建资产组"
#: assets/templates/assets/asset_group_create.html:50 #: assets/templates/assets/asset_group_create.html:50
#: assets/templates/assets/asset_group_detail.html:124
#: assets/templates/assets/asset_group_detail.html:132
#: users/templates/users/_user.html:70 #: users/templates/users/_user.html:70
#: users/templates/users/user_detail.html:162 #: users/templates/users/user_detail.html:162
#: users/templates/users/user_detail.html:170 #: users/templates/users/user_detail.html:170
...@@ -264,6 +278,65 @@ msgstr "重置" ...@@ -264,6 +278,65 @@ msgstr "重置"
msgid "Submit" msgid "Submit"
msgstr "提交" msgstr "提交"
#: assets/templates/assets/asset_group_detail.html:18
msgid "Detail"
msgstr ""
#: assets/templates/assets/asset_group_detail.html:20
#, fuzzy
#| msgid "Asset group list"
msgid "Asset group assets"
msgstr "资产组列表"
#: assets/templates/assets/asset_group_detail.html:28
#: templates/_header_bar.html:8 users/templates/users/user_detail.html:29
msgid "Search"
msgstr "搜索"
#: assets/templates/assets/asset_group_detail.html:67
#, fuzzy
#| msgid "Date added"
msgid "Date create"
msgstr "加入日期"
#: assets/templates/assets/asset_group_detail.html:71
#, fuzzy
#| msgid "Created by"
msgid "Create by"
msgstr "创建者"
#: assets/templates/assets/asset_group_detail.html:86
#: users/templates/users/user_detail.html:124
msgid "Quick modify"
msgstr "快速修改"
#: assets/templates/assets/asset_group_detail.html:121
#: users/templates/users/reset_password.html:45
#: users/templates/users/user_detail.html:159 users/utils.py:98
msgid "Reset password"
msgstr "重置密码"
#: assets/templates/assets/asset_group_detail.html:129
#: users/templates/users/user_detail.html:167
msgid "Reset ssh key"
msgstr "重置密钥"
#: assets/templates/assets/asset_group_detail.html:143 templates/_nav.html:13
#: users/models.py:109 users/templates/users/user_detail.html:181
#: users/templates/users/user_list.html:15
msgid "User group"
msgstr "用户组"
#: assets/templates/assets/asset_group_detail.html:151 users/forms.py:34
#: users/forms.py:54 users/templates/users/user_detail.html:189
msgid "Join user groups"
msgstr "添加到用户组"
#: assets/templates/assets/asset_group_detail.html:160
#: users/templates/users/user_detail.html:198
msgid "Join"
msgstr "加入"
#: assets/templates/assets/asset_group_list.html:13 #: assets/templates/assets/asset_group_list.html:13
#: users/templates/users/user_list.html:16 #: users/templates/users/user_list.html:16
msgid "Asset num" msgid "Asset num"
...@@ -303,19 +376,20 @@ msgstr "批量导出" ...@@ -303,19 +376,20 @@ msgstr "批量导出"
msgid "Create asset" msgid "Create asset"
msgstr "创建资产" msgstr "创建资产"
#: assets/views.py:59 assets/views.py:78 assets/views.py:97 #: assets/templates/assets/delete_confirm.html:6
#: users/templates/users/user_delete_confirm.html:6
msgid "Confirm delete"
msgstr "确认删除"
#: assets/views.py:61 assets/views.py:81 assets/views.py:116
#: templates/_nav.html:18 #: templates/_nav.html:18
msgid "Assets" msgid "Assets"
msgstr "资产管理" msgstr "资产管理"
#: assets/views.py:79 #: assets/views.py:82
msgid "Asset group list" msgid "Asset group list"
msgstr "资产组列表" msgstr "资产组列表"
#: templates/_header_bar.html:8 users/templates/users/user_detail.html:29
msgid "Search"
msgstr "搜索"
#: templates/_header_bar.html:14 #: templates/_header_bar.html:14
msgid "Welcome to use Jumpserver system" msgid "Welcome to use Jumpserver system"
msgstr "欢迎使用Jumpserver开源跳板机系统" msgstr "欢迎使用Jumpserver开源跳板机系统"
...@@ -333,8 +407,8 @@ msgstr "注销登录" ...@@ -333,8 +407,8 @@ msgstr "注销登录"
msgid "Login" msgid "Login"
msgstr "登录" msgstr "登录"
#: templates/_nav.html:9 users/views.py:50 users/views.py:63 users/views.py:103 #: templates/_nav.html:9 users/views.py:92 users/views.py:105
#: users/views.py:120 users/views.py:145 users/views.py:158 #: users/views.py:145 users/views.py:162 users/views.py:187 users/views.py:200
msgid "Users" msgid "Users"
msgstr "用户管理" msgstr "用户管理"
...@@ -342,12 +416,6 @@ msgstr "用户管理" ...@@ -342,12 +416,6 @@ msgstr "用户管理"
msgid "User" msgid "User"
msgstr "用户" msgstr "用户"
#: templates/_nav.html:13 users/models.py:109
#: users/templates/users/user_detail.html:181
#: users/templates/users/user_list.html:15
msgid "User group"
msgstr "用户组"
#: templates/_nav.html:22 #: templates/_nav.html:22
msgid "Asset group" msgid "Asset group"
msgstr "资产组" msgstr "资产组"
...@@ -408,11 +476,6 @@ msgstr "" ...@@ -408,11 +476,6 @@ msgstr ""
msgid "Captcha" msgid "Captcha"
msgstr "验证码" msgstr "验证码"
#: users/forms.py:34 users/forms.py:54
#: users/templates/users/user_detail.html:189
msgid "Join user groups"
msgstr "添加到用户组"
#: users/models.py:102 users/models.py:225 #: users/models.py:102 users/models.py:225
msgid "Administrator" msgid "Administrator"
msgstr "管理员" msgstr "管理员"
...@@ -459,7 +522,7 @@ msgid "System" ...@@ -459,7 +522,7 @@ msgid "System"
msgstr "系统" msgstr "系统"
#: users/templates/users/_user.html:17 users/templates/users/user_list.html:5 #: users/templates/users/_user.html:17 users/templates/users/user_list.html:5
#: users/views.py:63 #: users/views.py:105
msgid "Create user" msgid "Create user"
msgstr "创建用户" msgstr "创建用户"
...@@ -484,11 +547,6 @@ msgstr "输入您的邮箱, 将会发一封重置短信邮件到您的邮箱中" ...@@ -484,11 +547,6 @@ msgstr "输入您的邮箱, 将会发一封重置短信邮件到您的邮箱中"
msgid "Captcha invalid" msgid "Captcha invalid"
msgstr "验证码错误" msgstr "验证码错误"
#: users/templates/users/reset_password.html:45
#: users/templates/users/user_detail.html:159 users/utils.py:98
msgid "Reset password"
msgstr "重置密码"
#: users/templates/users/reset_password.html:55 #: users/templates/users/reset_password.html:55
msgid "Password again" msgid "Password again"
msgstr "再次输入密码" msgstr "再次输入密码"
...@@ -501,11 +559,7 @@ msgstr "设置" ...@@ -501,11 +559,7 @@ msgstr "设置"
msgid "Reset link will be generated and sent to the user. " msgid "Reset link will be generated and sent to the user. "
msgstr "生成重置密码连接,通过邮件发送给用户" msgstr "生成重置密码连接,通过邮件发送给用户"
#: users/templates/users/user_delete_confirm.html:6 #: users/templates/users/user_detail.html:18 users/views.py:162
msgid "Confirm delete"
msgstr "确认删除"
#: users/templates/users/user_detail.html:18 users/views.py:120
msgid "User detail" msgid "User detail"
msgstr "用户详情" msgstr "用户详情"
...@@ -525,19 +579,7 @@ msgstr "创建日期" ...@@ -525,19 +579,7 @@ msgstr "创建日期"
msgid "Last login" msgid "Last login"
msgstr "最后登录" msgstr "最后登录"
#: users/templates/users/user_detail.html:124 #: users/templates/users/user_group_create.html:16 users/views.py:200
msgid "Quick modify"
msgstr "快速修改"
#: users/templates/users/user_detail.html:167
msgid "Reset ssh key"
msgstr "重置密钥"
#: users/templates/users/user_detail.html:198
msgid "Join"
msgstr "加入"
#: users/templates/users/user_group_create.html:16 users/views.py:158
msgid "Create user group" msgid "Create user group"
msgstr "创建用户组" msgstr "创建用户组"
...@@ -546,18 +588,10 @@ msgstr "创建用户组" ...@@ -546,18 +588,10 @@ msgstr "创建用户组"
msgid "Active" msgid "Active"
msgstr "激活" msgstr "激活"
#: users/templates/users/user_update.html:3 users/views.py:103 #: users/templates/users/user_update.html:3 users/views.py:145
msgid "Update user" msgid "Update user"
msgstr "编辑用户" msgstr "编辑用户"
#: users/urls.py:23
msgid "Logout success"
msgstr "退出登录成功"
#: users/urls.py:24
msgid "Logout success, return login page"
msgstr "退出登录成功,返回到登录页面"
#: users/utils.py:47 #: users/utils.py:47
msgid "Begin to generate ssh private key ..." msgid "Begin to generate ssh private key ..."
msgstr "开始生成ssh密钥" msgstr "开始生成ssh密钥"
...@@ -659,45 +693,53 @@ msgstr "" ...@@ -659,45 +693,53 @@ msgstr ""
" </br>\n" " </br>\n"
" " " "
#: users/views.py:50 #: users/views.py:62
msgid "Logout success"
msgstr "退出登录成功"
#: users/views.py:63
msgid "Logout success, return login page"
msgstr "退出登录成功,返回到登录页面"
#: users/views.py:92
msgid "User list" msgid "User list"
msgstr "用户列表" msgstr "用户列表"
#: users/views.py:59 #: users/views.py:101
#, python-format #, python-format
msgid "Create user <a href=\"%s\">%s</a> success." msgid "Create user <a href=\"%s\">%s</a> success."
msgstr "创建用户 <a href=\"%s\">%s</a> 成功" msgstr "创建用户 <a href=\"%s\">%s</a> 成功"
#: users/views.py:145 #: users/views.py:187
msgid "User group list" msgid "User group list"
msgstr "用户组列表" msgstr "用户组列表"
#: users/views.py:190 #: users/views.py:232
msgid "Email address invalid, input again" msgid "Email address invalid, input again"
msgstr "邮箱地址错误,重新输入" msgstr "邮箱地址错误,重新输入"
#: users/views.py:201 #: users/views.py:243
msgid "Send reset password message" msgid "Send reset password message"
msgstr "发送重置密码邮件" msgstr "发送重置密码邮件"
#: users/views.py:202 #: users/views.py:244
msgid "Send reset password mail success, login your mail box and follow it " msgid "Send reset password mail success, login your mail box and follow it "
msgstr "" msgstr ""
"发送重置邮件成功, 请登录邮箱查看, 按照提示操作 (如果没收到,请等待3-5分钟)" "发送重置邮件成功, 请登录邮箱查看, 按照提示操作 (如果没收到,请等待3-5分钟)"
#: users/views.py:214 #: users/views.py:256
msgid "Reset password success" msgid "Reset password success"
msgstr "重置密码成功" msgstr "重置密码成功"
#: users/views.py:215 #: users/views.py:257
msgid "Reset password success, return to login page" msgid "Reset password success, return to login page"
msgstr "重置密码成功,返回到登录页面" msgstr "重置密码成功,返回到登录页面"
#: users/views.py:231 users/views.py:244 #: users/views.py:273 users/views.py:286
msgid "Token invalid or expired" msgid "Token invalid or expired"
msgstr "Token错误或失效" msgstr "Token错误或失效"
#: users/views.py:240 #: users/views.py:282
msgid "Password not same" msgid "Password not same"
msgstr "密码不一致" msgstr "密码不一致"
......
...@@ -38,6 +38,7 @@ th a { ...@@ -38,6 +38,7 @@ th a {
color: white; color: white;
} }
.select2-selection--single,
.select2-selection--multiple { .select2-selection--multiple {
border: 1px solid #e5e6e7 !important; border: 1px solid #e5e6e7 !important;
cursor: text !important; cursor: text !important;
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
<div class="ibox-content"> <div class="ibox-content">
<div class=""> <div class="">
{# left button add #}
{% block content_left_head %} {% endblock %} {% block content_left_head %} {% endblock %}
<form id="search_form" method="get" action="" class="pull-right mail-search"> <form id="search_form" method="get" action="" class="pull-right mail-search">
<div class="input-group"> <div class="input-group">
......
...@@ -34,11 +34,6 @@ ...@@ -34,11 +34,6 @@
</div> </div>
{% endif %} {% endif %}
<script> <script>
{# function sleep(n) { //n表示的毫秒数#}
{# var start = new Date().getTime();#}
{# while (true) if (new Date().getTime() - start > n) break;#}
{# }#}
$(document).ready(function () { $(document).ready(function () {
$('.page').click(function () { $('.page').click(function () {
var searchStr = location.search; var searchStr = location.search;
......
...@@ -19,19 +19,6 @@ ...@@ -19,19 +19,6 @@
</li> </li>
<li><a href="" class="text-center"><i class="fa fa-bar-chart-o"></i> {% trans 'User assets' %}</a></li> <li><a href="" class="text-center"><i class="fa fa-bar-chart-o"></i> {% trans 'User assets' %}</a></li>
<li><a href="" class="text-center"><i class="fa fa-bar-chart-o"></i> {% trans 'User log' %}</a></li> <li><a href="" class="text-center"><i class="fa fa-bar-chart-o"></i> {% trans 'User log' %}</a></li>
<div class="" style="float: right">
<form id="search_form" method="get" action="" class="pull-right mail-search">
<div class="input-group">
<input type="text" class="form-control input-sm" id="keyword" name="keyword"
value="{{ keyword }}" placeholder="Search">
<div class="input-group-btn">
<button id='search_btn' type="submit" class="btn btn-sm btn-primary">
{% trans 'Search' %}
</button>
</div>
</div>
</form>
</div>
</ul> </ul>
</div> </div>
<div class="tab-content"> <div class="tab-content">
...@@ -118,7 +105,7 @@ ...@@ -118,7 +105,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-sm-5" style="padding-left: 0px;"> <div class="col-sm-5" style="padding-left: 0;padding-right: 0">
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-info-circle"></i> {% trans 'Quick modify' %} <i class="fa fa-info-circle"></i> {% trans 'Quick modify' %}
......
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