From 3af01d6a31656c0f74106ab67319083c0eda549b Mon Sep 17 00:00:00 2001 From: BaiJiangjie Date: Tue, 8 May 2018 18:02:19 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=20=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=9A=E8=B5=84=E4=BA=A7=E6=A0=91=E6=98=BE=E7=A4=BA=E5=85=A8?= =?UTF-8?q?=E9=83=A8/=E5=8F=AA=E6=98=BE=E7=A4=BA=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E4=B8=8B=E7=9A=84=E8=B5=84=E4=BA=A7=EF=BC=9B?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B5=84=E4=BA=A7=E6=A0=91=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E4=B8=BB=E6=9C=BA=E6=95=B0=E4=B8=8E=E5=88=97=E8=A1=A8=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E4=B8=8D=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/api/asset.py | 6 +- apps/assets/api/node.py | 10 ++- apps/assets/models/node.py | 5 ++ apps/assets/serializers/node.py | 8 +- apps/assets/templates/assets/asset_list.html | 62 +++++++++++--- apps/i18n/zh/LC_MESSAGES/django.mo | Bin 33090 -> 33242 bytes apps/i18n/zh/LC_MESSAGES/django.po | 85 ++++++++++--------- 7 files changed, 120 insertions(+), 56 deletions(-) diff --git a/apps/assets/api/asset.py b/apps/assets/api/asset.py index 50c037df9..b3855eba1 100644 --- a/apps/assets/api/asset.py +++ b/apps/assets/api/asset.py @@ -43,6 +43,7 @@ class AssetViewSet(IDInFilterMixin, LabelFilter, BulkModelViewSet): queryset = super().get_queryset() admin_user_id = self.request.query_params.get('admin_user_id') node_id = self.request.query_params.get("node_id") + show_current_asset = self.request.query_params.get("show_current_asset") if admin_user_id: admin_user = get_object_or_404(AdminUser, id=admin_user_id) @@ -51,8 +52,11 @@ class AssetViewSet(IDInFilterMixin, LabelFilter, BulkModelViewSet): node = get_object_or_404(Node, id=node_id) if not node.is_root(): queryset = queryset.filter( - nodes__key__regex='{}(:[0-9]+)*$'.format(node.key), + nodes__key__regex='^{}(:[0-9]+)*$'.format(node.key), ).distinct() + if show_current_asset and node_id: + queryset = queryset.filter(nodes=node_id).distinct() + return queryset diff --git a/apps/assets/api/node.py b/apps/assets/api/node.py index cc940757f..939444ccc 100644 --- a/apps/assets/api/node.py +++ b/apps/assets/api/node.py @@ -41,7 +41,15 @@ __all__ = [ class NodeViewSet(BulkModelViewSet): queryset = Node.objects.all() permission_classes = (IsSuperUser,) - serializer_class = serializers.NodeSerializer + # serializer_class = serializers.NodeSerializer + + def get_serializer_class(self): + show_current_asset = self.request.query_params.get('show_current_asset') + print(show_current_asset) + if show_current_asset: + return serializers.NodeCurrentSerializer + else: + return serializers.NodeSerializer def perform_create(self, serializer): child_key = Node.root().get_next_child_key() diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py index 7939ad1e9..89e4a6b70 100644 --- a/apps/assets/models/node.py +++ b/apps/assets/models/node.py @@ -75,6 +75,11 @@ class Node(models.Model): assets = Asset.objects.filter(nodes__in=nodes).distinct() return assets + def get_current_assets(self): + from .asset import Asset + assets = Asset.objects.filter(nodes=self).distinct() + return assets + def has_assets(self): return self.get_all_assets() diff --git a/apps/assets/serializers/node.py b/apps/assets/serializers/node.py index 5b58ff241..225d5655a 100644 --- a/apps/assets/serializers/node.py +++ b/apps/assets/serializers/node.py @@ -9,7 +9,7 @@ from .asset import AssetGrantedSerializer __all__ = [ 'NodeSerializer', "NodeGrantedSerializer", "NodeAddChildrenSerializer", - "NodeAssetsSerializer", + "NodeAssetsSerializer", "NodeCurrentSerializer", ] @@ -66,6 +66,12 @@ class NodeSerializer(serializers.ModelSerializer): return fields +class NodeCurrentSerializer(NodeSerializer): + @staticmethod + def get_assets_amount(obj): + return obj.get_current_assets().count() + + class NodeAssetsSerializer(serializers.ModelSerializer): assets = serializers.PrimaryKeyRelatedField(many=True, queryset=Asset.objects.all()) diff --git a/apps/assets/templates/assets/asset_list.html b/apps/assets/templates/assets/asset_list.html index 04ba11e57..98679694f 100644 --- a/apps/assets/templates/assets/asset_list.html +++ b/apps/assets/templates/assets/asset_list.html @@ -47,7 +47,6 @@
-
@@ -87,7 +86,7 @@ {% trans 'IP' %} {% trans 'Hardware' %} {% trans 'Active' %} - {% trans 'Reachable' %} +{# {% trans 'Reachable' %}#} {% trans 'Action' %} @@ -127,6 +126,9 @@
  • +
  • + + @@ -157,26 +159,35 @@ function initTable() { $(td).html('') } }}, - {targets: 5, createdCell: function (td, cellData) { - if (cellData === 'Unknown'){ - $(td).html('') - } else if (!cellData) { - $(td).html('') - } else { - $(td).html('') - } - }}, - {targets: 6, createdCell: function (td, cellData, rowData) { + + {#{targets: 5, createdCell: function (td, cellData) {#} + {# if (cellData === 'Unknown'){#} + {# $(td).html('')#} + {# } else if (!cellData) {#} + {# $(td).html('')#} + {# } else {#} + {# $(td).html('')#} + {# }#} + {# }},#} + + {targets: 5, createdCell: function (td, cellData, rowData) { var update_btn = '{% trans "Update" %}'.replace("{{ DEFAULT_PK }}", cellData); var del_btn = '{% trans "Delete" %}'.replace('{{ DEFAULT_PK }}', cellData); $(td).html(update_btn + del_btn) }} ], ajax_url: '{% url "api-assets:asset-list" %}', + + {#columns: [#} + {# {data: "id"}, {data: "hostname" }, {data: "ip" },#} + {# {data: "cpu_cores"}, {data: "is_active", orderable: false },#} + {# {data: "is_connective", orderable: false}, {data: "id", orderable: false }#} + {#],#} + columns: [ {data: "id"}, {data: "hostname" }, {data: "ip" }, {data: "cpu_cores"}, {data: "is_active", orderable: false }, - {data: "is_connective", orderable: false}, {data: "id", orderable: false } + {data: "id", orderable: false } ], op_html: $('#actions').html() }; @@ -290,6 +301,7 @@ function onRename(event, treeId, treeNode, isCancel){ function onSelected(event, treeNode) { var url = asset_table.ajax.url(); url = setUrlParam(url, "node_id", treeNode.id); + url = setUrlParam(url, "show_current_asset", getCookie('show_current_asset')); setCookie('node_selected', treeNode.id); asset_table.ajax.url(url); asset_table.ajax.reload(); @@ -382,7 +394,8 @@ function initTree() { }; var zNodes = []; - $.get("{% url 'api-assets:node-list' %}", function(data, status){ + var query_params = {'show_current_asset': getCookie('show_current_asset')}; + $.get("{% url 'api-assets:node-list' %}", query_params, function(data, status){ $.each(data, function (index, value) { value["pId"] = value["parent"]; {#if (value["key"] === "0") {#} @@ -417,6 +430,13 @@ function toggle() { $(document).ready(function(){ initTable(); initTree(); + + if(getCookie('show_current_asset') === 'yes'){ + $('#show_all_asset').css('display', 'inline-block'); + } + else{ + $('#show_current_asset').css('display', 'inline-block'); + } }) .on('click', '.labels li', function () { var val = $(this).text(); @@ -535,6 +555,20 @@ $(document).ready(function(){ flash_message: false }); }) +.on('click', '.btn-show-current-asset', function(){ + hideRMenu(); + $(this).css('display', 'none'); + $('#show_all_asset').css('display', 'inline-block'); + setCookie('show_current_asset', 'yes'); + location.reload(); +}) +.on('click', '.btn-show-all-asset', function(){ + hideRMenu(); + $(this).css('display', 'none'); + $('#show_current_asset').css('display', 'inline-block'); + setCookie('show_current_asset', ''); + location.reload(); +}) .on('click', '.btn_asset_delete', function () { var $this = $(this); var $data_table = $("#asset_list_table").DataTable(); diff --git a/apps/i18n/zh/LC_MESSAGES/django.mo b/apps/i18n/zh/LC_MESSAGES/django.mo index 038e65f4355f956a2eb1f56ba8ab8fae46912d00..36220e3219e13e2f33a24be9281b1ef120ef808e 100644 GIT binary patch delta 11480 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 delta 11327 zcmZwN2Y65C-^cMIi4Y?Rv5JV;iA_RLn~2fYs#QCxwWUU>aqLQMX>C=CwrcOyR%4`9 zMQc;5_^a6dMO*86e}3ni>v28TbFS;_b>H86p8NdHFX3`_ykE*VKleh;fKMH+P(Q~h zh>JoUXTQpk$~sPkGLG{xR>U#58;@mhoSJ1FXEEj|Po4a_3XYQ-$5(Wm2%L|v;SQ{c zkFXTRRPyYEfsW%klPGB6X_yIDc@54+a|ecy--G^m6xIJY=EVD$83QUiP65o0SuqNg zkHsQb3pK7A2H= z2HId4c1QIeiduLAs(%t@V|`}^g-8W8J^55XYn zg;4!Vp>8Y|buw|78@pqE9EL8>z)7Z%7Z;!w-iVs`J5>8msGT20ox};$Lf5en-bWt4 z6I#XVUl-LLkGj*AsExO?_MWIm-LDGguZ}}VXkr)h;Vjg%UWIC3Yi>7F%tNSWd=jhS zMbw60sp>6I81=|Xq58dwd|sWps2fVG%K2-DLrG{yBh3jIM|~>lD375gx`dkO9;*L8 zs5{H>s#gy|J<7bOqc4HEuqx_go1wMgj38t>0BsGb|OU@25S2K7keP#b80+MwH>f)?nFI+DStiHD0>El?YL z2YnkxZD6qFUDUImfI6uusB!aA8()K(ZwE$Wim%S|zfD1(fk&uk^%SEpM-6YH8mNgI zqwc&pYT<6EjrK)NJQ&q)l+`Do=ADM>myFujLM)75V`jbo2d%>~)K1T#Cc19*JLbQr zM-#~RswN6U9d#t?1S_K!s*mc|6m??lupo9qo!p104NpKLIsK5R=-AD$i95f5Q` zjN%Ji3$;gWun%hD4^R`0L@hWGb;q+&3(dn4xD5G`;{0SDLVYD4smb$K;Q@&Xn7fv@ zU>r84J`{Bldr%9cqBd|Gci<(|Mi$ie7G8qd@Cww%PM8-^Cw3im!w*p#465UL6Nc6C zo@oSXfoQ8&K`l@h_3YzN?QKyTNKn8#>d_5E%`*;lBU4Z(;Vz<} zXS5#m>`!5FOha`Ht>-NeiMsPrs13%TK5W%dcT^8GVN2A}_C%fBK-9P)s2dz>`RPbM z*GZqaA`8FcLMsEyS_9es1uop(fS zpa-h|V087YMp4kwePkVGVdDOypQLoce)B>T6y?h~5zBFoMwNV>uYVDm-H`E99 z2nJ#UOhSF=4x>J-X{dQ!zb4)@3PtTGpIH*M(<-PVjkEmQs15YS%s3hc;76E^K5-r%9-jnPJXDo#ax?jvG+pzsDfG|3@ikM`uwxy^V$O1?r9qzu|p)i=!rb&1{D1 z-x2ji(;xMyW?@lWiG%SVmcZI?dVfLbi8|3w(N*C)3VJ5ju_}f%_kNvjgnATXQ5#7@ zJ*w%r73ZTqWX)T6kE$1{-!SyUQRt6jtbGFNgp*N^Zb=KyU(aqO2|c@=s4s}4m;-O3 zj`$hsgtD~sKE2_Xoq8+=V|`S=mKcIvP~!(!eJtvc&O)8ge$0tyTXOyyaGQj7_6#*J zsFio;1-e|v z28LoJ4SA6-C#M=}g7MZq8^=?hZ~5@Hj`Mm3zRz(u`48Li+YSDO`^kUMp1xS~ZBB>$ zDSo5X9na|G{R71^jMn>~LZJ~2x3M6`cJ^$Ex}yQ8fkUmHWX?n#@m$m$Ew%hwt8c;F zh+$DzDI+F zsHdRDUq;{W|92?pL*m!f9)+3LEQA_R+^l5QM%_s>t9P_|FVqHxTYkJb(_Cz>>dN_R z;%y}KDc*;=lk--;hiVV%=H>IC>QSgWs$%t;R&RnD-@@`eFp_#A>duo<<2IT*y18Cr z4+%}2Y7NIxpVo7hzlxgpK5C-@-Mw$NaMYbfnx)NHvo>nM#u$Umtv=D(r@9n$gmbK6 zC03!n#_Ctio8|-aAM8&*C&Am;0MrePGiRU{USxh@uCn$Gru!WQZQy6rot!hTp(ePC zy7Nb7P!DgRf~b5HYTRp(Fj`f|K6f~d+YKP^qBv!F{XY(D@S9D*D#L=j6pIiGH z)X#>^sFU1p`6H-)C#`}d`{ z--%j%CTgC=R$u-u@4pfoNJQgy)K9r9*6|MNx7LTK_czCT-hvgd8ugl}llTC&;rZ6S z8ny8q=3dlBenG8w9<|QZ_c(vO&v!}qVdh?*S+N}TV6!IHq2AYAgFUI=K~4BpZ*OBA zQT1Lp9|u}JOCK+v1M8B{XY~%Q6}q8z_#Wy`hFN|J>WF8XODwYJ>-2Q@Agv*20t znzi3U&GXm{=gMQ<_*-3 z<9n!nfqZ=ivc3~WL5chrgeA?2mak#PqwiT;y`$L+wc(+t4JTQBfwiwOcbci@am=ar z|1t$V`@c{N1Pt&tk`=YF+^BpJ)Y}kc^@e6MvlVJ19k3|&Lyez>A@~{U5wEp+D!NLX zqTo9k^c~GWZ=o==JSyK5wUKsK?}8fF*XrX?ujvfbYq=KH|0wEYPnnm^n*%w2H9RDt z1zw=;AX}n0Faq`ADuL=(9@VcJYN0r*zk^!nebo5jmY-_QxAv8&dDftAd|M*t@7o~> z4LpUKI1QB#df!_x)C|WE^3i5>)I?2C{S$CJ_C{^=j`_seGY|5{hoFAUN4ON!u?^6gBZu)Wkc@AIu+7;0c&i7!wccbiAdKTr!jH2sEozaNC4 zJ}XsG?cL1*=12@CpM-h@^H3Z5%3O!825zMw_nJq|^QZx7R=;mPN4?)!`Foez%VIu^ zLCy0z>P9+XDE7k$9F2OrKEopT?QoudSqhg(=$kG0LvNyJ)CBcWJ8y$|uqVdjC~Sxa zP@j=(BfO2|L2V!$=V3JF!o8M1joR=v)FZz&g7fF6kn?~a-Ou9kjvl((gLvnA>tI+_V) zZ`4*2QCl008b1s59l8{CYpYQAz8Up!cH(IK88yBM71?$)4@VR9AWZ(gL^OYD|hU9iCQ;Czr3SuI; z4~c@5OA(8R2trqV59c;!BGwQyh`RLG73bl6gLBE1Co<{xUM@Z2ER=PleTkC%bvdL+ zkgI=7(bd}git=E}6R|PToAL|Pb+?Qn#+NqsX`#frpD%D)on*C`79ZA>pLW##mCy?SHGHNXYd zb_-_{Z8Px7rC*gPTqX1g{>(b2w>77J)N+||F%8vl8#YA#YV7+BQ2l3FzjrZ{m3Lwa zZSN92DEnD{cm~%0on$nL)x|qO#^qF} z{3kI^ja*-Q`2Oe61Im|Z>xw&)XB7)`zob-!_=l{n^F({fdglfZgDC60`;;h4`Crs^ zoAOCQ|1790FTO=gr(BD8PNY&_kLlN13i_#k!N&Niaa5)e<&!HGFOXcPctA$|VE;6^ zMe#6qDfxZWKL6hV)V%9$atHpOd>)!Zh;NC%h{M*WCsrm#64%IwV-7-BadQ!NqrMVf z(=SZ*DHJF1KJfwN<)|x=vaTS`Jc05EtB)o3vz5EzM(UAxm6&Y#npjDL?RtayCMy@R zK22~~`Umt?DihLs<6`QMF`so#Z%U+oooGc&CV7Kc`+xd0B-fVcK>jT1YEHaIy&f^! zm*F4GDc8{p@&ysdUA{>oGvyef0ObvYex&)))(Yzp8;F7AU%vEz-4>F2`cnRnm&$jo zJdi=VZD3Z$G$3E`6o0IKX||uJ#}n0w?}+n+u8i23_%eA`$uM^grIlnmsD-JXU`}%X zU@mM%=o&-}qg+?xTK)@-E^8NAM^)GrYCi6PXJh&0M; z@O8{V=u_*v8hJR^B^`8qfkTNYUe!5E`H__m<1}JCxhwcFp{ZIEA>;;Q3;Ypv-J#rv z*h`EibS)rGyHviTFi9CMf8wBZ_}%=4+;Czkv5NSSd}q{^Lb(kwiTHuo>7|{Y%xC1r z5lyN8i^qvu)>Z`FNdE9A$;mpg#7v?F@i(~$q6_7Y#3RZ(P*;FDbNxoHw^wxTVldIp z>f%qLI}t+vq4+)hb^SqP@XD_5H>=Ae{zIZ4QGjwULRVw2le2_!Vaf-w8j;;LK+$*o z#-HnmZ1fr7rJVm#{@cp^O;M8kcH)39XU~5l30?EePL%&k+_(A^d_wdk3KC<8FxuM? z8Q9D{3?i3))uMdvrTQu>r_!MWQH6T4I@|ir3Ch`ti!^j3!iZwTI%2*$ay2226NQLl zn^}&!x|y{p@3!(TEI~XcdXjhBQTT{Rzlu=KNo6E)#`2#~UPwG6 zbQL9^3$tJzB9ZbhIFr!T9iQSB;%%ZTp(`KpHEorMpM4p=+pkgip2}7tjdC%3h+|M! w5^;w(LM|^RZ+g8vKP)xs4kR\n" "Language-Team: Jumpserver team\n" @@ -17,15 +17,15 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: assets/api/node.py:88 +#: assets/api/node.py:96 msgid "New node {}" msgstr "新节点 {}" -#: assets/api/node.py:217 +#: assets/api/node.py:225 msgid "更新节点资产硬件信息: {}" msgstr "" -#: assets/api/node.py:230 +#: assets/api/node.py:238 msgid "测试节点下资产是否可连接: {}" msgstr "" @@ -46,7 +46,7 @@ msgstr "管理用户" #: assets/forms/asset.py:30 assets/forms/asset.py:69 assets/forms/asset.py:125 #: assets/templates/assets/asset_create.html:35 #: assets/templates/assets/asset_create.html:37 -#: assets/templates/assets/asset_list.html:75 +#: assets/templates/assets/asset_list.html:74 #: assets/templates/assets/asset_update.html:40 #: assets/templates/assets/asset_update.html:42 #: assets/templates/assets/user_asset_list.html:34 @@ -206,7 +206,7 @@ msgstr "高优先级的系统用户将会作为默认登录用户" #: assets/templates/assets/_asset_list_modal.html:46 #: assets/templates/assets/admin_user_assets.html:52 #: assets/templates/assets/asset_detail.html:61 -#: assets/templates/assets/asset_list.html:87 +#: assets/templates/assets/asset_list.html:86 #: assets/templates/assets/domain_gateway_list.html:57 #: assets/templates/assets/system_user_asset.html:50 #: assets/templates/assets/user_asset_list.html:46 common/forms.py:144 @@ -220,7 +220,7 @@ msgstr "IP" #: assets/models/asset.py:62 assets/templates/assets/_asset_list_modal.html:45 #: assets/templates/assets/admin_user_assets.html:51 #: assets/templates/assets/asset_detail.html:57 -#: assets/templates/assets/asset_list.html:86 +#: assets/templates/assets/asset_list.html:85 #: assets/templates/assets/system_user_asset.html:49 #: assets/templates/assets/user_asset_list.html:45 common/forms.py:143 #: perms/templates/perms/asset_permission_asset.html:54 @@ -650,7 +650,7 @@ msgstr "重置" #: assets/templates/assets/admin_user_create_update.html:46 #: assets/templates/assets/asset_bulk_update.html:24 #: assets/templates/assets/asset_create.html:67 -#: assets/templates/assets/asset_list.html:108 +#: assets/templates/assets/asset_list.html:107 #: assets/templates/assets/asset_update.html:71 #: assets/templates/assets/domain_create_update.html:17 #: assets/templates/assets/gateway_create_update.html:59 @@ -699,7 +699,6 @@ msgstr "资产列表" #: assets/templates/assets/admin_user_assets.html:54 #: assets/templates/assets/admin_user_list.html:26 -#: assets/templates/assets/asset_list.html:90 #: assets/templates/assets/system_user_asset.html:52 #: assets/templates/assets/system_user_list.html:30 #: users/templates/users/user_group_granted_asset.html:47 @@ -728,7 +727,7 @@ msgstr "测试" #: assets/templates/assets/admin_user_detail.html:24 #: assets/templates/assets/admin_user_list.html:85 #: assets/templates/assets/asset_detail.html:24 -#: assets/templates/assets/asset_list.html:170 +#: assets/templates/assets/asset_list.html:174 #: assets/templates/assets/domain_detail.html:24 #: assets/templates/assets/domain_detail.html:103 #: assets/templates/assets/domain_gateway_list.html:85 @@ -752,7 +751,7 @@ msgstr "更新" #: assets/templates/assets/admin_user_detail.html:28 #: assets/templates/assets/admin_user_list.html:86 #: assets/templates/assets/asset_detail.html:28 -#: assets/templates/assets/asset_list.html:171 +#: assets/templates/assets/asset_list.html:175 #: assets/templates/assets/domain_detail.html:28 #: assets/templates/assets/domain_detail.html:104 #: assets/templates/assets/domain_gateway_list.html:86 @@ -783,7 +782,7 @@ msgstr "选择节点" #: assets/templates/assets/admin_user_detail.html:100 #: assets/templates/assets/asset_detail.html:200 -#: assets/templates/assets/asset_list.html:600 +#: assets/templates/assets/asset_list.html:634 #: assets/templates/assets/system_user_detail.html:183 #: assets/templates/assets/system_user_list.html:138 templates/_modal.html:22 #: terminal/templates/terminal/session_detail.html:108 @@ -815,7 +814,7 @@ msgid "Ratio" msgstr "比例" #: assets/templates/assets/admin_user_list.html:30 -#: assets/templates/assets/asset_list.html:91 +#: assets/templates/assets/asset_list.html:90 #: assets/templates/assets/domain_gateway_list.html:62 #: assets/templates/assets/domain_list.html:18 #: assets/templates/assets/label_list.html:17 @@ -856,7 +855,7 @@ msgid "Quick modify" msgstr "快速修改" #: assets/templates/assets/asset_detail.html:143 -#: assets/templates/assets/asset_list.html:89 +#: assets/templates/assets/asset_list.html:88 #: assets/templates/assets/user_asset_list.html:47 perms/models.py:35 #: perms/models.py:79 #: perms/templates/perms/asset_permission_create_update.html:47 @@ -886,89 +885,97 @@ msgstr "刷新" msgid "Update successfully!" msgstr "更新成功" -#: assets/templates/assets/asset_list.html:63 assets/views/asset.py:97 +#: assets/templates/assets/asset_list.html:62 assets/views/asset.py:97 msgid "Create asset" msgstr "创建资产" -#: assets/templates/assets/asset_list.html:67 +#: assets/templates/assets/asset_list.html:66 #: users/templates/users/user_list.html:7 msgid "Import" msgstr "导入" -#: assets/templates/assets/asset_list.html:70 +#: assets/templates/assets/asset_list.html:69 #: users/templates/users/user_list.html:10 msgid "Export" msgstr "导出" -#: assets/templates/assets/asset_list.html:88 +#: assets/templates/assets/asset_list.html:87 msgid "Hardware" msgstr "硬件" -#: assets/templates/assets/asset_list.html:100 +#: assets/templates/assets/asset_list.html:99 #: users/templates/users/user_list.html:37 msgid "Delete selected" msgstr "批量删除" -#: assets/templates/assets/asset_list.html:101 +#: assets/templates/assets/asset_list.html:100 #: users/templates/users/user_list.html:38 msgid "Update selected" msgstr "批量更新" -#: assets/templates/assets/asset_list.html:102 +#: assets/templates/assets/asset_list.html:101 msgid "Remove from this node" msgstr "从节点移除" -#: assets/templates/assets/asset_list.html:103 +#: assets/templates/assets/asset_list.html:102 #: users/templates/users/user_list.html:39 msgid "Deactive selected" msgstr "禁用所选" -#: assets/templates/assets/asset_list.html:104 +#: assets/templates/assets/asset_list.html:103 #: users/templates/users/user_list.html:40 msgid "Active selected" msgstr "激活所选" -#: assets/templates/assets/asset_list.html:121 +#: assets/templates/assets/asset_list.html:120 msgid "Add node" msgstr "新建节点" -#: assets/templates/assets/asset_list.html:122 +#: assets/templates/assets/asset_list.html:121 msgid "Rename node" msgstr "重命名节点" -#: assets/templates/assets/asset_list.html:123 +#: assets/templates/assets/asset_list.html:122 msgid "Delete node" msgstr "删除节点" -#: assets/templates/assets/asset_list.html:125 +#: assets/templates/assets/asset_list.html:124 msgid "Add assets to node" msgstr "添加资产到节点" -#: assets/templates/assets/asset_list.html:126 +#: assets/templates/assets/asset_list.html:125 msgid "Move assets to node" msgstr "移动资产到节点" -#: assets/templates/assets/asset_list.html:128 +#: assets/templates/assets/asset_list.html:127 msgid "Refresh node hardware info" msgstr "更新节点资产硬件信息" -#: assets/templates/assets/asset_list.html:129 +#: assets/templates/assets/asset_list.html:128 msgid "Test node connective" msgstr "测试节点资产可连接性" -#: assets/templates/assets/asset_list.html:204 +#: assets/templates/assets/asset_list.html:130 +msgid "Display only current node assets" +msgstr "仅显示当前节点资产" + +#: assets/templates/assets/asset_list.html:131 +msgid "Displays all child node assets" +msgstr "显示所有子节点资产" + +#: assets/templates/assets/asset_list.html:215 msgid "Create node failed" msgstr "创建节点失败" -#: assets/templates/assets/asset_list.html:216 +#: assets/templates/assets/asset_list.html:227 msgid "Have child node, cancel" msgstr "存在子节点,不能删除" -#: assets/templates/assets/asset_list.html:218 +#: assets/templates/assets/asset_list.html:229 msgid "Have assets, cancel" msgstr "存在资产,不能删除" -#: assets/templates/assets/asset_list.html:595 +#: assets/templates/assets/asset_list.html:629 #: assets/templates/assets/system_user_list.html:133 #: users/templates/users/user_detail.html:357 #: users/templates/users/user_detail.html:382 @@ -977,20 +984,20 @@ msgstr "存在资产,不能删除" msgid "Are you sure?" msgstr "你确认吗?" -#: assets/templates/assets/asset_list.html:596 +#: assets/templates/assets/asset_list.html:630 msgid "This will delete the selected assets !!!" msgstr "删除选择资产" -#: assets/templates/assets/asset_list.html:604 +#: assets/templates/assets/asset_list.html:638 msgid "Asset Deleted." msgstr "已被删除" -#: assets/templates/assets/asset_list.html:605 -#: assets/templates/assets/asset_list.html:610 +#: assets/templates/assets/asset_list.html:639 +#: assets/templates/assets/asset_list.html:644 msgid "Asset Delete" msgstr "删除" -#: assets/templates/assets/asset_list.html:609 +#: assets/templates/assets/asset_list.html:643 msgid "Asset Deleting failed." msgstr "删除失败"