"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[2655],{33867:function(J,L,e){e.d(L,{iK:function(){return w},zc:function(){return K}});var w=function(o){return o[o.SUCCESS=200]="SUCCESS",o[o.ERROR=-1]="ERROR",o[o.TIMEOUT=401]="TIMEOUT",o.TYPE="success",o}({}),h=function(o){return o.GET="GET",o.POST="POST",o.PUT="PUT",o.DELETE="DELETE",o}({}),K=function(o){return o.JSON="application/json;charset=UTF-8",o.FORM_URLENCODED="application/x-www-form-urlencoded;charset=UTF-8",o.FORM_DATA="multipart/form-data;charset=UTF-8",o}({})},62655:function(J,L,e){e.r(L);var w=e(97857),h=e.n(w),K=e(5574),o=e.n(K),H=e(15009),a=e.n(H),O=e(99289),E=e.n(O),j=e(67294),c=e(76772),m=e(2453),C=e(83622),W=e(17788),S=e(6110),V=e(65385),Z=e(2236),$=e(11475),B=e(48689),N=e(3355),k=e(24969),A=e(38002),x=e(94162),z=e(92982),r=e(85893),F=function(){var T=E()(a()().mark(function v(n){var s,d;return a()().wrap(function(u){for(;;)switch(u.prev=u.next){case 0:if(s=m.ZP.loading("\u6B63\u5728\u5220\u9664"),n){u.next=3;break}return u.abrupt("return",!0);case 3:return u.prev=3,u.next=6,(0,A.jw)(n.map(function(Q){return Q.infoId}).join(","));case 6:return d=u.sent,s(),d.code===200?m.ZP.success("\u5220\u9664\u6210\u529F\uFF0C\u5373\u5C06\u5237\u65B0"):m.ZP.error(d.msg),u.abrupt("return",!0);case 12:return u.prev=12,u.t0=u.catch(3),s(),m.ZP.error("\u5220\u9664\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),u.abrupt("return",!1);case 17:case"end":return u.stop()}},v,null,[[3,12]])}));return function(n){return T.apply(this,arguments)}}(),l=function(){var T=E()(a()().mark(function v(){var n,s;return a()().wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return n=m.ZP.loading("\u8BF7\u7A0D\u5019"),i.prev=1,i.next=4,(0,A.KF)();case 4:return s=i.sent,n(),s.code===200?m.ZP.success("\u6E05\u7A7A\u6210\u529F\uFF0C\u5373\u5C06\u5237\u65B0"):m.ZP.error(s.msg),i.abrupt("return",!0);case 10:return i.prev=10,i.t0=i.catch(1),n(),m.ZP.error("\u8BF7\u6C42\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),i.abrupt("return",!1);case 15:case"end":return i.stop()}},v,null,[[1,10]])}));return function(){return T.apply(this,arguments)}}(),g=function(){var T=E()(a()().mark(function v(n){var s,d;return a()().wrap(function(u){for(;;)switch(u.prev=u.next){case 0:return s=m.ZP.loading("\u6B63\u5728\u89E3\u9501"),u.prev=1,u.next=4,(0,A.Ny)(n);case 4:return d=u.sent,s(),d.code===200?m.ZP.success("\u89E3\u9501\u6210\u529F\uFF0C\u5373\u5C06\u5237\u65B0"):m.ZP.error(d.msg),u.abrupt("return",!0);case 10:return u.prev=10,u.t0=u.catch(1),s(),m.ZP.error("\u89E3\u9501\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),u.abrupt("return",!1);case 15:case"end":return u.stop()}},v,null,[[1,10]])}));return function(n){return T.apply(this,arguments)}}(),y=function(){var T=E()(a()().mark(function v(){var n;return a()().wrap(function(d){for(;;)switch(d.prev=d.next){case 0:return n=m.ZP.loading("\u6B63\u5728\u5BFC\u51FA"),d.prev=1,d.next=4,(0,A.Q6)();case 4:return n(),m.ZP.success("\u5BFC\u51FA\u6210\u529F"),d.abrupt("return",!0);case 9:return d.prev=9,d.t0=d.catch(1),n(),m.ZP.error("\u5BFC\u51FA\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),d.abrupt("return",!1);case 14:case"end":return d.stop()}},v,null,[[1,9]])}));return function(){return T.apply(this,arguments)}}(),t=function(){var v=(0,j.useRef)(),n=(0,j.useRef)(),s=(0,j.useState)([]),d=o()(s,2),i=d[0],u=d[1],Q=(0,j.useState)([]),Y=o()(Q,2),q=Y[0],ee=Y[1],G=(0,c.useAccess)(),ne=(0,c.useIntl)();(0,j.useEffect)(function(){(0,z.pX)("sys_common_status",!0).then(function(R){ee(R)})},[]);var re=[{title:(0,r.jsx)(c.FormattedMessage,{id:"monitor.logininfor.info_id",defaultMessage:"\u8BBF\u95EE\u7F16\u53F7"}),dataIndex:"infoId",valueType:"text",hideInSearch:!0},{title:(0,r.jsx)(c.FormattedMessage,{id:"monitor.logininfor.user_name",defaultMessage:"\u7528\u6237\u8D26\u53F7"}),dataIndex:"userName",valueType:"text"},{title:(0,r.jsx)(c.FormattedMessage,{id:"monitor.logininfor.ipaddr",defaultMessage:"\u767B\u5F55IP\u5730\u5740"}),dataIndex:"ipaddr",valueType:"text"},{title:(0,r.jsx)(c.FormattedMessage,{id:"monitor.logininfor.login_location",defaultMessage:"\u767B\u5F55\u5730\u70B9"}),dataIndex:"loginLocation",valueType:"text",hideInSearch:!0},{title:(0,r.jsx)(c.FormattedMessage,{id:"monitor.logininfor.browser",defaultMessage:"\u6D4F\u89C8\u5668\u7C7B\u578B"}),dataIndex:"browser",valueType:"text",hideInSearch:!0},{title:(0,r.jsx)(c.FormattedMessage,{id:"monitor.logininfor.os",defaultMessage:"\u64CD\u4F5C\u7CFB\u7EDF"}),dataIndex:"os",valueType:"text",hideInSearch:!0},{title:(0,r.jsx)(c.FormattedMessage,{id:"monitor.logininfor.status",defaultMessage:"\u767B\u5F55\u72B6\u6001"}),dataIndex:"status",valueType:"select",valueEnum:q,render:function(b,D){return(0,r.jsx)(x.Z,{enums:q,value:D.status})}},{title:(0,r.jsx)(c.FormattedMessage,{id:"monitor.logininfor.msg",defaultMessage:"\u63D0\u793A\u6D88\u606F"}),dataIndex:"msg",valueType:"text",hideInSearch:!0},{title:(0,r.jsx)(c.FormattedMessage,{id:"monitor.logininfor.login_time",defaultMessage:"\u8BBF\u95EE\u65F6\u95F4"}),dataIndex:"loginTime",valueType:"dateTime"}];return(0,r.jsxs)(S._z,{children:[(0,r.jsx)("div",{style:{width:"100%",float:"right"},children:(0,r.jsx)(V.Z,{headerTitle:ne.formatMessage({id:"pages.searchTable.title",defaultMessage:"\u4FE1\u606F"}),actionRef:n,formRef:v,rowKey:"infoId",search:{labelWidth:120},toolBarRender:function(){return[(0,r.jsxs)(C.ZP,{danger:!0,hidden:(i==null?void 0:i.length)===0||!G.hasPerms("monitor:logininfor:remove"),onClick:E()(a()().mark(function b(){return a()().wrap(function(p){for(;;)switch(p.prev=p.next){case 0:W.Z.confirm({title:"\u662F\u5426\u786E\u8BA4\u5220\u9664\u6240\u9009\u6570\u636E\u9879?",icon:(0,r.jsx)($.Z,{}),content:"\u8BF7\u8C28\u614E\u64CD\u4F5C",onOk:function(){return E()(a()().mark(function U(){var M,f,P;return a()().wrap(function(_){for(;;)switch(_.prev=_.next){case 0:return _.next=2,F(i);case 2:M=_.sent,M&&(u([]),(f=n.current)===null||f===void 0||(P=f.reloadAndRest)===null||P===void 0||P.call(f));case 4:case"end":return _.stop()}},U)}))()},onCancel:function(){}});case 1:case"end":return p.stop()}},b)})),children:[(0,r.jsx)(B.Z,{}),(0,r.jsx)(c.FormattedMessage,{id:"pages.searchTable.delete",defaultMessage:"\u5220\u9664"})]},"remove"),(0,r.jsxs)(C.ZP,{type:"primary",danger:!0,hidden:!G.hasPerms("monitor:logininfor:remove"),onClick:E()(a()().mark(function b(){return a()().wrap(function(p){for(;;)switch(p.prev=p.next){case 0:W.Z.confirm({title:"\u662F\u5426\u786E\u8BA4\u6E05\u7A7A\u6240\u6709\u6570\u636E\u9879?",icon:(0,r.jsx)($.Z,{}),content:"\u8BF7\u8C28\u614E\u64CD\u4F5C",onOk:function(){return E()(a()().mark(function U(){var M,f,P;return a()().wrap(function(_){for(;;)switch(_.prev=_.next){case 0:return _.next=2,l();case 2:M=_.sent,M&&(u([]),(f=n.current)===null||f===void 0||(P=f.reloadAndRest)===null||P===void 0||P.call(f));case 4:case"end":return _.stop()}},U)}))()},onCancel:function(){}});case 1:case"end":return p.stop()}},b)})),children:[(0,r.jsx)(B.Z,{}),(0,r.jsx)(c.FormattedMessage,{id:"pages.searchTable.cleanAll",defaultMessage:"\u6E05\u7A7A"})]},"clean"),(0,r.jsxs)(C.ZP,{type:"primary",hidden:(i==null?void 0:i.length)===0||!G.hasPerms("monitor:logininfor:unlock"),onClick:E()(a()().mark(function b(){return a()().wrap(function(p){for(;;)switch(p.prev=p.next){case 0:W.Z.confirm({title:"\u662F\u5426\u786E\u8BA4\u89E3\u9501\u8BE5\u7528\u6237\u7684\u6570\u636E\u9879?",icon:(0,r.jsx)($.Z,{}),content:"\u8BF7\u8C28\u614E\u64CD\u4F5C",onOk:function(){return E()(a()().mark(function U(){var M,f,P;return a()().wrap(function(_){for(;;)switch(_.prev=_.next){case 0:return _.next=2,g(i[0].userName);case 2:M=_.sent,M&&(u([]),(f=n.current)===null||f===void 0||(P=f.reloadAndRest)===null||P===void 0||P.call(f));case 4:case"end":return _.stop()}},U)}))()},onCancel:function(){}});case 1:case"end":return p.stop()}},b)})),children:[(0,r.jsx)(N.Z,{}),(0,r.jsx)(c.FormattedMessage,{id:"monitor.logininfor.unlock",defaultMessage:"\u89E3\u9501"})]},"unlock"),(0,r.jsxs)(C.ZP,{type:"primary",hidden:!G.hasPerms("monitor:logininfor:export"),onClick:E()(a()().mark(function b(){return a()().wrap(function(p){for(;;)switch(p.prev=p.next){case 0:y();case 1:case"end":return p.stop()}},b)})),children:[(0,r.jsx)(k.Z,{}),(0,r.jsx)(c.FormattedMessage,{id:"pages.searchTable.export",defaultMessage:"\u5BFC\u51FA"})]},"export")]},request:function(b){return(0,A.U0)(h()({},b)).then(function(D){var p={data:D.rows,total:D.total,success:!0};return p})},columns:re,rowSelection:{onChange:function(b,D){u(D)}}},"logininforList")}),(i==null?void 0:i.length)>0&&(0,r.jsx)(Z.S,{extra:(0,r.jsxs)("div",{children:[(0,r.jsx)(c.FormattedMessage,{id:"pages.searchTable.chosen",defaultMessage:"\u5DF2\u9009\u62E9"}),(0,r.jsx)("a",{style:{fontWeight:600},children:i.length}),(0,r.jsx)(c.FormattedMessage,{id:"pages.searchTable.item",defaultMessage:"\u9879"})]}),children:(0,r.jsx)(C.ZP,{danger:!0,hidden:!G.hasPerms("monitor:logininfor:remove"),onClick:E()(a()().mark(function R(){return a()().wrap(function(D){for(;;)switch(D.prev=D.next){case 0:W.Z.confirm({title:"\u5220\u9664",content:"\u786E\u5B9A\u5220\u9664\u8BE5\u9879\u5417\uFF1F",okText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88",onOk:function(){var p=E()(a()().mark(function U(){var M,f,P;return a()().wrap(function(_){for(;;)switch(_.prev=_.next){case 0:return _.next=2,F(i);case 2:M=_.sent,M&&(u([]),(f=n.current)===null||f===void 0||(P=f.reloadAndRest)===null||P===void 0||P.call(f));case 4:case"end":return _.stop()}},U)}));function I(){return p.apply(this,arguments)}return I}()});case 1:case"end":return D.stop()}},R)})),children:(0,r.jsx)(c.FormattedMessage,{id:"pages.searchTable.batchDeletion",defaultMessage:"\u6279\u91CF\u5220\u9664"})},"remove")})]})};L.default=t},92982:function(J,L,e){e.d(L,{Hr:function(){return V},QK:function(){return r},Vd:function(){return C},a7:function(){return N},jK:function(){return c},n2:function(){return z},oH:function(){return $},pX:function(){return W},sF:function(){return A}});var w=e(15009),h=e.n(w),K=e(97857),o=e.n(K),H=e(99289),a=e.n(H),O=e(76772),E=e(33867),j=e(30964);function c(l){return m.apply(this,arguments)}function m(){return m=a()(h()().mark(function l(g){return h()().wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",(0,O.request)("/api/system/dict/type/list",{params:o()({},g),method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return t.stop()}},l)})),m.apply(this,arguments)}function C(l){return(0,O.request)("/api/system/dict/type/".concat(l),{method:"GET"})}function W(l,g){return S.apply(this,arguments)}function S(){return S=a()(h()().mark(function l(g,y){var t,T;return h()().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,(0,O.request)("/api/system/dict/data/type/".concat(g),{method:"GET"});case 2:if(t=n.sent,t.code!==E.iK.SUCCESS){n.next=9;break}return T={},t.data.forEach(function(s){T[s.dictValue]={text:s.dictLabel,label:s.dictLabel,value:y?Number(s.dictValue):s.dictValue,key:s.dictCode,listClass:s.listClass,status:s.listClass}}),n.abrupt("return",T);case 9:return n.abrupt("return",{});case 10:case"end":return n.stop()}},l)})),S.apply(this,arguments)}function V(l,g){return Z.apply(this,arguments)}function Z(){return Z=a()(h()().mark(function l(g,y){var t,T;return h()().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,(0,O.request)("/api/system/dict/data/type/".concat(g),{method:"GET"});case 2:if(t=n.sent,t.code!==200){n.next=6;break}return T=t.data.map(function(s){return{text:s.dictLabel,label:s.dictLabel,value:y?Number(s.dictValue):s.dictValue,key:s.dictCode,listClass:s.listClass,status:s.listClass}}),n.abrupt("return",T);case 6:return n.abrupt("return",[]);case 7:case"end":return n.stop()}},l)})),Z.apply(this,arguments)}function $(l){return B.apply(this,arguments)}function B(){return B=a()(h()().mark(function l(g){return h()().wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",(0,O.request)("/api/system/dict/type",{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},data:g}));case 1:case"end":return t.stop()}},l)})),B.apply(this,arguments)}function N(l){return k.apply(this,arguments)}function k(){return k=a()(h()().mark(function l(g){return h()().wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",(0,O.request)("/api/system/dict/type",{method:"PUT",headers:{"Content-Type":"application/json;charset=UTF-8"},data:g}));case 1:case"end":return t.stop()}},l)})),k.apply(this,arguments)}function A(l){return x.apply(this,arguments)}function x(){return x=a()(h()().mark(function l(g){return h()().wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",(0,O.request)("/api/system/dict/type/".concat(g),{method:"DELETE"}));case 1:case"end":return t.stop()}},l)})),x.apply(this,arguments)}function z(l){return(0,j.su)("/api/system/dict/type/export",{params:l},"dict_type_".concat(new Date().getTime(),".xlsx"))}function r(l){return F.apply(this,arguments)}function F(){return F=a()(h()().mark(function l(g){return h()().wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",(0,O.request)("/api/system/dict/type/optionselect",{params:o()({},g),method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return t.stop()}},l)})),F.apply(this,arguments)}}}]);
