diff --git a/apps/assets/models.py b/apps/assets/models.py
index 4d76b320e..3fd399a26 100644
--- a/apps/assets/models.py
+++ b/apps/assets/models.py
@@ -2,19 +2,10 @@
from __future__ import unicode_literals, absolute_import
from django.db import models
+import logging
from django.utils.translation import ugettext_lazy as _
-
-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'
+logger = logging.getLogger(__name__)
class IDC(models.Model):
@@ -24,7 +15,7 @@ class IDC(models.Model):
phone = models.CharField(max_length=32, blank=True, verbose_name=_('Phone'))
address = models.CharField(max_length=128, blank=True, verbose_name=_("Address"))
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'))
created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by'))
comment = models.TextField(blank=True, verbose_name=_('Comment'))
@@ -47,7 +38,7 @@ class AssetExtend(models.Model):
return self.name
class Meta:
- db_table = 'assetextend'
+ db_table = 'asset_extend'
class AdminUser(models.Model):
@@ -65,10 +56,10 @@ class AdminUser(models.Model):
return self.name
class Meta:
- db_table = 'adminuser'
+ db_table = 'admin_user'
-class SysUser(models.Model):
+class SystemUser(models.Model):
PROTOCOL_CHOICES = (
('ssh', 'ssh'),
('telnet', 'telnet'),
@@ -94,7 +85,44 @@ class SysUser(models.Model):
return self.name
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):
@@ -106,8 +134,8 @@ class Asset(models.Model):
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'))
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"))
- sys_user = models.ManyToManyField(SysUser, null=True, blank=True, verbose_name=_("System User"))
+ admin_user = models.ForeignKey(AdminUser, null=True, on_delete=models.SET_NULL, verbose_name=_("Admin 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'))
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'))
diff --git a/apps/assets/templates/assets/asset_group_detail.html b/apps/assets/templates/assets/asset_group_detail.html
new file mode 100644
index 000000000..643f7608d
--- /dev/null
+++ b/apps/assets/templates/assets/asset_group_detail.html
@@ -0,0 +1,199 @@
+{% extends 'base.html' %}
+{% load common_tags %}
+{% load users_tags %}
+{% load static %}
+{% load i18n %}
+
+{% block custom_head_css_js %}
+
+
+{% endblock %}
+{% block content %}
+
+
+
+
+
+
+
+
+
+
{{ asset_group.name }}
+
+
+
+
+
+
+ {% trans 'Name' %}: |
+ {{ asset_group.name }} |
+
+
+ {% trans 'Date created' %}: |
+ {{ asset_group.date_created }} |
+
+
+ {% trans 'Created by' %}: |
+ {{ asset_group.created_by }} |
+
+
+ {% trans 'Comment' %}: |
+ {{ asset_group.comment }} |
+
+
+
+
+
+
+
+
+
{{ asset_group.name }}
+
+
+
+
+
+
+ {% trans 'Name' %}: |
+ {{ asset_group.name }} |
+
+
+ {% trans 'Date created' %}: |
+ {{ asset_group.date_created }} |
+
+
+ {% trans 'Created by' %}: |
+ {{ asset_group.created_by }} |
+
+
+ {% trans 'Comment' %}: |
+ {{ asset_group.comment }} |
+
+
+
+
+
+
+
+
+
+ {% trans 'Associate asset user(system/admin)' %}
+
+
+
+
+
+ {% trans 'repush system user' %}: |
+
+
+
+
+ |
+
+
+ {% for group in user.groups.all %}
+
+ {{ group.name }} |
+
+
+ |
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+{% block custom_foot_js %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/apps/assets/templates/assets/asset_group_list.html b/apps/assets/templates/assets/asset_group_list.html
index b69bfa8b9..c5a4380ba 100644
--- a/apps/assets/templates/assets/asset_group_list.html
+++ b/apps/assets/templates/assets/asset_group_list.html
@@ -27,7 +27,7 @@
{{ asset_group.assets.count }} |
- {{ asset_group.comment }} |
+ {{ asset_group.comment|truncatewords:8 }} |
{% trans 'Update' %}
{% trans 'Delete' %}
diff --git a/apps/assets/templates/assets/delete_confirm.html b/apps/assets/templates/assets/delete_confirm.html
new file mode 100644
index 000000000..777d1dbf9
--- /dev/null
+++ b/apps/assets/templates/assets/delete_confirm.html
@@ -0,0 +1,15 @@
+{% load i18n %}
+
+
+
+
+ {% trans 'Confirm delete' %}
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/assets/views.py b/apps/assets/views.py
index efe698f13..a88cafe67 100644
--- a/apps/assets/views.py
+++ b/apps/assets/views.py
@@ -6,6 +6,8 @@ from django.shortcuts import get_object_or_404
from django.views.generic import TemplateView, ListView
from django.urls import reverse_lazy
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.edit import CreateView, DeleteView, FormView, UpdateView
from django.urls import reverse_lazy
@@ -70,20 +72,45 @@ class AssetGroupCreateView(CreateView):
class AssetGroupListView(ListView):
model = AssetGroup
+ paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
context_object_name = 'asset_group_list'
template_name = 'assets/asset_group_list.html'
def get_context_data(self, **kwargs):
context = {
'app': _('Assets'),
- 'action': _('Asset group list')
+ 'action': _('Asset group list'),
+ 'keyword': self.request.GET.get('keyword', '')
}
kwargs.update(context)
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):
- 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):
@@ -103,4 +130,6 @@ class AssetGroupUpdateView(UpdateView):
class AssetGroupDeleteView(DeleteView):
- pass
+ template_name = 'assets/delete_confirm.html'
+ model = AssetGroup
+ success_url = reverse_lazy('assets:asset-group-list')
diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po
index 255849ad4..ccb101d78 100644
--- a/apps/locale/zh/LC_MESSAGES/django.po
+++ b/apps/locale/zh/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Jumpserver 0.3.3\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"
"Last-Translator: ibuler \n"
"Language-Team: Jumpserver team\n"
@@ -21,7 +21,7 @@ msgstr ""
msgid "Select asset groups"
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"
msgstr "资产"
@@ -29,67 +29,79 @@ msgstr "资产"
msgid "Select assets"
msgstr "选择资产"
-#: assets/models.py:9 assets/models.py:21 assets/models.py:54
-#: assets/models.py:76 assets/templates/assets/asset_group_list.html:12
-#: users/models.py:60 users/models.py:107
-#: users/templates/users/user_detail.html:69
+#: assets/models.py:12 assets/models.py:48 assets/models.py:81
+#: assets/models.py:103 assets/templates/assets/asset_group_detail.html:63
+#: assets/templates/assets/asset_group_list.html:12 users/models.py:60
+#: users/models.py:107 users/templates/users/user_detail.html:69
#: users/templates/users/user_list.html:12
msgid "Name"
msgstr "名称"
-#: assets/models.py:10 assets/models.py:29 assets/models.py:42
-#: assets/models.py:61 assets/models.py:90 assets/models.py:125
-#: assets/models.py:145 users/models.py:122
+#: assets/models.py:13 assets/models.py:56 assets/models.py:69
+#: assets/models.py:88 assets/models.py:117 assets/models.py:152
+#: assets/models.py:172 users/models.py:122
#: users/templates/users/user_detail.html:101
msgid "Created by"
msgstr "创建者"
-#: assets/models.py:11 assets/models.py:30 assets/models.py:44
-#: assets/models.py:62 assets/models.py:91 assets/models.py:128
-#: assets/models.py:147 assets/templates/assets/asset_group_list.html:14
-#: users/models.py:61 users/models.py:118
-#: users/templates/users/user_detail.html:113
+#: assets/models.py:14 assets/models.py:54 assets/models.py:154
+msgid "Date added"
+msgstr "加入日期"
+
+#: 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"
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"
msgstr "带宽"
-#: assets/models.py:23
+#: assets/models.py:50
msgid "Contact"
msgstr "联系人"
-#: assets/models.py:24 users/models.py:113
+#: assets/models.py:51 users/models.py:113
#: users/templates/users/user_detail.html:82
msgid "Phone"
msgstr "手机"
-#: assets/models.py:25
+#: assets/models.py:52
msgid "Address"
msgstr "地址"
-#: assets/models.py:26
+#: assets/models.py:53
msgid "Network"
msgstr "网络"
-#: assets/models.py:27 assets/models.py:127
-msgid "Date added"
-msgstr "加入日期"
-
-#: assets/models.py:28
+#: assets/models.py:55
msgid "Operator"
msgstr "运营商"
-#: assets/models.py:40 assets/models.py:142
+#: assets/models.py:67 assets/models.py:169
msgid "KEY"
msgstr "KEY"
-#: assets/models.py:41 assets/models.py:143
+#: assets/models.py:68 assets/models.py:170
msgid "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/templates/users/user_detail.html:73
#: users/templates/users/user_list.html:13
@@ -97,7 +109,7 @@ msgstr "VALUE"
msgid "Username"
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/reset_password.html:52
#: users/templates/users/user_create.html:8
@@ -107,149 +119,151 @@ msgstr "用户名"
msgid "Password"
msgstr "密码"
-#: assets/models.py:57 assets/models.py:80
+#: assets/models.py:84 assets/models.py:107
msgid "SSH private key"
msgstr "ssh密钥"
-#: assets/models.py:58 assets/models.py:82
+#: assets/models.py:85 assets/models.py:109
msgid "As default"
msgstr "默认使用"
-#: assets/models.py:59 assets/models.py:84
+#: assets/models.py:86 assets/models.py:111
msgid "Auto update pass/key"
msgstr "自动更新密码/密钥"
-#: assets/models.py:79
+#: assets/models.py:106
msgid "Protocol"
msgstr "协议"
-#: assets/models.py:81
+#: assets/models.py:108
msgid "SSH public key"
msgstr "ssh公钥"
-#: assets/models.py:83
+#: assets/models.py:110
msgid "Auto push"
msgstr "自动推送"
-#: assets/models.py:85
+#: assets/models.py:112
msgid "Sudo"
msgstr "Sudo"
-#: assets/models.py:86
+#: assets/models.py:113
msgid "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"
msgstr "仪表盘"
-#: assets/models.py:88
+#: assets/models.py:115
msgid "Uid"
msgstr "Uid"
-#: assets/models.py:101
+#: assets/models.py:128
msgid "IP"
msgstr "IP"
-#: assets/models.py:102
+#: assets/models.py:129
msgid "Other IP"
msgstr "其它IP"
-#: assets/models.py:103
+#: assets/models.py:130
msgid "Remote card IP"
msgstr "远控卡IP"
-#: assets/models.py:104
+#: assets/models.py:131
msgid "Hostname"
msgstr "用户名"
-#: assets/models.py:105
+#: assets/models.py:132
msgid "Port"
msgstr "端口"
-#: assets/models.py:106
+#: assets/models.py:133
msgid "Asset groups"
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"
msgstr "管理用户"
-#: assets/models.py:108
+#: assets/models.py:135
msgid "Admin password"
msgstr "管理员密码"
-#: assets/models.py:110
+#: assets/models.py:137
msgid "System User"
msgstr "系统用户"
-#: assets/models.py:111 templates/_nav.html:23
+#: assets/models.py:138 templates/_nav.html:23
msgid "IDC"
msgstr "机房"
-#: assets/models.py:112
+#: assets/models.py:139
msgid "Mac address"
msgstr "Mac地址"
-#: assets/models.py:113
+#: assets/models.py:140
msgid "Brand"
msgstr "品牌"
-#: assets/models.py:114
+#: assets/models.py:141
msgid "CPU"
msgstr "CPU"
-#: assets/models.py:115
+#: assets/models.py:142
msgid "Memory"
msgstr "内存"
-#: assets/models.py:116
+#: assets/models.py:143
msgid "Disk"
msgstr "硬盘"
-#: assets/models.py:117
+#: assets/models.py:144
msgid "OS"
msgstr "操作系统"
-#: assets/models.py:118
+#: assets/models.py:145
msgid "Cabinet number"
msgstr "机柜编号"
-#: assets/models.py:119
+#: assets/models.py:146
msgid "Cabinet position"
msgstr "机柜层号"
-#: assets/models.py:120
+#: assets/models.py:147
msgid "Asset number"
msgstr "资产编号"
-#: assets/models.py:121
+#: assets/models.py:148
msgid "Asset status"
msgstr "资产状态"
-#: assets/models.py:122
+#: assets/models.py:149
msgid "Asset type"
msgstr "系统类型"
-#: assets/models.py:123
+#: assets/models.py:150
msgid "Asset environment"
msgstr "资产环境"
-#: assets/models.py:124
+#: assets/models.py:151
msgid "Serial number"
msgstr "序列号"
-#: assets/models.py:126
+#: assets/models.py:153
msgid "Is active"
msgstr "是否激活"
#: assets/templates/assets/asset_group_create.html:16
-#: assets/templates/assets/asset_group_list.html:5 assets/views.py:60
-#: assets/views.py:98
+#: assets/templates/assets/asset_group_list.html:5 assets/views.py:62
+#: assets/views.py:117
msgid "Create asset group"
msgstr "创建资产组"
#: 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_detail.html:162
#: users/templates/users/user_detail.html:170
@@ -264,6 +278,65 @@ msgstr "重置"
msgid "Submit"
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
#: users/templates/users/user_list.html:16
msgid "Asset num"
@@ -303,19 +376,20 @@ msgstr "批量导出"
msgid "Create asset"
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
msgid "Assets"
msgstr "资产管理"
-#: assets/views.py:79
+#: assets/views.py:82
msgid "Asset group list"
msgstr "资产组列表"
-#: templates/_header_bar.html:8 users/templates/users/user_detail.html:29
-msgid "Search"
-msgstr "搜索"
-
#: templates/_header_bar.html:14
msgid "Welcome to use Jumpserver system"
msgstr "欢迎使用Jumpserver开源跳板机系统"
@@ -333,8 +407,8 @@ msgstr "注销登录"
msgid "Login"
msgstr "登录"
-#: templates/_nav.html:9 users/views.py:50 users/views.py:63 users/views.py:103
-#: users/views.py:120 users/views.py:145 users/views.py:158
+#: templates/_nav.html:9 users/views.py:92 users/views.py:105
+#: users/views.py:145 users/views.py:162 users/views.py:187 users/views.py:200
msgid "Users"
msgstr "用户管理"
@@ -342,12 +416,6 @@ msgstr "用户管理"
msgid "User"
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
msgid "Asset group"
msgstr "资产组"
@@ -408,11 +476,6 @@ msgstr ""
msgid "Captcha"
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
msgid "Administrator"
msgstr "管理员"
@@ -459,7 +522,7 @@ msgid "System"
msgstr "系统"
#: users/templates/users/_user.html:17 users/templates/users/user_list.html:5
-#: users/views.py:63
+#: users/views.py:105
msgid "Create user"
msgstr "创建用户"
@@ -484,11 +547,6 @@ msgstr "输入您的邮箱, 将会发一封重置短信邮件到您的邮箱中"
msgid "Captcha invalid"
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
msgid "Password again"
msgstr "再次输入密码"
@@ -501,11 +559,7 @@ msgstr "设置"
msgid "Reset link will be generated and sent to the user. "
msgstr "生成重置密码连接,通过邮件发送给用户"
-#: users/templates/users/user_delete_confirm.html:6
-msgid "Confirm delete"
-msgstr "确认删除"
-
-#: users/templates/users/user_detail.html:18 users/views.py:120
+#: users/templates/users/user_detail.html:18 users/views.py:162
msgid "User detail"
msgstr "用户详情"
@@ -525,19 +579,7 @@ msgstr "创建日期"
msgid "Last login"
msgstr "最后登录"
-#: users/templates/users/user_detail.html:124
-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
+#: users/templates/users/user_group_create.html:16 users/views.py:200
msgid "Create user group"
msgstr "创建用户组"
@@ -546,18 +588,10 @@ msgstr "创建用户组"
msgid "Active"
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"
msgstr "编辑用户"
-#: users/urls.py:23
-msgid "Logout success"
-msgstr "退出登录成功"
-
-#: users/urls.py:24
-msgid "Logout success, return login page"
-msgstr "退出登录成功,返回到登录页面"
-
#: users/utils.py:47
msgid "Begin to generate ssh private key ..."
msgstr "开始生成ssh密钥"
@@ -659,45 +693,53 @@ msgstr ""
" \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"
msgstr "用户列表"
-#: users/views.py:59
+#: users/views.py:101
#, python-format
msgid "Create user %s success."
msgstr "创建用户 %s 成功"
-#: users/views.py:145
+#: users/views.py:187
msgid "User group list"
msgstr "用户组列表"
-#: users/views.py:190
+#: users/views.py:232
msgid "Email address invalid, input again"
msgstr "邮箱地址错误,重新输入"
-#: users/views.py:201
+#: users/views.py:243
msgid "Send reset password message"
msgstr "发送重置密码邮件"
-#: users/views.py:202
+#: users/views.py:244
msgid "Send reset password mail success, login your mail box and follow it "
msgstr ""
"发送重置邮件成功, 请登录邮箱查看, 按照提示操作 (如果没收到,请等待3-5分钟)"
-#: users/views.py:214
+#: users/views.py:256
msgid "Reset password success"
msgstr "重置密码成功"
-#: users/views.py:215
+#: users/views.py:257
msgid "Reset password success, return to login page"
msgstr "重置密码成功,返回到登录页面"
-#: users/views.py:231 users/views.py:244
+#: users/views.py:273 users/views.py:286
msgid "Token invalid or expired"
msgstr "Token错误或失效"
-#: users/views.py:240
+#: users/views.py:282
msgid "Password not same"
msgstr "密码不一致"
diff --git a/apps/static/css/jumpserver.css b/apps/static/css/jumpserver.css
index e293dc860..7948a33df 100644
--- a/apps/static/css/jumpserver.css
+++ b/apps/static/css/jumpserver.css
@@ -38,6 +38,7 @@ th a {
color: white;
}
+.select2-selection--single,
.select2-selection--multiple {
border: 1px solid #e5e6e7 !important;
cursor: text !important;
diff --git a/apps/templates/_list_base.html b/apps/templates/_list_base.html
index 11be26259..b0f1524c0 100644
--- a/apps/templates/_list_base.html
+++ b/apps/templates/_list_base.html
@@ -22,7 +22,6 @@
- {# left button add #}
{% block content_left_head %} {% endblock %}
|