diff --git a/ruoyi-admin/src/main/resources/static/1306.3df2c024.async.js b/ruoyi-admin/src/main/resources/static/1306.3df2c024.async.js
new file mode 100644
index 0000000..6b2926a
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/static/1306.3df2c024.async.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[1306,6492],{94162:function(q,y,e){var K=e(64599),t=e.n(K),L=e(67294),n=e(66309),f=e(85893),F=function(u){function A(o){switch(o){case"primary":return"blue";case"success":return"success";case"info":return"green";case"warning":return"warning";case"danger":return"error";case"default":default:return"default"}}function p(o){if(o===void 0)return"";if(u.enums){var j=u.enums[o];return j.label}if(u.options){if(!Array.isArray(u.options))return console.log("DictTag options is no array!"),"";var m=t()(u.options),P;try{for(m.s();!(P=m.n()).done;){var l=P.value;if(l.value===o)return l.text}}catch(_){m.e(_)}finally{m.f()}}return String(u.value)}function R(o){if(o===void 0)return"default";if(u.enums){var j=u.enums[o];return j.listClass||"default"}if(u.options){if(!Array.isArray(u.options))return console.log("DictTag options is no array!"),"default";var m=t()(u.options),P;try{for(m.s();!(P=m.n()).done;){var l=P.value;if(l.value===o)return l.listClass||"default"}}catch(_){m.e(_)}finally{m.f()}}return String(u.value)}var T=function(){return A(R(u.value).toLowerCase())},d=function(){return p(u.value)};return(0,f.jsx)(n.Z,{color:T(),children:d()})};y.Z=F},33867:function(q,y,e){e.d(y,{iK:function(){return K},zc:function(){return L}});var K=function(n){return n[n.SUCCESS=200]="SUCCESS",n[n.ERROR=-1]="ERROR",n[n.TIMEOUT=401]="TIMEOUT",n.TYPE="success",n}({}),t=function(n){return n.GET="GET",n.POST="POST",n.PUT="PUT",n.DELETE="DELETE",n}({}),L=function(n){return n.JSON="application/json;charset=UTF-8",n.FORM_URLENCODED="application/x-www-form-urlencoded;charset=UTF-8",n.FORM_DATA="multipart/form-data;charset=UTF-8",n}({})},46492:function(q,y,e){e.r(y);var K=e(67294),t=e(17788),L=e(83622),n=e(26412),f=e(76772),F=e(61314),a=e(85893),u=function(p){var R,T=p.values,d=p.statusOptions;(0,K.useEffect)(function(){},[p]);var o=(0,f.useIntl)(),j={0:"\u9ED8\u8BA4\u7B56\u7565",1:"\u7ACB\u5373\u6267\u884C",2:"\u6267\u884C\u4E00\u6B21",3:"\u653E\u5F03\u6267\u884C"},m=function(){p.onCancel()};return(0,a.jsx)(t.Z,{width:800,title:o.formatMessage({id:"monitor.job.detail",defaultMessage:"\u64CD\u4F5C\u65E5\u5FD7\u8BE6\u7EC6\u4FE1\u606F"}),open:p.open,destroyOnClose:!0,onCancel:m,footer:[(0,a.jsx)(L.ZP,{onClick:m,children:"\u5173\u95ED"},"back")],children:(0,a.jsxs)(n.Z,{column:24,children:[(0,a.jsx)(n.Z.Item,{span:12,label:(0,a.jsx)(f.FormattedMessage,{id:"monitor.job.job_id",defaultMessage:"\u4EFB\u52A1\u7F16\u53F7"}),children:T.jobId}),(0,a.jsx)(n.Z.Item,{span:12,label:(0,a.jsx)(f.FormattedMessage,{id:"monitor.job.job_name",defaultMessage:"\u4EFB\u52A1\u540D\u79F0"}),children:T.jobName}),(0,a.jsx)(n.Z.Item,{span:12,label:(0,a.jsx)(f.FormattedMessage,{id:"monitor.job.job_group",defaultMessage:"\u4EFB\u52A1\u7EC4\u540D"}),children:T.jobGroup}),(0,a.jsx)(n.Z.Item,{span:12,label:(0,a.jsx)(f.FormattedMessage,{id:"monitor.job.concurrent",defaultMessage:"\u662F\u5426\u5E76\u53D1\u6267\u884C"}),children:T.concurrent==="1"?"\u7981\u6B62":"\u5141\u8BB8"}),(0,a.jsx)(n.Z.Item,{span:12,label:(0,a.jsx)(f.FormattedMessage,{id:"monitor.job.misfire_policy",defaultMessage:"\u8BA1\u5212\u6267\u884C\u9519\u8BEF\u7B56\u7565"}),children:j[T.misfirePolicy?T.misfirePolicy:"0"]}),(0,a.jsx)(n.Z.Item,{span:12,label:(0,a.jsx)(f.FormattedMessage,{id:"monitor.job.create_time",defaultMessage:"\u521B\u5EFA\u65F6\u95F4"}),children:(R=T.createTime)===null||R===void 0?void 0:R.toString()}),(0,a.jsx)(n.Z.Item,{span:12,label:(0,a.jsx)(f.FormattedMessage,{id:"monitor.job.status",defaultMessage:"\u72B6\u6001"}),children:(0,F.n)(d,T.status,"\u672A\u77E5")}),(0,a.jsx)(n.Z.Item,{span:12,label:(0,a.jsx)(f.FormattedMessage,{id:"monitor.job.next_valid_time",defaultMessage:"\u4E0B\u6B21\u6267\u884C\u65F6\u95F4"}),children:T.nextValidTime}),(0,a.jsx)(n.Z.Item,{span:24,label:(0,a.jsx)(f.FormattedMessage,{id:"monitor.job.cron_expression",defaultMessage:"cron\u6267\u884C\u8868\u8FBE\u5F0F"}),children:T.cronExpression}),(0,a.jsx)(n.Z.Item,{span:24,label:(0,a.jsx)(f.FormattedMessage,{id:"monitor.job.invoke_target",defaultMessage:"\u8C03\u7528\u76EE\u6807\u5B57\u7B26\u4E32"}),children:T.invokeTarget})]})})};y.default=u},18299:function(q,y,e){e.r(y);var K=e(15009),t=e.n(K),L=e(99289),n=e.n(L),f=e(5574),F=e.n(f),a=e(67294),u=e(97269),A=e(31199),p=e(5966),R=e(64317),T=e(90672),d=e(16434),o=e(86615),j=e(99859),m=e(17788),P=e(76772),l=e(85893),_=function(s){var c=j.Z.useForm(),ae=F()(c,1),C=ae[0],ee=s.jobGroupOptions,E=s.statusOptions;(0,a.useEffect)(function(){C.resetFields(),C.setFieldsValue({jobId:s.values.jobId,jobName:s.values.jobName,jobGroup:s.values.jobGroup,invokeTarget:s.values.invokeTarget,cronExpression:s.values.cronExpression,misfirePolicy:s.values.misfirePolicy,concurrent:s.values.concurrent,status:s.values.status,createBy:s.values.createBy,createTime:s.values.createTime,updateBy:s.values.updateBy,updateTime:s.values.updateTime,remark:s.values.remark})},[C,s]);var g=(0,P.useIntl)(),w=function(){C.submit()},r=function(){s.onCancel(),C.resetFields()},V=function(){var z=n()(t()().mark(function M(O){return t()().wrap(function(se){for(;;)switch(se.prev=se.next){case 0:s.onSubmit(O);case 1:case"end":return se.stop()}},M)}));return function(O){return z.apply(this,arguments)}}();return(0,l.jsx)(m.Z,{width:640,title:g.formatMessage({id:"monitor.job.title",defaultMessage:"\u7F16\u8F91\u5B9A\u65F6\u4EFB\u52A1\u8C03\u5EA6"}),open:s.open,forceRender:!0,destroyOnClose:!0,onOk:w,onCancel:r,children:(0,l.jsxs)(u.A,{form:C,grid:!0,submitter:!1,layout:"horizontal",onFinish:V,children:[(0,l.jsx)(A.Z,{name:"jobId",label:g.formatMessage({id:"monitor.job.job_id",defaultMessage:"\u4EFB\u52A1\u7F16\u53F7"}),colProps:{md:24},placeholder:"\u8BF7\u8F93\u5165\u4EFB\u52A1\u7F16\u53F7",disabled:!0,hidden:!0,rules:[{required:!1,message:(0,l.jsx)(P.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u4EFB\u52A1\u7F16\u53F7\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u4EFB\u52A1\u7F16\u53F7\uFF01"})}]}),(0,l.jsx)(p.Z,{name:"jobName",label:g.formatMessage({id:"monitor.job.job_name",defaultMessage:"\u4EFB\u52A1\u540D\u79F0"}),colProps:{md:24},placeholder:"\u8BF7\u8F93\u5165\u4EFB\u52A1\u540D\u79F0",rules:[{required:!1,message:(0,l.jsx)(P.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u4EFB\u52A1\u540D\u79F0\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u4EFB\u52A1\u540D\u79F0\uFF01"})}]}),(0,l.jsx)(R.Z,{name:"jobGroup",options:ee,label:g.formatMessage({id:"monitor.job.job_group",defaultMessage:"\u4EFB\u52A1\u7EC4\u540D"}),colProps:{md:24},placeholder:"\u8BF7\u8F93\u5165\u4EFB\u52A1\u7EC4\u540D",rules:[{required:!1,message:(0,l.jsx)(P.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u4EFB\u52A1\u7EC4\u540D\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u4EFB\u52A1\u7EC4\u540D\uFF01"})}]}),(0,l.jsx)(T.Z,{name:"invokeTarget",label:g.formatMessage({id:"monitor.job.invoke_target",defaultMessage:"\u8C03\u7528\u76EE\u6807\u5B57\u7B26\u4E32"}),colProps:{md:24},placeholder:"\u8BF7\u8F93\u5165\u8C03\u7528\u76EE\u6807\u5B57\u7B26\u4E32",rules:[{required:!0,message:(0,l.jsx)(P.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u8C03\u7528\u76EE\u6807\u5B57\u7B26\u4E32\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u8C03\u7528\u76EE\u6807\u5B57\u7B26\u4E32\uFF01"})}]}),(0,l.jsx)(d.Z,{name:"cronExpression",label:g.formatMessage({id:"monitor.job.cron_expression",defaultMessage:"cron\u6267\u884C\u8868\u8FBE\u5F0F"}),captchaTextRender:function(){return"\u751F\u6210\u8868\u8FBE\u5F0F"},onGetCaptcha:function(){return new Promise(function(M,O){O()})}}),(0,l.jsx)(o.Z.Group,{name:"misfirePolicy",label:g.formatMessage({id:"monitor.job.misfire_policy",defaultMessage:"\u8BA1\u5212\u6267\u884C\u9519\u8BEF\u7B56\u7565"}),colProps:{md:24},placeholder:"\u8BF7\u8F93\u5165\u8BA1\u5212\u6267\u884C\u9519\u8BEF\u7B56\u7565",valueEnum:{0:"\u7ACB\u5373\u6267\u884C",1:"\u6267\u884C\u4E00\u6B21",3:"\u653E\u5F03\u6267\u884C"},rules:[{required:!1,message:(0,l.jsx)(P.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u8BA1\u5212\u6267\u884C\u9519\u8BEF\u7B56\u7565\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u8BA1\u5212\u6267\u884C\u9519\u8BEF\u7B56\u7565\uFF01"})}],fieldProps:{optionType:"button",buttonStyle:"solid"}}),(0,l.jsx)(o.Z.Group,{name:"concurrent",label:g.formatMessage({id:"monitor.job.concurrent",defaultMessage:"\u662F\u5426\u5E76\u53D1\u6267\u884C"}),colProps:{md:24},placeholder:"\u8BF7\u8F93\u5165\u662F\u5426\u5E76\u53D1\u6267\u884C",valueEnum:{0:"\u5141\u8BB8",1:"\u7981\u6B62"},rules:[{required:!1,message:(0,l.jsx)(P.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u662F\u5426\u5E76\u53D1\u6267\u884C\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u662F\u5426\u5E76\u53D1\u6267\u884C\uFF01"})}],fieldProps:{optionType:"button",buttonStyle:"solid"}}),(0,l.jsx)(o.Z.Group,{valueEnum:E,name:"status",label:g.formatMessage({id:"monitor.job.status",defaultMessage:"\u72B6\u6001"}),colProps:{md:24},placeholder:"\u8BF7\u8F93\u5165\u72B6\u6001",rules:[{required:!1,message:(0,l.jsx)(P.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u72B6\u6001\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u72B6\u6001\uFF01"})}]})]})})};y.default=_},61306:function(q,y,e){e.r(y);var K=e(5574),t=e.n(K),L=e(15009),n=e.n(L),f=e(97857),F=e.n(f),a=e(99289),u=e.n(a),A=e(67294),p=e(76772),R=e(85418),T=e(78957),d=e(2453),o=e(83622),j=e(17788),m=e(6110),P=e(65385),l=e(2236),_=e(86548),D=e(48689),s=e(80882),c=e(24969),ae=e(11475),C=e(91646),ee=e(92982),E=e(18299),g=e(46492),w=e(94162),r=e(85893),V=function(){var N=u()(n()().mark(function Z(I){var W,h;return n()().wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return W=d.ZP.loading("\u6B63\u5728\u6DFB\u52A0"),i.prev=1,i.next=4,(0,C.Y$)(F()({},I));case 4:return h=i.sent,W(),h.code===200?d.ZP.success("\u6DFB\u52A0\u6210\u529F"):d.ZP.error(h.msg),i.abrupt("return",!0);case 10:return i.prev=10,i.t0=i.catch(1),W(),d.ZP.error("\u6DFB\u52A0\u5931\u8D25\u8BF7\u91CD\u8BD5\uFF01"),i.abrupt("return",!1);case 15:case"end":return i.stop()}},Z,null,[[1,10]])}));return function(I){return N.apply(this,arguments)}}(),z=function(){var N=u()(n()().mark(function Z(I){var W,h;return n()().wrap(function(i){for(;;)switch(i.prev=i.next){case 0:return W=d.ZP.loading("\u6B63\u5728\u66F4\u65B0"),i.prev=1,i.next=4,(0,C.gK)(I);case 4:return h=i.sent,W(),h.code===200?d.ZP.success("\u66F4\u65B0\u6210\u529F"):d.ZP.error(h.msg),i.abrupt("return",!0);case 10:return i.prev=10,i.t0=i.catch(1),W(),d.ZP.error("\u914D\u7F6E\u5931\u8D25\u8BF7\u91CD\u8BD5\uFF01"),i.abrupt("return",!1);case 15:case"end":return i.stop()}},Z,null,[[1,10]])}));return function(I){return N.apply(this,arguments)}}(),M=function(){var N=u()(n()().mark(function Z(I){var W,h;return n()().wrap(function(i){for(;;)switch(i.prev=i.next){case 0:if(W=d.ZP.loading("\u6B63\u5728\u5220\u9664"),I){i.next=3;break}return i.abrupt("return",!0);case 3:return i.prev=3,i.next=6,(0,C.eX)(I.map(function(U){return U.jobId}).join(","));case 6:return h=i.sent,W(),h.code===200?d.ZP.success("\u5220\u9664\u6210\u529F\uFF0C\u5373\u5C06\u5237\u65B0"):d.ZP.error(h.msg),i.abrupt("return",!0);case 12:return i.prev=12,i.t0=i.catch(3),W(),d.ZP.error("\u5220\u9664\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),i.abrupt("return",!1);case 17:case"end":return i.stop()}},Z,null,[[3,12]])}));return function(I){return N.apply(this,arguments)}}(),O=function(){var N=u()(n()().mark(function Z(I){var W,h,H;return n()().wrap(function(U){for(;;)switch(U.prev=U.next){case 0:if(W=d.ZP.loading("\u6B63\u5728\u5220\u9664"),I){U.next=3;break}return U.abrupt("return",!0);case 3:return U.prev=3,h=[I.jobId],U.next=7,(0,C.eX)(h.join(","));case 7:return H=U.sent,W(),H.code===200?d.ZP.success("\u5220\u9664\u6210\u529F\uFF0C\u5373\u5C06\u5237\u65B0"):d.ZP.error(H.msg),U.abrupt("return",!0);case 13:return U.prev=13,U.t0=U.catch(3),W(),d.ZP.error("\u5220\u9664\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),U.abrupt("return",!1);case 18:case"end":return U.stop()}},Z,null,[[3,13]])}));return function(I){return N.apply(this,arguments)}}(),de=function(){var N=u()(n()().mark(function Z(){var I;return n()().wrap(function(h){for(;;)switch(h.prev=h.next){case 0:return I=d.ZP.loading("\u6B63\u5728\u5BFC\u51FA"),h.prev=1,h.next=4,(0,C.Q$)();case 4:return I(),d.ZP.success("\u5BFC\u51FA\u6210\u529F"),h.abrupt("return",!0);case 9:return h.prev=9,h.t0=h.catch(1),I(),d.ZP.error("\u5BFC\u51FA\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),h.abrupt("return",!1);case 14:case"end":return h.stop()}},Z,null,[[1,9]])}));return function(){return N.apply(this,arguments)}}(),se=function(){var Z=(0,A.useRef)(),I=(0,A.useState)(!1),W=t()(I,2),h=W[0],H=W[1],i=(0,A.useState)(!1),U=t()(i,2),be=U[0],ie=U[1],ne=(0,A.useRef)(),ge=(0,A.useState)(),me=t()(ge,2),ce=me[0],re=me[1],he=(0,A.useState)([]),pe=t()(he,2),X=pe[0],le=pe[1],ve=(0,A.useState)([]),fe=t()(ve,2),_e=fe[0],Te=fe[1],je=(0,A.useState)([]),Ee=t()(je,2),oe=Ee[0],Pe=Ee[1],ue=(0,p.useAccess)(),Me=(0,p.useIntl)();(0,A.useEffect)(function(){(0,ee.Hr)("sys_job_group").then(function(S){Te(S)}),(0,ee.pX)("sys_normal_disable").then(function(S){Pe(S)})},[]);var De=[{title:(0,r.jsx)(p.FormattedMessage,{id:"monitor.job.job_id",defaultMessage:"\u4EFB\u52A1\u7F16\u53F7"}),dataIndex:"jobId",valueType:"text",hideInSearch:!0},{title:(0,r.jsx)(p.FormattedMessage,{id:"monitor.job.job_name",defaultMessage:"\u4EFB\u52A1\u540D\u79F0"}),dataIndex:"jobName",valueType:"text",render:function(x,b){return(0,r.jsx)("a",{onClick:function(){ie(!0),re(b)},children:x})}},{title:(0,r.jsx)(p.FormattedMessage,{id:"monitor.job.job_group",defaultMessage:"\u4EFB\u52A1\u7EC4\u540D"}),dataIndex:"jobGroup",valueType:"text",valueEnum:_e,render:function(x,b){return(0,r.jsx)(w.Z,{options:_e,value:b.jobGroup})}},{title:(0,r.jsx)(p.FormattedMessage,{id:"monitor.job.invoke_target",defaultMessage:"\u8C03\u7528\u76EE\u6807\u5B57\u7B26\u4E32"}),dataIndex:"invokeTarget",valueType:"textarea"},{title:(0,r.jsx)(p.FormattedMessage,{id:"monitor.job.cron_expression",defaultMessage:"cron\u6267\u884C\u8868\u8FBE\u5F0F"}),dataIndex:"cronExpression",valueType:"text"},{title:(0,r.jsx)(p.FormattedMessage,{id:"monitor.job.status",defaultMessage:"\u72B6\u6001"}),dataIndex:"status",valueType:"select",valueEnum:oe,render:function(x,b){return(0,r.jsx)(w.Z,{enums:oe,value:b.status})}},{title:(0,r.jsx)(p.FormattedMessage,{id:"pages.searchTable.titleOption",defaultMessage:"\u64CD\u4F5C"}),dataIndex:"option",width:"220px",valueType:"option",render:function(x,b){return[(0,r.jsx)(o.ZP,{type:"link",size:"small",icon:(0,r.jsx)(_.Z,{}),hidden:!ue.hasPerms("monitor:job:edit"),onClick:function(){H(!0),re(b)},children:"\u7F16\u8F91"},"edit"),(0,r.jsx)(o.ZP,{type:"link",size:"small",danger:!0,icon:(0,r.jsx)(D.Z,{}),hidden:!ue.hasPerms("monitor:job:remove"),onClick:u()(n()().mark(function v(){return n()().wrap(function(B){for(;;)switch(B.prev=B.next){case 0:j.Z.confirm({title:"\u5220\u9664",content:"\u786E\u5B9A\u5220\u9664\u8BE5\u9879\u5417\uFF1F",okText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88",onOk:function(){var Y=u()(n()().mark(function k(){var te;return n()().wrap(function(J){for(;;)switch(J.prev=J.next){case 0:return J.next=2,O(b);case 2:te=J.sent,te&&ne.current&&ne.current.reload();case 4:case"end":return J.stop()}},k)}));function $(){return Y.apply(this,arguments)}return $}()});case 1:case"end":return B.stop()}},v)})),children:"\u5220\u9664"},"batchRemove"),(0,r.jsx)(R.Z,{menu:{items:[{label:"\u6267\u884C\u4E00\u6B21",key:"runOnce"},{label:"\u8BE6\u7EC6",key:"detail"},{label:"\u5386\u53F2",key:"log"}],onClick:function(Q){var B=Q.key;B==="runOnce"?j.Z.confirm({title:"\u8B66\u544A",content:"\u786E\u8BA4\u8981\u7ACB\u5373\u6267\u884C\u4E00\u6B21\uFF1F",okText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88",onOk:function(){var Y=u()(n()().mark(function k(){var te;return n()().wrap(function(J){for(;;)switch(J.prev=J.next){case 0:return J.next=2,(0,C.uu)(b.jobId,b.jobGroup);case 2:te=J.sent,te&&d.ZP.success("\u6267\u884C\u6210\u529F");case 4:case"end":return J.stop()}},k)}));function $(){return Y.apply(this,arguments)}return $}()}):B==="detail"?(ie(!0),re(b)):B==="log"&&p.history.push("/monitor/job-log/index/".concat(b.jobId))}},children:(0,r.jsx)("a",{className:"ant-dropdown-link",onClick:function(Q){return Q.preventDefault()},children:(0,r.jsxs)(T.Z,{children:[(0,r.jsx)(s.Z,{}),"\u66F4\u591A"]})})},"more")]}}];return(0,r.jsxs)(m._z,{children:[(0,r.jsx)("div",{style:{width:"100%",float:"right"},children:(0,r.jsx)(P.Z,{headerTitle:Me.formatMessage({id:"pages.searchTable.title",defaultMessage:"\u4FE1\u606F"}),actionRef:ne,formRef:Z,rowKey:"jobId",search:{labelWidth:120},toolBarRender:function(){return[(0,r.jsxs)(o.ZP,{type:"primary",hidden:!ue.hasPerms("monitor:job:add"),onClick:u()(n()().mark(function x(){return n()().wrap(function(v){for(;;)switch(v.prev=v.next){case 0:re(void 0),H(!0);case 2:case"end":return v.stop()}},x)})),children:[(0,r.jsx)(c.Z,{})," ",(0,r.jsx)(p.FormattedMessage,{id:"pages.searchTable.new",defaultMessage:"\u65B0\u5EFA"})]},"add"),(0,r.jsxs)(o.ZP,{type:"primary",danger:!0,hidden:(X==null?void 0:X.length)===0||!ue.hasPerms("monitor:job:remove"),onClick:u()(n()().mark(function x(){return n()().wrap(function(v){for(;;)switch(v.prev=v.next){case 0:j.Z.confirm({title:"\u662F\u5426\u786E\u8BA4\u5220\u9664\u6240\u9009\u6570\u636E\u9879?",icon:(0,r.jsx)(ae.Z,{}),content:"\u8BF7\u8C28\u614E\u64CD\u4F5C",onOk:function(){return u()(n()().mark(function B(){var Y,$,k;return n()().wrap(function(G){for(;;)switch(G.prev=G.next){case 0:return G.next=2,M(X);case 2:Y=G.sent,Y&&(le([]),($=ne.current)===null||$===void 0||(k=$.reloadAndRest)===null||k===void 0||k.call($));case 4:case"end":return G.stop()}},B)}))()},onCancel:function(){}});case 1:case"end":return v.stop()}},x)})),children:[(0,r.jsx)(D.Z,{}),(0,r.jsx)(p.FormattedMessage,{id:"pages.searchTable.delete",defaultMessage:"\u5220\u9664"})]},"remove"),(0,r.jsxs)(o.ZP,{type:"primary",hidden:!ue.hasPerms("monitor:job:export"),onClick:u()(n()().mark(function x(){return n()().wrap(function(v){for(;;)switch(v.prev=v.next){case 0:de();case 1:case"end":return v.stop()}},x)})),children:[(0,r.jsx)(c.Z,{}),(0,r.jsx)(p.FormattedMessage,{id:"pages.searchTable.export",defaultMessage:"\u5BFC\u51FA"})]},"export")]},request:function(x){return(0,C.Go)(F()({},x)).then(function(b){var v={data:b.rows,total:b.total,success:!0};return v})},columns:De,rowSelection:{onChange:function(x,b){le(b)}}},"jobList")}),(X==null?void 0:X.length)>0&&(0,r.jsx)(l.S,{extra:(0,r.jsxs)("div",{children:[(0,r.jsx)(p.FormattedMessage,{id:"pages.searchTable.chosen",defaultMessage:"\u5DF2\u9009\u62E9"}),(0,r.jsx)("a",{style:{fontWeight:600},children:X.length}),(0,r.jsx)(p.FormattedMessage,{id:"pages.searchTable.item",defaultMessage:"\u9879"})]}),children:(0,r.jsx)(o.ZP,{danger:!0,hidden:!ue.hasPerms("monitor:job:del"),onClick:u()(n()().mark(function S(){return n()().wrap(function(b){for(;;)switch(b.prev=b.next){case 0:j.Z.confirm({title:"\u5220\u9664",content:"\u786E\u5B9A\u5220\u9664\u8BE5\u9879\u5417\uFF1F",okText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88",onOk:function(){var v=u()(n()().mark(function B(){var Y,$,k;return n()().wrap(function(G){for(;;)switch(G.prev=G.next){case 0:return G.next=2,M(X);case 2:Y=G.sent,Y&&(le([]),($=ne.current)===null||$===void 0||(k=$.reloadAndRest)===null||k===void 0||k.call($));case 4:case"end":return G.stop()}},B)}));function Q(){return v.apply(this,arguments)}return Q}()});case 1:case"end":return b.stop()}},S)})),children:(0,r.jsx)(p.FormattedMessage,{id:"pages.searchTable.batchDeletion",defaultMessage:"\u6279\u91CF\u5220\u9664"})},"remove")}),(0,r.jsx)(E.default,{onSubmit:function(){var S=u()(n()().mark(function x(b){var v;return n()().wrap(function(B){for(;;)switch(B.prev=B.next){case 0:if(v=!1,!b.jobId){B.next=7;break}return B.next=4,z(F()({},b));case 4:v=B.sent,B.next=10;break;case 7:return B.next=9,V(F()({},b));case 9:v=B.sent;case 10:v&&(H(!1),re(void 0),ne.current&&ne.current.reload());case 11:case"end":return B.stop()}},x)}));return function(x){return S.apply(this,arguments)}}(),onCancel:function(){H(!1),re(void 0)},open:h,values:ce||{},jobGroupOptions:_e||{},statusOptions:oe}),(0,r.jsx)(g.default,{onCancel:function(){ie(!1),re(void 0)},open:be,values:ce||{},statusOptions:oe})]})};y.default=se},91646:function(q,y,e){e.d(y,{Go:function(){return a},Q$:function(){return m},Y$:function(){return p},Zn:function(){return A},eX:function(){return o},gK:function(){return T},uu:function(){return P}});var K=e(15009),t=e.n(K),L=e(99289),n=e.n(L),f=e(76772),F=e(30964);function a(_){return u.apply(this,arguments)}function u(){return u=n()(t()().mark(function _(D){return t()().wrap(function(c){for(;;)switch(c.prev=c.next){case 0:return c.abrupt("return",(0,f.request)("/api/monitor/job/list",{method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"},params:D}));case 1:case"end":return c.stop()}},_)})),u.apply(this,arguments)}function A(_){return(0,f.request)("/api/monitor/job/".concat(_),{method:"GET"})}function p(_){return R.apply(this,arguments)}function R(){return R=n()(t()().mark(function _(D){return t()().wrap(function(c){for(;;)switch(c.prev=c.next){case 0:return c.abrupt("return",(0,f.request)("/api/monitor/job",{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},data:D}));case 1:case"end":return c.stop()}},_)})),R.apply(this,arguments)}function T(_){return d.apply(this,arguments)}function d(){return d=n()(t()().mark(function _(D){return t()().wrap(function(c){for(;;)switch(c.prev=c.next){case 0:return c.abrupt("return",(0,f.request)("/api/monitor/job",{method:"PUT",headers:{"Content-Type":"application/json;charset=UTF-8"},data:D}));case 1:case"end":return c.stop()}},_)})),d.apply(this,arguments)}function o(_){return j.apply(this,arguments)}function j(){return j=n()(t()().mark(function _(D){return t()().wrap(function(c){for(;;)switch(c.prev=c.next){case 0:return c.abrupt("return",(0,f.request)("/api/monitor/job/".concat(D),{method:"DELETE"}));case 1:case"end":return c.stop()}},_)})),j.apply(this,arguments)}function m(_){return(0,F.su)("/api/monitor/job/export",{params:_},"job_".concat(new Date().getTime(),".xlsx"))}function P(_,D){return l.apply(this,arguments)}function l(){return l=n()(t()().mark(function _(D,s){var c;return t()().wrap(function(C){for(;;)switch(C.prev=C.next){case 0:return c={jobId:D,jobGroup:s},C.abrupt("return",(0,f.request)("/api/monitor/job/run",{method:"PUT",data:c}));case 2:case"end":return C.stop()}},_)})),l.apply(this,arguments)}},92982:function(q,y,e){e.d(y,{Hr:function(){return j},QK:function(){return C},Vd:function(){return T},a7:function(){return _},jK:function(){return p},n2:function(){return ae},oH:function(){return P},pX:function(){return d},sF:function(){return s}});var K=e(15009),t=e.n(K),L=e(97857),n=e.n(L),f=e(99289),F=e.n(f),a=e(76772),u=e(33867),A=e(30964);function p(E){return R.apply(this,arguments)}function R(){return R=F()(t()().mark(function E(g){return t()().wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",(0,a.request)("/api/system/dict/type/list",{params:n()({},g),method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return r.stop()}},E)})),R.apply(this,arguments)}function T(E){return(0,a.request)("/api/system/dict/type/".concat(E),{method:"GET"})}function d(E,g){return o.apply(this,arguments)}function o(){return o=F()(t()().mark(function E(g,w){var r,V;return t()().wrap(function(M){for(;;)switch(M.prev=M.next){case 0:return M.next=2,(0,a.request)("/api/system/dict/data/type/".concat(g),{method:"GET"});case 2:if(r=M.sent,r.code!==u.iK.SUCCESS){M.next=9;break}return V={},r.data.forEach(function(O){V[O.dictValue]={text:O.dictLabel,label:O.dictLabel,value:w?Number(O.dictValue):O.dictValue,key:O.dictCode,listClass:O.listClass,status:O.listClass}}),M.abrupt("return",V);case 9:return M.abrupt("return",{});case 10:case"end":return M.stop()}},E)})),o.apply(this,arguments)}function j(E,g){return m.apply(this,arguments)}function m(){return m=F()(t()().mark(function E(g,w){var r,V;return t()().wrap(function(M){for(;;)switch(M.prev=M.next){case 0:return M.next=2,(0,a.request)("/api/system/dict/data/type/".concat(g),{method:"GET"});case 2:if(r=M.sent,r.code!==200){M.next=6;break}return V=r.data.map(function(O){return{text:O.dictLabel,label:O.dictLabel,value:w?Number(O.dictValue):O.dictValue,key:O.dictCode,listClass:O.listClass,status:O.listClass}}),M.abrupt("return",V);case 6:return M.abrupt("return",[]);case 7:case"end":return M.stop()}},E)})),m.apply(this,arguments)}function P(E){return l.apply(this,arguments)}function l(){return l=F()(t()().mark(function E(g){return t()().wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",(0,a.request)("/api/system/dict/type",{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},data:g}));case 1:case"end":return r.stop()}},E)})),l.apply(this,arguments)}function _(E){return D.apply(this,arguments)}function D(){return D=F()(t()().mark(function E(g){return t()().wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",(0,a.request)("/api/system/dict/type",{method:"PUT",headers:{"Content-Type":"application/json;charset=UTF-8"},data:g}));case 1:case"end":return r.stop()}},E)})),D.apply(this,arguments)}function s(E){return c.apply(this,arguments)}function c(){return c=F()(t()().mark(function E(g){return t()().wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",(0,a.request)("/api/system/dict/type/".concat(g),{method:"DELETE"}));case 1:case"end":return r.stop()}},E)})),c.apply(this,arguments)}function ae(E){return(0,A.su)("/api/system/dict/type/export",{params:E},"dict_type_".concat(new Date().getTime(),".xlsx"))}function C(E){return ee.apply(this,arguments)}function ee(){return ee=F()(t()().mark(function E(g){return t()().wrap(function(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",(0,a.request)("/api/system/dict/type/optionselect",{params:n()({},g),method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return r.stop()}},E)})),ee.apply(this,arguments)}},30964:function(q,y,e){e.d(y,{p6:function(){return p},su:function(){return R}});var K=e(15009),t=e.n(K),L=e(97857),n=e.n(L),f=e(99289),F=e.n(f),a=e(76772),u={xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",zip:"application/zip"};function A(o,j){var m=document.createElement("a"),P=new Blob([o.data],{type:j}),l=new RegExp("filename=([^;]+\\.[^\\.;]+);*"),_=decodeURI(o.headers["content-disposition"]),D=l.exec(_),s=D?D[1]:"file";s=s.replace(/"/g,""),m.style.display="none",m.href=URL.createObjectURL(P),m.setAttribute("download",s),document.body.appendChild(m),m.click(),URL.revokeObjectURL(m.href),document.body.removeChild(m)}function p(o){(0,a.request)(o,{method:"GET",responseType:"blob",getResponse:!0}).then(function(j){A(j,u.zip)})}function R(o,j,m){return T.apply(this,arguments)}function T(){return T=F()(t()().mark(function o(j,m,P){return t()().wrap(function(_){for(;;)switch(_.prev=_.next){case 0:return _.abrupt("return",(0,a.request)(j,n()(n()({},m),{},{method:"POST",responseType:"blob"})).then(function(D){var s=document.createElement("a"),c=D;s.style.display="none",s.href=URL.createObjectURL(c),s.setAttribute("download",P),document.body.appendChild(s),s.click(),URL.revokeObjectURL(s.href),document.body.removeChild(s)}));case 1:case"end":return _.stop()}},o)})),T.apply(this,arguments)}function d(o){window.location.href="/api/common/download?fileName=".concat(encodeURI(o),"&delete=",!0)}},61314:function(q,y,e){e.d(y,{n:function(){return K}});function K(t,L,n){if(L!==void 0){var f=t[L];if(f)return f.text}return n||L}}}]);
