From 8e51f97dc7ca29a571870d5e92afe7ae3836c9de Mon Sep 17 00:00:00 2001
From: BaiJiangJie <32935519+BaiJiangJie@users.noreply.github.com>
Date: Wed, 26 Dec 2018 13:54:42 +0800
Subject: [PATCH] =?UTF-8?q?[Update]=20=E6=B7=BB=E5=8A=A0=E8=B5=84=E4=BA=A7?=
 =?UTF-8?q?=E6=A0=91=E5=8F=B3=E5=87=BB=E8=8F=9C=E5=8D=95:=20=E5=88=B7?=
 =?UTF-8?q?=E6=96=B0=E6=89=80=E6=9C=89=E8=8A=82=E7=82=B9=E8=B5=84=E4=BA=A7?=
 =?UTF-8?q?=E6=95=B0=E9=87=8F=20(#2274)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* [Update] 添加资产树右击菜单: 刷新所有节点资产数量

* [Update] 修改右击菜单样式
---
 apps/assets/api/node.py                      |  11 +++-
 apps/assets/templates/assets/asset_list.html |  12 +++++
 apps/assets/urls/api_urls.py                 |   2 +
 apps/locale/zh/LC_MESSAGES/django.mo         | Bin 60289 -> 60399 bytes
 apps/locale/zh/LC_MESSAGES/django.po         |  54 ++++++++++---------
 5 files changed, 53 insertions(+), 26 deletions(-)

diff --git a/apps/assets/api/node.py b/apps/assets/api/node.py
index 4295b261..052d70e3 100644
--- a/apps/assets/api/node.py
+++ b/apps/assets/api/node.py
@@ -34,7 +34,7 @@ __all__ = [
     'NodeAddAssetsApi', 'NodeRemoveAssetsApi', 'NodeReplaceAssetsApi',
     'NodeAddChildrenApi', 'RefreshNodeHardwareInfoApi',
     'TestNodeConnectiveApi', 'NodeListAsTreeApi',
-    'NodeChildrenAsTreeApi',
+    'NodeChildrenAsTreeApi', 'RefreshAssetsAmount',
 ]
 
 
@@ -275,3 +275,12 @@ class TestNodeConnectiveApi(APIView):
         task_name = _("Test if the assets under the node are connectable: {}".format(node.name))
         task = test_asset_connectivity_util.delay(assets, task_name=task_name)
         return Response({"task": task.id})
+
+
+class RefreshAssetsAmount(APIView):
+    permission_classes = (IsOrgAdmin,)
+    model = Node
+
+    def get(self, request, *args, **kwargs):
+        self.model.expire_nodes_assets_amount()
+        return Response("Ok")
diff --git a/apps/assets/templates/assets/asset_list.html b/apps/assets/templates/assets/asset_list.html
index c3c3a7ed..c560c8e6 100644
--- a/apps/assets/templates/assets/asset_list.html
+++ b/apps/assets/templates/assets/asset_list.html
@@ -133,6 +133,8 @@
         <li id="menu_refresh_hardware_info" class="btn-refresh-hardware" tabindex="-1"><a><i class="fa fa-refresh"></i> {% trans 'Refresh node hardware info' %}</a></li>
         <li id="menu_test_connective" class="btn-test-connective" tabindex="-1"><a><i class="fa fa-chain"></i> {% trans 'Test node connective' %}</a></li>
         <li class="divider"></li>
+        <li id="menu_refresh_assets_amount" class="btn-refresh-assets-amount" tabindex="-1"><a><i class="fa fa-refresh"></i> {% trans 'Refresh all node assets amount' %}</a></li>
+        <li class="divider"></li>
         <li id="show_current_asset" class="btn-show-current-asset" style="display: none;" tabindex="-1"><a><i class="fa fa-hand-o-up"></i> {% trans 'Display only current node assets' %}</a></li>
         <li id="show_all_asset" class="btn-show-all-asset" style="display: none;" tabindex="-1"><a><i class="fa fa-th"></i> {% trans 'Displays all child node assets' %}</a></li>
 {#        <li id="fresh_tree" class="btn-refresh-tree" tabindex="-1"><a><i class="fa fa-refresh"></i> {% trans 'Refresh' %}</a></li>#}
@@ -558,6 +560,15 @@ $(document).ready(function(){
     hideRMenu();
 
 })
+.on('click', '#menu_refresh_assets_amount', function () {
+    hideRMenu();
+    var url = "{% url 'api-assets:refresh-assets-amount' %}";
+    APIUpdateAttr({
+        'url': url,
+        'method': 'GET'
+    });
+    window.location.reload();
+})
 .on('click', '.btn_asset_delete', function () {
     var $this = $(this);
     var $data_table = $("#asset_list_table").DataTable();
@@ -724,6 +735,7 @@ $(document).ready(function(){
 }).on('click', '#menu_asset_move', function () {
     update_node_action = "move"
 })
+
 </script>
 
 {% endblock %}
\ No newline at end of file
diff --git a/apps/assets/urls/api_urls.py b/apps/assets/urls/api_urls.py
index ca426a83..4aceda2e 100644
--- a/apps/assets/urls/api_urls.py
+++ b/apps/assets/urls/api_urls.py
@@ -74,6 +74,8 @@ urlpatterns = [
          api.RefreshNodeHardwareInfoApi.as_view(), name='node-refresh-hardware-info'),
     path('nodes/<uuid:pk>/test-connective/',
          api.TestNodeConnectiveApi.as_view(), name='node-test-connective'),
+    path('nodes/refresh-assets-amount/',
+         api.RefreshAssetsAmount.as_view(), name='refresh-assets-amount'),
 
     path('gateway/<uuid:pk>/test-connective/',
          api.GatewayTestConnectionApi.as_view(), name='test-gateway-connective'),
diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo
index a5a414c63b909c7501e047a31f208e278346cc0e..a6518874eff0d18bf78d4278827e25b5eb29bf5f 100644
GIT binary patch
delta 17975
zcmYk@2b@kv+sE;<#aeBxRoAlCVs(pMz4wv?LG<25XC-QGHAs|*kmymKs0oP@qC^c6
zB@&&8x@w3X5xl?uJ(u_6e4g>0>zX-pX6Br8-)rR=eKP3o$sphPh~SwXN3|f&%Yk{b
zdtTdM&nuFstml1M%k!q-A{>VCwLR}6T#2KwR2|RzJ;3ue;x7ECp65jcdfr=akf*)p
zTW;J+4LmP`xD{r`J{aP8K5s0QbR<5)H24K(!KIiBw;=QJ&SD9?fE6*Kq30FDhS(WD
zz<hWK3t(s?X9+w{+zK^*xwkzpBi6zYuJ5&^qLp{ROgIu#;-?sfb5JL)z_hr*+=UwG
z2(l9IvUwA=pnI4eUt(5F-`Jg>AK7d#5mRw}uPhZ!pgKlidkn>a7=^=86ZqWnOE8vr
zHR`-0s2#eEn)p2o$ET<TrEcPRDKHnN#(ZXR^kpDXfr@7O7Iwn6s1@wMI6RC6@e%gJ
zTunW15Kcp`;RU_pc{F*=%$2D83oL_gH**u1gxaZTs2!NqjQ!Wl=8&j~U!v~mRn){X
zHFqnILp=*6F(WocO|Tnk<w>Y<hN5nf4|VG%V-}o?+QIKEza7=@P;>TQ1D&xB*D){g
zL)2D9wr~UG#iGOsm<l_h2Iz(AKLoYq^HI0#8_bM9BQKP90k!gHsGSaM=_VB6qoNB%
zqqd|Vs$)^q$`Vl*Dra$R)Xuztnn+uW#_p(rKg8lV%i8y$#ye{5r!0RRwPU{fRI~&C
zpgM-Ma;8HKm<hF&c~KKeKs{t-F)LO@ZE*|Kg!-Yz8H$?dD2&8UQ9HC6v*9*m!9MQ<
z6`gp-ykg!l|1kqwySE}OYM{(m4&zW4?0}kBchtoDq23}NYW#_)XX{gp$DJ6g_x~Oh
zZN+2MR{w_@C{-J02Gr{oiM6pJYGq?lE1!wlq1C8+z6JG=9!0J6Dr!P6P~(TSb#WAi
z>isWFMHfuO2&{;@B@Hd#7IlHHsFf#~<5BPTEYyWop`P+RsPTS9op;LOYp5N$iwXD-
z`m}XL+PRJi7)4wiwZe9&8TUus>yfCfoQYcLLd=dEP&@G}YU0;W7k-2~Ke)YHSO(O?
zo)<Oo`1b6-E>x3*25g2}L2uLmLr@RT1alE;hqj>l9Y&ph1~u?))XJZrcIqW+!r>j<
z!<!v7p<Jk)DAK{_5~WCJ!0M<I8=xl89yM@Z)Jlh1{26NCg{T2npa$HCn$VA^i5x}U
z`_rgr;s$ERpQCmv*w@irI0Dr%8g=1fsMoC$>V)dJ73-k}4&ifJ7Y;L{P!lMCx=;z!
z`L$3Jt&dtrQ;fm(7>&MBRO(Y%h=1cv)IeuDy8*7CCU65a<G)cCc!Aonh%T;wG}a-`
zkA<+G<>#Q@t|h2@z5)y4c4R!Ccb$qZ@EEoA&rvfC>*`h-iJDMuvk+>h5|ICSHTWY1
zu0Ty_4QjkCsGZz}I{zr9z%!^Fynz1i|Lat=vb(4)eU34hx|@p&qXsC88n_y2fV!v)
zHnMyh)LYOQ)qj|^k2R-ZBKf(f>->u8c>cUUsOX`&g<9Ej)CJOYcO5gM-hx;R#)_B&
ztD){~JJbbxpl;0o)ayDP^|s7MowpX_aRcglSJ9^xJfWfigL=4*F{pv_Ssag{#EGbx
zSHcunAJwlB#$hWA#L?zBj3u66uEaNp4`FeP?8*JtjOzE~-N#{A507F9M!oAU7>k-{
zJZ{DcI1C?QPVC>yO=v1=rJq?m8#VqyOo>M@6i=d_jSIcl|5Q}&TEkN_u(x|A(xA39
z64kFLrol3p8f#eG0R1~)`O&C}Oh!G_({VK}#=h9FkNdjc?xUgscVSvQjN00>s0&;~
z?Zj<NhYwH>SpcJ`JsawiGY@KI<t(m_dX`$C`uD&v^r3Fa)K~GhRCM7TsEHgx4SX8&
z;T6<`QulNDa8$o2)Qa<4z5!~7TB0V>+2Y>T{vPT&qb;6_EX?Q4rV>WOmzW#ZU=SWf
zeHk4`J^lAkPi>n1?%OUW>O!TlAXY)$s-CEcjYK{DOHm8?9(A2RFdT2A|NVdNuW-Kx
zxRs?rtvD;{p~;EqF(2w-D~0;HZDRIDeX@;5-HJJ=3$H~@XgBKZI*IzoeTca*<3QB=
zpFl-h*97&@v_-9~6KczPS$+tr-$>Me6Hxt@Vg~#gb^ed2Tet_ckRzyP=s2q1In)l^
zL7%?WUQ*F}n|+Y27&SmX)C7uS1Xe<AVI$Ov+oN_S3Ds{LCg60`&h172GliPyY1FN~
zWbMg=xc?gXjx_`%xeKR2oe+*1I1=^r$Dvl3h+0`W)XJ)$`qxHHup!1{JJfkoF(b}1
z*P=cl_aw3Zx|iojXiFZMA%k6qtf(!EN4+-H%r01rc!ITWMD4_W)I)p9e2ChK@b}z=
zvzgJT3Fq}u(Jd&7+KIYY1zTf&oQrvJH|m1dQ9F?JeK$Z3GaqWD#ZX&b5q06ZsEIW~
zU9f}M6ZI_l22#<z9)apO0ZZcNsFnYWy5Kp?gctD*e2kh{^&#$Q?vA<@6HvEosyP>R
ztCpiK_zkMxCd{Vy|3@mC=_%CfaRGHJUZQp;e5f0sFzUn-sQzUwu8O+nbx<pBhMBPw
z>KPbf`Q@m7>#+dtM*sVNn@TGZ53ECjVXk9a)XaOMW<C(L10yg2r=teki&^j(7QtJn
z&xvfqUA{DG>)%4%qGqUtbdh@hdr{FA4@6z?ebj3*QXOzKYD*`gCNdMX(uJsJW|if)
zoBL50`px1C=1t2#L`^7g1pBW_8Y;T?nNTari@I<E#$b8Wv(OsVuMg@Ljl@WtikjeZ
z)N8f@HO>LlL{6cev1E(yq5l?-;QnhR;UnDuIj|6MLDT?EQ3G~H^?M(+;<2a;&O+_n
z63m9nu_o@sC=B_)y~eSqiIhkGTY(zC(Fg3mD(y+=q3MfS;W*U2{>(bAKuu&5YR3+u
z20Cv3Vfm}5TX+XG;fI(XS*L$T3!o+%kJ^#CK5J-#8n~6koy~Vq7aD+C!BC4Qpe8;I
z3*Z9OPV7VVJBZq;Gv;5Io!A@Yb|eb5gT4eRdZ?<R?n!<0-)qz}&<C~hB-9Q~#GJSQ
zwZg5a{`;{$p0POJXg7f}_<($U)cBRhxC=K#&i8q3sA%OqP!kzo4o96Z9<^1oP%~bH
zTH!aSt=@_{f0y|S>J}bD^}B)^=RRuups{XZ=`e%tOAM758cL$JunFp(wXpms)cd^%
zb?-J|4m^sw&>iyymLd)t=XRtf#u7I}JxfDTw`wZp#_usd*Y{3S>4^d3-P79(b;4R)
zgnMxacK^^mAu$i}OZ)-zOz^xmcpj6m!bEqA)?#tu!?+S(VjQlV<i1OeqOSl6{X$n3
zM6J9rmce0I4!^^ccpHQ9A*RNs$Zhq4KjxbgKg5kVVzS$bgeiPu68A)Xr>sKl;Cal7
zPo}W{+S>F}-NO`TmNYA4813~@7jB7x*balRBkCdSiXk`vHPIocXJr&>XQp5n-bD3(
zit3+2ua8!ecA9&-v!Y&;qNo$<qMq*Nr~!MTUaR*o8YiJvvK;kx>_DA=0@L9=)Hp9u
z=ZAgbKH#EI*RAcNlAg-js0($pco6CnY%Ip$Lew*{12uu;s0&|5o$pO|D+@=BlLNIA
z#mv&Er@u1x!n&yOeCw%bYY(8d<}hmJXHYA;j#|MB)PU(ebt}w_T0wDC{|eX@>tSJB
zW9?^A<0hlVxsM4LFvI`3;`2&T(LnVu9GhYW?239=-bbzQ6VyOoTD%(7e=BNbhfota
ziJHJw)CDtq=H8YVRKJ=SfekRb-v5qNbiomr5vO7(E=FzfD%8E+jVbUF`gaEXJA>+<
zZl;@P7F54D)I(MTwQ~um{uNNysgM5O|Fxr{hod`cg-NKHjzYcvAK|xHWR|;C=TZGH
zqb~3_7Q-i)8{<BAe~Ye*;Q{={6RVP6@`ZaHuV6{_o6Y^NN2MhdJ+(_PGj2!C^cd;_
zmr*C&L|rK795=x?QMaHO^5N%oN1b;I-{QjmqCVj2&f}*Y+>b-C=zP!P)7V=!pXR-E
zEVO{Xwcy_ic`$gv*Dm7Ykq+N2aZmrdOWlP&M%}x47>sLBJGLHm3wEGx<pIovXD$B>
z3lRtZ&l!*U5^ME8rZ<Yp5E8ZUDdxZ`Upd?0A>yH^Ew8i8*%Y-i9Z?hNVfo>fpJ?$k
zbDp`v+-UChQPDuZqVD-gYq)6MLA?dfEY7st_0NrZD+-_{Ru*;ZYFXUc?1Abx*y8aP
ze`>LBF%?Z<jk(d>X6`{v>=)F9j+>WIE5B<7u5j;vW>o*-m>0)m0bGgA@ptTig;)Cj
zqT}->yNY+vOuNec4d_iQN5{#i3I2qs@Q}qP&GT5E{8iLz8nfEHUR6*NZeno<GYR!M
zF%kVg|IhMQ_%)fi6w}gSmAT2>i`vTHEWTv%UDU*0qE?#fYj=K0vkEHzrp1HJF&M4a
zW11ztLEY;usI5I_@ilArzHt*shiPfgiQ1V$sBgm(mM>-b>K50txEX5PwwCXYzT6~6
zT4Et;3s<8C{>A*w+D}`YZ2o2WhZYB{aT5teO)#w)iK&U>FceFm9@g?}c>h&tWF5Pq
zwsH_^rXx{1@`=SOEZ&M*@o`lD)8=LKFY}2Ru+}Xo4XS?xCSs1Y?7vp}wl%cC^u(P|
z`GJ-nih7#IVrg7%?SGods1^TZ@xNvOpWAWdL$NQ$qxvmCEpU~OiY~YvwG)TUE2!`P
ze^Do7`Ock?2Njn#YoI3D$l~S}cQJceejw^PK8vTlisw<$g;%4tW|w&ob)gfe3tTpD
zVg=%R78hOT`Xyon`D$iU%Xhap2{rx%)b*w#3-o!*tix{fU(md4{%!5gEe>Dr`sGAj
zu#j2F@{P>4sAuP0b1bU=JZoQr>Gk!rm5OF|5L4m_e*-_ITK*1d2mV1#@THk{gNq~0
zIMf9a%-WW3iJC|^i+$!~srP?26<y#fYxvsYA21#Hov3?v#PWZlCX#GEF!i&y^660H
zWjAvp-`rjSi+7>=9YCKdC#>Nz>Oway{uk9Az<03>Lp_vHW*O8+bQ9#O-kXBzS74Ky
zKq<2#DqjONej|%JY-0a4(>^5h8J>jsaSbYe(manDh_9kPu%4g>jNI({#bG#cQPi!h
zZ27vVehn>dV{vC}NWTAOd;fP>hkfQ@>v-JaOQ;FlKwaRO<x~9NE|3;A;Yido5M%iS
zRR5}GeN?}uW^12SI$<^%dRjaNHS<a4EY!{{vG^DB6lzPaTKougfxs>9{8Xr)bh4oG
ziC73Lpgxj)-K=2%Mv)kT`VROEHGy@g6L+AtejjRuH>~|X)WlP5bt{cU^)F&3SiU@J
zqBSkw6q$g}YfVK1bVL2!&S#FnV#MRk_1Kp9GFHWE+ni&tI`MAoh9TSC1p1&BkYw>_
zoJ~9tdtvO4`XJ)|Po<(6FEv-0-(fZKn^6NjvwY|d7pF&^m&43s7DBDG1Zt<Mq53sN
zjnmrff&SnB4W^QZh7s2Ar5cF8Mh&nYKgNC76r1dH-+s$c_i(lOJ?gw&s0$r1PoT!R
zjFI@*^5MJKZ8hYiq7#avZbc>3K+P;}Ywhn@Jl33tI)8(;?>CQQcJh}{<2<)~@NRdV
z45*)oqIa|Zx^Nv5dQF<5en4nv9lM)J=4f-OITtm7<*2863kG2_>hs{H`3yCF+CA>p
zWI=th#_jRB@AE_wI-wWl!x0uQM$L2`YNF>bBi=y&%FN)su00JZpUuo=#-S!!)U0YY
z@lnyk(#?F&8a~9#<Y%L9$r^LNdC~kAHL;98xeLdjR+`@|VOBu(tA%;7vBkdksptaZ
zFa+mY!&38G%Wp@mU@vN?PFZ{dHSm9Cs(mibV&*}eR~)s_8WuNk?LM!Yt9XO33LQpa
z2=1`_KGceiS$y8wZ($Vq`xb}ocNflV#+vbFMbx<U%tn5>|IIDY4mH!Rm<NZTRyNOE
zVeK1HD>-2CX=}fY+R3M=XC&f)>lcU0mqy*vh8A~KJJ<I<prQ*+MXhMA`8{gJzgznm
zi?3OH2Q}a`i!=P}z9XVBntW}{ja^aqd;)5`)tCy`p-+`<me^+=MNQ}|YDcc4PJCwh
zz+c>JnjUq2HdOyu)P>_MZh$(kHENtr*cb<60o?x!?|&?ndn7barh{&vXtOYCfU>Ce
zDi+s6ZD}Kmd!jDfA9bN=7B5EKs-38Dj+&>;KlN+!v@|4>kPlEN=r8>xARHA}Hyfia
z+zB<{a2$(cQ0Ipnc4kDi$Dk&jA2m)1EREGr{fGFdXvX8Q5PpHWz;4vNJ%<|TKI(+0
z7Ka>h`E+I`Gs=ub^)G0aHfxxTP}lXfwM2hRO=6@u(VSr}!1T1QK&@!Ax!XKso<vRf
zBId;F=--)Nof*v-WCA{~s3oepg!h)k9WXru^g#_c((>cX>E;4+6>8@;S$q_=!t)m2
zLyh;s;;^F{m-`<@MJL8$53FGEQga(>#V1e`xqw>HHS;0rLIJ<Id?quuS<I|p)<uo?
z4*I|U+gn37OhLmS)U6nbMR1(8e~X&vc8gD<CUnKTg+avkEq-i1H-mq7{nMZp5P?2D
zWVxsWV<~GWj}gRm%vPui_c1?24Y1H$jq1PIJcydupB5*h`aeaD6LQSOxsG|2{U;V7
z(VT`VsDVB=SK?*jZ5A&&?oM29?wm2ZSRVghVFFLMUp=Nr-Q{T16pERpP*bRA)-#)#
zol*V!Tl~H`4)qy2-P+foKDvHDeR5qs!6W2f(@D3sT$qD~vZxEbgIZE2)QN*J92a0N
zT!Z@PI%4g2Py=T@<@%S$a>SkS9h{FE_W{mA?=+8abNu|Yo4{Q&^o;9}8%xu^35()g
z)J@NM*8QG50S6JcM}7PJj@i@?HSy4MZbzdq3vpqri`B6fe(a;7=lLjV3(ulvcnSOA
zUF4?}ul*l<ykWlc?w_T$V|BHoR#x&)_fHZNF$3{@a}8?Tov3m5o5xMxCF^h(_5M6Y
zy$AnU-n-!5r<ACHB2X)f#9>$j)8I1HLe`=BZL@d}>X|xho<~jO4l<6<duEBSi?&sm
zgARpJ7pjZe^46#=9)KEPiaEzzhPwCbEk0>pG4Gi#P~)b#q+8|V0ivP-%b*%+qV835
z%l9>hqgFBzwbC!l#i$jp#wNH9HBL%iKIOBUxlz|CfNC#={vToLQVAu|0yS_))UD`+
zdfErz2RH`HV!#zQP<gWsYGO^XJa$1{U?FO}@2q{Rc@VXu=g_AU?^997z^iVcv}O*}
zjEk7%P;WtPYfr-5#N({}E6cA#U0}Dxr_CFv>pVqGFesV**Y{kOWOt!NR6{lNugLOU
zP$v$+ARKP74?~D2p(gr?Ip6Xt&2P<3=8rg({y!yi|M{O+^_m-a2kJt5Fa!@{K0J<v
z@fo(j{MUJcaTMx(?stPvN8E(P@DXaK^4@e0ZDZ8J`l2Q}+MMd6QkleDY>H=46Nta%
zPAG?Z@83k_uVMh^4CL=o6dg|;{y*#R=R!Ixq3teqvp&CJapE6nkG0$a)Z)ESly?Zy
z)1e^Vz&&c<D8+u~vJ>7XKg;UbP1no)-<49*w>pVq^s9$Oi8IkJBjp_BBt^#~+FMX=
z1#tZyR2EyqpZKxs<Dc0e%PSR6zuT0jltRSsP)gC>l2U_Q8sfYdPCN*8RH1CJ`c?A#
zi8C;%h13HncLG`e5h^+9bPa#QVRnKB_?NPsypFGNud8|^=~In(1Mw$#h<GASrs(*R
zSogUmaaT${;*G?cC~?&P|Iq%Ar$biC18b;d=4YmDtbUmG7nDlGdbKi8=R3w5N?e=r
z4<(ZF6}h9d&BgA-I^LpWVk{lSXnPmqP=~K76@6h8p+h<Aq=vlI7coFj>Jc{32UwZ@
z4Jez*Pg2L%j!$UUx8W7q`6l+tphw|#_a5OT+VfN1Bko7sRQJCG!DE6a`1%n~ZX=}t
z$q%hzD<=mtvA$S@wwjjTMf?M02XSul_b3}EvE(vQ^y>Xi{5|%@yO^E4|M{;+Vhp7f
zB|$lk0scmQmqPA8>hsB^r+%IK6H0C3lQ@oYoRXeNB~aE<uSl7rK{&Q@PFnK%2VH%1
zSHU`znv}O`^FQV7RpCgYWTWBL@tph=g3l;_ke^QZiIUDb%(T88>Gvz8ANkfejZ&C$
zp7tM6|45t$m)Uuxnb51l|Ne*4n1@b9DV3<del#OkL)k;yLTi{n{TcNxIMQ-4uMPTu
zF@{-wHuY-OmJz=tp3iydC^>`t>*qgHAlZ=wAAa7SxZ6%nO<u=Ka-U){F2zVCIUZBm
zQCgDM(aC&>`-q!yegl6CuP3?2)_wrn`p0Jd`XbP0c`&6CGt6iwG@w%`^%Im;6h8X>
z$4c@usJ*oKA50>5kD}u{o3!da>cc6&TH66~v#9UFGL-s0f@m(f4*#QL3@$<)`XV{)
zuem>ZkZ)~qbNqpLr1fpWd0EKiV60l?R#F0}FDL&7`Rb@IvMl62rmiCc`chK4K$%UM
zYz^C}>li{D#6S%#uiQA|1meFjlEHKwp?pr9?2q_wE~t;D6r<k=N+$B3*%<NE^V1ei
zocY!L*Ll+^U(k?O0moa^3)87D#t?U<^rzm9+{f65qN5At4XgVT{BeptTgctVY{Z+X
zueCnsiN{&TRsr1q8Z>-P$FVq?h9cJJ|4D;-7dx>rE+CGj1kwK@MMpIGRG5`gm>sD?
z{0sGOC^`-jFR{KZ!~Ituiaq}fLWg%KpS<dUXDEB<bVwcT(DR}rhzrfOdU@0jA@O!Q
z)czN_D9U_0_j`O_4IB+ARq4BrT!<3kK{MX2nQ=ykn!#*`SAnJ!oO+(-qiW{ZNt}ZC
zXX?LGPf5L?zlBGNx{jhaiMB>A^#Az<u@3z#G?(^Z;=ioFzrp^fL#_vPUwLbsiC5`-
zk>qa6J;a&B`7FLk`wYr(avxf*KJ{qI|0rk3Rc0}V>7$>cwLPoJh2cEPIy+}Q?SE4^
zd|q~Xl_uy)xo;hs<D0ZbU|P!G{=WP;f-NW|$)#}v_*(`OPp9Z;O}+`1u=axZFKrpI
z6L$0Wdi4jdY8(@&Ks?7zcu0K(9lypzN-at<@sGIF`kbOZiuz<6g8{T}pE133M&CEo
zHj-(CeQDJ(gS!8)vu_e-qm(56ni9ec>fv=dMNlte{pR5XJGUVD=EOUQS6NPDULm&~
z`(yFfU+<@M`izp2hV>Xlr$*EdVrk;`)VEL;5%<QS<o4kN)bTI%UvYrN%58eBeu4Jf
z<bK3n<aerrUatZq&Qb0Y-ts5;Hx=Tl)YsrJI!~h>%8CMrUq5n_`<8_Mj<SxDk66bU
z>o*!Jxs?CUMA|!1E612RD(H1hB6yQhm-=dwQ|;uf)N@$<GWC{}YQ&f6n;Z9HDhAAf
zI)0<<w*HFWv%Kn`Q??Q3!aST4NxcSj{TB=We`KSf5Ce3eOdvb(wE@&=iVa@E@~JI;
zZX=8$pNG<&coG(4ypq(jSig#P-ZbK$sBh8!KO<N|r#|=xwzbY*P;X%;Q1ybX{;jnu
zH=KH?#mkA`wfdjbo6tWMac}BlC_0uA7h+QHp?-ysD~S8AV=<*NB?V;&Cl;sNq6E^p
zADtVM*AYdWhH{FwLX=13PSaiuml2nxbf;vc&tE!$qpicMNG?0|6SV925|``ye<~%j
zC3`X0V2X~hl>b@&J93BoS@(OVqr^oh9jyJaoue*UsTaq8Xlp|$ZRd@*KA(~cq}~wy
z>)%gMlG*9#Kq*W7E{(5_%)}oNY{Kj0&*BP-j?1R%_bAPXf3e&uoI?K-I1kI)H40!A
z%H2S&|F+KL$U_OE<4ZbTq9jms{Eysb$_R^<J5GHExx&;J;{YW&O4tQdze1Tx2_tu0
z369j%zv5hdsWqkK($~9=YYcJ;zog8iK9;hL^6EH7<!4SThdc4r@$+kaI$ORJjccvL
z5PU#6Oo_8xPdn!h9?|<>nbPyMLGx0-LFY2Inq$PP>GK3{Qw~sctfy2Z|AJD0TnhT9
zQ?YjS=}7sAb{*|0{V8dQ%PYa*(=R1-{J}{BUDf-F4(X}?M@h87)?jDyA5s=j22$Rj
z9HgkrcuEMBvP|G7>J{ufs$M(#JR|;ql3M+UJ7c2$de?@^M9O{|n^IyKU<L6AijIrq
zbezVwIdL%cIhLz$_VM>%C$JYK%JOHi6z8n8_7Ct=;uveM9+<#)Bta@lej4ATu@#m>
z9kt1SPrWXFW4Uv$eiqWtL+kq2s+*9dWAENEefxFk8q;ympsq=SVmkKeH@I)ox-~<Z
z#|9^qPb|4E_1vr_qOVT;K6%#K<VmBF=S{l)(U@yvHecT`?#d6#l4q{HF=5)en1da2
F{T~R9zKj3>

delta 17905
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
O&B<JH?W7}Za{dqEmZ5F{

diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po
index ecd343f8..a4cc9798 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: 2018-12-26 11:39+0800\n"
+"POT-Creation-Date: 2018-12-26 13:42+0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: ibuler <ibuler@qq.com>\n"
 "Language-Team: Jumpserver team<ibuler@qq.com>\n"
@@ -116,7 +116,7 @@ msgstr "端口"
 #: audits/templates/audits/ftp_log_list.html:41
 #: audits/templates/audits/ftp_log_list.html:71 perms/forms.py:42
 #: perms/models.py:31
-#: perms/templates/perms/asset_permission_create_update.html:40
+#: perms/templates/perms/asset_permission_create_update.html:45
 #: perms/templates/perms/asset_permission_list.html:56
 #: perms/templates/perms/asset_permission_list.html:114
 #: terminal/backends/command/models.py:13 terminal/models.py:140
@@ -630,7 +630,7 @@ msgstr "默认资产组"
 #: ops/templates/ops/command_execution_list.html:34
 #: ops/templates/ops/command_execution_list.html:59 perms/forms.py:36
 #: perms/models.py:29
-#: perms/templates/perms/asset_permission_create_update.html:36
+#: perms/templates/perms/asset_permission_create_update.html:41
 #: perms/templates/perms/asset_permission_list.html:54
 #: perms/templates/perms/asset_permission_list.html:108 templates/index.html:87
 #: terminal/backends/command/models.py:12 terminal/models.py:139
@@ -858,7 +858,7 @@ msgstr "资产列表"
 #: assets/templates/assets/asset_create.html:16
 #: assets/templates/assets/asset_update.html:21
 #: assets/templates/assets/gateway_create_update.html:37
-#: perms/templates/perms/asset_permission_create_update.html:33
+#: perms/templates/perms/asset_permission_create_update.html:38
 msgid "Basic"
 msgstr "基本"
 
@@ -878,7 +878,7 @@ msgstr "自动生成密钥"
 #: assets/templates/assets/asset_create.html:60
 #: assets/templates/assets/asset_update.html:64
 #: assets/templates/assets/gateway_create_update.html:53
-#: perms/templates/perms/asset_permission_create_update.html:45
+#: perms/templates/perms/asset_permission_create_update.html:50
 #: terminal/templates/terminal/terminal_update.html:42
 msgid "Other"
 msgstr "其它"
@@ -900,7 +900,7 @@ msgstr "其它"
 #: common/templates/common/replay_storage_create.html:138
 #: common/templates/common/security_setting.html:70
 #: common/templates/common/terminal_setting.html:68
-#: perms/templates/perms/asset_permission_create_update.html:75
+#: perms/templates/perms/asset_permission_create_update.html:80
 #: terminal/templates/terminal/terminal_update.html:47
 #: users/templates/users/_user.html:50
 #: users/templates/users/user_bulk_update.html:23
@@ -933,7 +933,7 @@ msgstr "重置"
 #: common/templates/common/replay_storage_create.html:139
 #: common/templates/common/security_setting.html:71
 #: common/templates/common/terminal_setting.html:70
-#: perms/templates/perms/asset_permission_create_update.html:76
+#: perms/templates/perms/asset_permission_create_update.html:81
 #: terminal/templates/terminal/command_list.html:103
 #: terminal/templates/terminal/session_list.html:127
 #: terminal/templates/terminal/terminal_update.html:48
@@ -1008,7 +1008,7 @@ msgstr "测试"
 #: assets/templates/assets/admin_user_detail.html:24
 #: assets/templates/assets/admin_user_list.html:88
 #: assets/templates/assets/asset_detail.html:24
-#: assets/templates/assets/asset_list.html:175
+#: assets/templates/assets/asset_list.html:177
 #: assets/templates/assets/cmd_filter_detail.html:29
 #: assets/templates/assets/cmd_filter_list.html:57
 #: assets/templates/assets/cmd_filter_rule_list.html:86
@@ -1040,7 +1040,7 @@ msgstr "æ›´æ–°"
 #: assets/templates/assets/admin_user_detail.html:28
 #: assets/templates/assets/admin_user_list.html:89
 #: assets/templates/assets/asset_detail.html:28
-#: assets/templates/assets/asset_list.html:176
+#: assets/templates/assets/asset_list.html:178
 #: assets/templates/assets/cmd_filter_detail.html:33
 #: assets/templates/assets/cmd_filter_list.html:58
 #: assets/templates/assets/cmd_filter_rule_list.html:87
@@ -1082,7 +1082,7 @@ msgstr "选择节点"
 
 #: assets/templates/assets/admin_user_detail.html:100
 #: assets/templates/assets/asset_detail.html:208
-#: assets/templates/assets/asset_list.html:624
+#: assets/templates/assets/asset_list.html:635
 #: assets/templates/assets/cmd_filter_detail.html:106
 #: assets/templates/assets/system_user_asset.html:112
 #: assets/templates/assets/system_user_detail.html:182
@@ -1166,7 +1166,7 @@ msgstr "快速修改"
 #: assets/templates/assets/asset_detail.html:151
 #: assets/templates/assets/user_asset_list.html:47 perms/models.py:34
 #: perms/models.py:82
-#: perms/templates/perms/asset_permission_create_update.html:47
+#: perms/templates/perms/asset_permission_create_update.html:52
 #: perms/templates/perms/asset_permission_detail.html:120
 #: perms/templates/perms/asset_permission_list.html:59
 #: terminal/templates/terminal/terminal_list.html:34
@@ -1272,34 +1272,38 @@ msgid "Test node connective"
 msgstr "测试节点资产可连接性"
 
 #: assets/templates/assets/asset_list.html:136
+msgid "Refresh all node assets amount"
+msgstr "刷新所有节点资产数量"
+
+#: assets/templates/assets/asset_list.html:138
 msgid "Display only current node assets"
 msgstr "仅显示当前节点资产"
 
-#: assets/templates/assets/asset_list.html:137
+#: assets/templates/assets/asset_list.html:139
 msgid "Displays all child node assets"
 msgstr "显示所有子节点资产"
 
-#: assets/templates/assets/asset_list.html:214
+#: assets/templates/assets/asset_list.html:216
 msgid "Create node failed"
 msgstr "创建节点失败"
 
-#: assets/templates/assets/asset_list.html:226
+#: assets/templates/assets/asset_list.html:228
 msgid "Have child node, cancel"
 msgstr "存在子节点,不能删除"
 
-#: assets/templates/assets/asset_list.html:228
+#: assets/templates/assets/asset_list.html:230
 msgid "Have assets, cancel"
 msgstr "存在资产,不能删除"
 
-#: assets/templates/assets/asset_list.html:299
+#: assets/templates/assets/asset_list.html:301
 msgid "Rename success"
 msgstr "重命名成功"
 
-#: assets/templates/assets/asset_list.html:300
+#: assets/templates/assets/asset_list.html:302
 msgid "Rename failed, do not change the root node name"
 msgstr "重命名失败,不能更改root节点的名称"
 
-#: assets/templates/assets/asset_list.html:618
+#: assets/templates/assets/asset_list.html:629
 #: assets/templates/assets/system_user_list.html:137
 #: users/templates/users/user_detail.html:380
 #: users/templates/users/user_detail.html:406
@@ -1309,11 +1313,11 @@ msgstr "重命名失败,不能更改root节点的名称"
 msgid "Are you sure?"
 msgstr "你确认吗?"
 
-#: assets/templates/assets/asset_list.html:619
+#: assets/templates/assets/asset_list.html:630
 msgid "This will delete the selected assets !!!"
 msgstr "删除选择资产"
 
-#: assets/templates/assets/asset_list.html:622
+#: assets/templates/assets/asset_list.html:633
 #: assets/templates/assets/system_user_list.html:141
 #: common/templates/common/terminal_setting.html:163
 #: users/templates/users/user_detail.html:384
@@ -1326,16 +1330,16 @@ msgstr "删除选择资产"
 msgid "Cancel"
 msgstr "取消"
 
-#: assets/templates/assets/asset_list.html:628
+#: assets/templates/assets/asset_list.html:639
 msgid "Asset Deleted."
 msgstr "已被删除"
 
-#: assets/templates/assets/asset_list.html:629
-#: assets/templates/assets/asset_list.html:634
+#: assets/templates/assets/asset_list.html:640
+#: assets/templates/assets/asset_list.html:645
 msgid "Asset Delete"
 msgstr "删除"
 
-#: assets/templates/assets/asset_list.html:633
+#: assets/templates/assets/asset_list.html:644
 msgid "Asset Deleting failed."
 msgstr "删除失败"
 
@@ -2610,7 +2614,7 @@ msgstr "添加节点"
 msgid "Join"
 msgstr "加入"
 
-#: perms/templates/perms/asset_permission_create_update.html:53
+#: perms/templates/perms/asset_permission_create_update.html:58
 msgid "Validity period"
 msgstr "有效期"
 
-- 
2.18.0