diff --git a/ruoyi-admin/src/main/resources/static/1414.70908155.async.js b/ruoyi-admin/src/main/resources/static/1414.70908155.async.js
new file mode 100644
index 0000000..2b5e50e
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/static/1414.70908155.async.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[1414],{21414:function(U,x,e){e.r(x),e.d(x,{default:function(){return P}});var M=e(97857),j=e.n(M),L=e(15009),s=e.n(L),C=e(99289),c=e.n(C),m=e(2453),D=e(83622),O=e(17788),h=e(67294),r=e(76772);function R(u){return p.apply(this,arguments)}function p(){return p=c()(s()().mark(function u(i){return s()().wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",(0,r.request)("/api/monitor/online/list",{method:"GET",params:i}));case 1:case"end":return t.stop()}},u)})),p.apply(this,arguments)}function w(u){return g.apply(this,arguments)}function g(){return g=c()(s()().mark(function u(i){return s()().wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",(0,r.request)("/api/monitor/online/".concat(i),{method:"DELETE"}));case 1:case"end":return t.stop()}},u)})),g.apply(this,arguments)}var B=e(65385),E=e(48689),n=e(85893),S=function(){var u=c()(s()().mark(function i(o){var t;return s()().wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return t=m.ZP.loading("\u6B63\u5728\u5F3A\u5236\u4E0B\u7EBF"),a.prev=1,a.next=4,w(o.tokenId);case 4:return t(),m.ZP.success("\u5F3A\u5236\u4E0B\u7EBF\u6210\u529F\uFF0C\u5373\u5C06\u5237\u65B0"),a.abrupt("return",!0);case 9:return a.prev=9,a.t0=a.catch(1),t(),m.ZP.error("\u5F3A\u5236\u4E0B\u7EBF\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),a.abrupt("return",!1);case 14:case"end":return a.stop()}},i,null,[[1,9]])}));return function(o){return u.apply(this,arguments)}}(),Z=function(){var i=(0,h.useRef)(),o=(0,h.useRef)(),t=(0,r.useAccess)(),y=(0,r.useIntl)();(0,h.useEffect)(function(){},[]);var a=[{title:(0,n.jsx)(r.FormattedMessage,{id:"monitor.online.user.token_id",defaultMessage:"\u4F1A\u8BDD\u7F16\u53F7"}),dataIndex:"tokenId",valueType:"text",hideInSearch:!0},{title:(0,n.jsx)(r.FormattedMessage,{id:"monitor.online.user.user_name",defaultMessage:"\u7528\u6237\u8D26\u53F7"}),dataIndex:"userName",valueType:"text"},{title:(0,n.jsx)(r.FormattedMessage,{id:"monitor.online.user.dept_name",defaultMessage:"\u90E8\u95E8\u540D\u79F0"}),dataIndex:"deptName",valueType:"text",hideInSearch:!0},{title:(0,n.jsx)(r.FormattedMessage,{id:"monitor.online.user.ipaddr",defaultMessage:"\u767B\u5F55IP\u5730\u5740"}),dataIndex:"ipaddr",valueType:"text"},{title:(0,n.jsx)(r.FormattedMessage,{id:"monitor.online.user.login_location",defaultMessage:"\u767B\u5F55\u5730\u70B9"}),dataIndex:"loginLocation",valueType:"text",hideInSearch:!0},{title:(0,n.jsx)(r.FormattedMessage,{id:"monitor.online.user.browser",defaultMessage:"\u6D4F\u89C8\u5668\u7C7B\u578B"}),dataIndex:"browser",valueType:"text",hideInSearch:!0},{title:(0,n.jsx)(r.FormattedMessage,{id:"monitor.online.user.os",defaultMessage:"\u64CD\u4F5C\u7CFB\u7EDF"}),dataIndex:"os",valueType:"text",hideInSearch:!0},{title:(0,n.jsx)(r.FormattedMessage,{id:"monitor.online.user.login_time",defaultMessage:"\u767B\u5F55\u65F6\u95F4"}),dataIndex:"loginTime",valueType:"dateRange",render:function(l,d){return(0,n.jsx)("span",{children:d.loginTime})},hideInSearch:!0,search:{transform:function(l){return{"params[beginTime]":l[0],"params[endTime]":l[1]}}}},{title:(0,n.jsx)(r.FormattedMessage,{id:"pages.searchTable.titleOption",defaultMessage:"\u64CD\u4F5C"}),dataIndex:"option",width:"60px",valueType:"option",render:function(l,d){return[(0,n.jsx)(D.ZP,{type:"link",size:"small",danger:!0,icon:(0,n.jsx)(E.Z,{}),hidden:!t.hasPerms("monitor:online:forceLogout"),onClick:c()(s()().mark(function F(){return s()().wrap(function(T){for(;;)switch(T.prev=T.next){case 0:O.Z.confirm({title:"\u5F3A\u8E22",content:"\u786E\u5B9A\u5F3A\u5236\u5C06\u8BE5\u7528\u6237\u8E22\u4E0B\u7EBF\u5417\uFF1F",okText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88",onOk:function(){var b=c()(s()().mark(function k(){var I;return s()().wrap(function(f){for(;;)switch(f.prev=f.next){case 0:return f.next=2,S(d);case 2:I=f.sent,I&&o.current&&o.current.reload();case 4:case"end":return f.stop()}},k)}));function $(){return b.apply(this,arguments)}return $}()});case 1:case"end":return T.stop()}},F)})),children:"\u5F3A\u9000"},"batchRemove")]}}];return(0,n.jsx)("div",{style:{width:"100%",float:"right"},children:(0,n.jsx)(B.Z,{headerTitle:y.formatMessage({id:"pages.searchTable.title",defaultMessage:"\u4FE1\u606F"}),actionRef:o,formRef:i,rowKey:"tokenId",search:{labelWidth:120},request:function(l){return R(j()({},l)).then(function(d){var F={data:d.rows,total:d.total,success:!0};return F})},columns:a},"logininforList")})},P=Z}}]);
