diff --git a/ruoyi-admin/src/main/resources/static/8394.9bdc6087.async.js b/ruoyi-admin/src/main/resources/static/8394.9bdc6087.async.js
new file mode 100644
index 0000000..34e2155
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/static/8394.9bdc6087.async.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[8394],{31199:function(J,W,e){var O=e(1413),t=e(91),U=e(67294),r=e(92179),y=e(85893),m=["fieldProps","min","proFieldProps","max"],v=function(c,f){var _=c.fieldProps,F=c.min,d=c.proFieldProps,M=c.max,l=(0,t.Z)(c,m);return(0,y.jsx)(r.Z,(0,O.Z)({valueType:"digit",fieldProps:(0,O.Z)({min:F,max:M},_),ref:f,filedConfig:{defaultProps:{width:"100%"}},proFieldProps:d},l))},h=U.forwardRef(v);W.Z=h},86615:function(J,W,e){var O=e(1413),t=e(91),U=e(22270),r=e(78045),y=e(67294),m=e(90789),v=e(92179),h=e(85893),E=["fieldProps","options","radioType","layout","proFieldProps","valueEnum"],c=y.forwardRef(function(d,M){var l=d.fieldProps,o=d.options,g=d.radioType,n=d.layout,i=d.proFieldProps,p=d.valueEnum,a=(0,t.Z)(d,E);return(0,h.jsx)(v.Z,(0,O.Z)((0,O.Z)({valueType:g==="button"?"radioButton":"radio",ref:M,valueEnum:(0,U.h)(p,void 0)},a),{},{fieldProps:(0,O.Z)({options:o,layout:n},l),proFieldProps:i,filedConfig:{customLightMode:!0}}))}),f=y.forwardRef(function(d,M){var l=d.fieldProps,o=d.children;return(0,h.jsx)(r.ZP,(0,O.Z)((0,O.Z)({},l),{},{ref:M,children:o}))}),_=(0,m.G)(f,{valuePropName:"checked",ignoreWidth:!0}),F=_;F.Group=c,F.Button=r.ZP.Button,F.displayName="ProFormComponent",W.Z=F},64317:function(J,W,e){var O=e(1413),t=e(91),U=e(22270),r=e(67294),y=e(66758),m=e(92179),v=e(85893),h=["fieldProps","children","params","proFieldProps","mode","valueEnum","request","showSearch","options"],E=["fieldProps","children","params","proFieldProps","mode","valueEnum","request","options"],c=function(l,o){var g=l.fieldProps,n=l.children,i=l.params,p=l.proFieldProps,a=l.mode,z=l.valueEnum,S=l.request,C=l.showSearch,D=l.options,s=(0,t.Z)(l,h),b=(0,r.useContext)(y.Z);return(0,v.jsx)(m.Z,(0,O.Z)((0,O.Z)({valueEnum:(0,U.h)(z),request:S,params:i,valueType:"select",filedConfig:{customLightMode:!0},fieldProps:(0,O.Z)({options:D,mode:a,showSearch:C,getPopupContainer:b.getPopupContainer},g),ref:o,proFieldProps:p},s),{},{children:n}))},f=r.forwardRef(function(M,l){var o=M.fieldProps,g=M.children,n=M.params,i=M.proFieldProps,p=M.mode,a=M.valueEnum,z=M.request,S=M.options,C=(0,t.Z)(M,E),D=(0,O.Z)({options:S,mode:p||"multiple",labelInValue:!0,showSearch:!0,suffixIcon:null,autoClearSearchValue:!0,optionLabelProp:"label"},o),s=(0,r.useContext)(y.Z);return(0,v.jsx)(m.Z,(0,O.Z)((0,O.Z)({valueEnum:(0,U.h)(a),request:z,params:n,valueType:"select",filedConfig:{customLightMode:!0},fieldProps:(0,O.Z)({getPopupContainer:s.getPopupContainer},D),ref:l,proFieldProps:i},C),{},{children:g}))}),_=r.forwardRef(c),F=f,d=_;d.SearchSelect=F,d.displayName="ProFormComponent",W.Z=d},90672:function(J,W,e){var O=e(1413),t=e(91),U=e(67294),r=e(92179),y=e(85893),m=["fieldProps","proFieldProps"],v=function(E,c){var f=E.fieldProps,_=E.proFieldProps,F=(0,t.Z)(E,m);return(0,y.jsx)(r.Z,(0,O.Z)({ref:c,valueType:"textarea",fieldProps:f,proFieldProps:_},F))};W.Z=U.forwardRef(v)},5966:function(J,W,e){var O=e(97685),t=e(1413),U=e(91),r=e(21770),y=e(99859),m=e(55241),v=e(98423),h=e(67294),E=e(92179),c=e(85893),f=["fieldProps","proFieldProps"],_=["fieldProps","proFieldProps"],F="text",d=function(n){var i=n.fieldProps,p=n.proFieldProps,a=(0,U.Z)(n,f);return(0,c.jsx)(E.Z,(0,t.Z)({valueType:F,fieldProps:i,filedConfig:{valueType:F},proFieldProps:p},a))},M=function(n){var i=(0,r.Z)(n.open||!1,{value:n.open,onChange:n.onOpenChange}),p=(0,O.Z)(i,2),a=p[0],z=p[1];return(0,c.jsx)(y.Z.Item,{shouldUpdate:!0,noStyle:!0,children:function(C){var D,s=C.getFieldValue(n.name||[]);return(0,c.jsx)(m.Z,(0,t.Z)((0,t.Z)({getPopupContainer:function(u){return u&&u.parentNode?u.parentNode:u},onOpenChange:function(u){return z(u)},content:(0,c.jsxs)("div",{style:{padding:"4px 0"},children:[(D=n.statusRender)===null||D===void 0?void 0:D.call(n,s),n.strengthText?(0,c.jsx)("div",{style:{marginTop:10},children:(0,c.jsx)("span",{children:n.strengthText})}):null]}),overlayStyle:{width:240},placement:"rightTop"},n.popoverProps),{},{open:a,children:n.children}))}})},l=function(n){var i=n.fieldProps,p=n.proFieldProps,a=(0,U.Z)(n,_),z=(0,h.useState)(!1),S=(0,O.Z)(z,2),C=S[0],D=S[1];return i!=null&&i.statusRender&&a.name?(0,c.jsx)(M,{name:a.name,statusRender:i==null?void 0:i.statusRender,popoverProps:i==null?void 0:i.popoverProps,strengthText:i==null?void 0:i.strengthText,open:C,onOpenChange:D,children:(0,c.jsx)("div",{children:(0,c.jsx)(E.Z,(0,t.Z)({valueType:"password",fieldProps:(0,t.Z)((0,t.Z)({},(0,v.Z)(i,["statusRender","popoverProps","strengthText"])),{},{onBlur:function(b){var u;i==null||(u=i.onBlur)===null||u===void 0||u.call(i,b),D(!1)},onClick:function(b){var u;i==null||(u=i.onClick)===null||u===void 0||u.call(i,b),D(!0)}}),proFieldProps:p,filedConfig:{valueType:F}},a))})}):(0,c.jsx)(E.Z,(0,t.Z)({valueType:"password",fieldProps:i,proFieldProps:p,filedConfig:{valueType:F}},a))},o=d;o.Password=l,o.displayName="ProFormComponent",W.Z=o},33867:function(J,W,e){e.d(W,{iK:function(){return O},zc:function(){return U}});var O=function(r){return r[r.SUCCESS=200]="SUCCESS",r[r.ERROR=-1]="ERROR",r[r.TIMEOUT=401]="TIMEOUT",r.TYPE="success",r}({}),t=function(r){return r.GET="GET",r.POST="POST",r.PUT="PUT",r.DELETE="DELETE",r}({}),U=function(r){return r.JSON="application/json;charset=UTF-8",r.FORM_URLENCODED="application/x-www-form-urlencoded;charset=UTF-8",r.FORM_DATA="multipart/form-data;charset=UTF-8",r}({})},20014:function(J,W,e){e.r(W);var O=e(15009),t=e.n(O),U=e(97857),r=e.n(U),y=e(99289),m=e.n(y),v=e(5574),h=e.n(v),E=e(67294),c=e(99859),f=e(17788),_=e(71230),F=e(15746),d=e(84567),M=e(20863),l=e(76772),o=e(97269),g=e(31199),n=e(5966),i=e(64317),p=e(85893),a=function(S){var C=c.Z.useForm(),D=h()(C,1),s=D[0],b=S.deptTree,u=S.deptCheckedKeys,j=(0,E.useState)("1"),P=h()(j,2),x=P[0],L=P[1],me=(0,E.useState)([]),oe=h()(me,2),ie=oe[0],ee=oe[1],ue=(0,E.useState)([]),Y=h()(ue,2),w=Y[0],K=Y[1],H=(0,E.useState)(!0),I=h()(H,2),ne=I[0],T=I[1];(0,E.useEffect)(function(){ee(u),s.resetFields(),s.setFieldsValue({roleId:S.values.roleId,roleName:S.values.roleName,roleKey:S.values.roleKey,dataScope:S.values.dataScope}),L(S.values.dataScope)},[S.values]);var $=(0,l.useIntl)(),ve=function(){s.submit()},de=function(){S.onCancel()},ge=function(){var V=m()(t()().mark(function k(Q){return t()().wrap(function(te){for(;;)switch(te.prev=te.next){case 0:S.onSubmit(r()(r()({},Q),{},{deptIds:ie}));case 1:case"end":return te.stop()}},k)}));return function(Q){return V.apply(this,arguments)}}(),fe=function V(k){var Q=[];return k.forEach(function(_e){Q.push(_e.key),_e.children&&(Q=Q.concat(V(_e.children)))}),Q},Ee=fe(b),ce=function(k){k.includes("deptExpand")?K(Ee):K([]),k.includes("deptNodeAll")?ee(Ee):ee([]),k.includes("deptCheckStrictly")?T(!1):T(!0)};return(0,p.jsx)(f.Z,{width:640,title:$.formatMessage({id:"system.user.auth.role",defaultMessage:"\u5206\u914D\u89D2\u8272"}),open:S.open,destroyOnClose:!0,forceRender:!0,onOk:ve,onCancel:de,children:(0,p.jsxs)(o.A,{form:s,grid:!0,layout:"horizontal",onFinish:ge,initialValues:{login_password:"",confirm_password:""},children:[(0,p.jsx)(g.Z,{name:"roleId",label:$.formatMessage({id:"system.role.role_id",defaultMessage:"\u89D2\u8272\u7F16\u53F7"}),colProps:{md:12,xl:12},placeholder:"\u8BF7\u8F93\u5165\u89D2\u8272\u7F16\u53F7",disabled:!0,hidden:!0,rules:[{required:!1,message:(0,p.jsx)(l.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u89D2\u8272\u7F16\u53F7\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u89D2\u8272\u7F16\u53F7\uFF01"})}]}),(0,p.jsx)(n.Z,{name:"roleName",label:$.formatMessage({id:"system.role.role_name",defaultMessage:"\u89D2\u8272\u540D\u79F0"}),disabled:!0,placeholder:"\u8BF7\u8F93\u5165\u89D2\u8272\u540D\u79F0",rules:[{required:!0,message:(0,p.jsx)(l.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u89D2\u8272\u540D\u79F0\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u89D2\u8272\u540D\u79F0\uFF01"})}]}),(0,p.jsx)(n.Z,{name:"roleKey",label:$.formatMessage({id:"system.role.role_key",defaultMessage:"\u6743\u9650\u5B57\u7B26\u4E32"}),disabled:!0,placeholder:"\u8BF7\u8F93\u5165\u89D2\u8272\u6743\u9650\u5B57\u7B26\u4E32",rules:[{required:!0,message:(0,p.jsx)(l.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u89D2\u8272\u6743\u9650\u5B57\u7B26\u4E32\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u89D2\u8272\u6743\u9650\u5B57\u7B26\u4E32\uFF01"})}]}),(0,p.jsx)(i.Z,{name:"dataScope",label:"\u6743\u9650\u8303\u56F4",initialValue:"1",placeholder:"\u8BF7\u8F93\u5165\u7528\u6237\u6027\u522B",valueEnum:{1:"\u5168\u90E8\u6570\u636E\u6743\u9650",2:"\u81EA\u5B9A\u6570\u636E\u6743\u9650",3:"\u672C\u90E8\u95E8\u6570\u636E\u6743\u9650",4:"\u672C\u90E8\u95E8\u53CA\u4EE5\u4E0B\u6570\u636E\u6743\u9650",5:"\u4EC5\u672C\u4EBA\u6570\u636E\u6743\u9650"},rules:[{required:!0}],fieldProps:{onChange:function(k){L(k)}}}),(0,p.jsx)(o.A.Item,{name:"deptIds",label:$.formatMessage({id:"system.role.auth",defaultMessage:"\u83DC\u5355\u6743\u9650"}),required:x==="1",hidden:x!=="1",children:(0,p.jsxs)(_.Z,{gutter:[16,16],children:[(0,p.jsx)(F.Z,{md:24,children:(0,p.jsx)(d.Z.Group,{options:[{label:"\u5C55\u5F00/\u6298\u53E0",value:"deptExpand"},{label:"\u5168\u9009/\u5168\u4E0D\u9009",value:"deptNodeAll"}],onChange:ce})}),(0,p.jsx)(F.Z,{md:24,children:(0,p.jsx)(M.Z,{checkable:!0,checkStrictly:ne,expandedKeys:w,treeData:b,checkedKeys:ie,defaultCheckedKeys:u,onCheck:function(k,Q){return console.log(k,Q),ee(ne?k.checked:{checked:k,halfChecked:Q.halfCheckedKeys})},onExpand:function(k){K(w.concat(k))}})})]})})]})})};W.default=a},177:function(J,W,e){e.r(W);var O=e(15009),t=e.n(O),U=e(97857),r=e.n(U),y=e(99289),m=e.n(y),v=e(5574),h=e.n(v),E=e(67294),c=e(97269),f=e(31199),_=e(5966),F=e(86615),d=e(90672),M=e(99859),l=e(17788),o=e(76772),g=e(20863),n=e(85893),i=function(a){var z=M.Z.useForm(),S=h()(z,1),C=S[0],D=a.menuTree,s=a.menuCheckedKeys,b=(0,E.useState)([]),u=h()(b,2),j=u[0],P=u[1],x=a.statusOptions;(0,E.useEffect)(function(){C.resetFields(),C.setFieldsValue({roleId:a.values.roleId,roleName:a.values.roleName,roleKey:a.values.roleKey,roleSort:a.values.roleSort,dataScope:a.values.dataScope,menuCheckStrictly:a.values.menuCheckStrictly,deptCheckStrictly:a.values.deptCheckStrictly,status:a.values.status,delFlag:a.values.delFlag,createBy:a.values.createBy,createTime:a.values.createTime,updateBy:a.values.updateBy,updateTime:a.values.updateTime,remark:a.values.remark})},[C,a]);var L=(0,o.useIntl)(),me=function(){C.submit()},oe=function(){a.onCancel()},ie=function(){var ee=m()(t()().mark(function ue(Y){return t()().wrap(function(K){for(;;)switch(K.prev=K.next){case 0:a.onSubmit(r()(r()({},Y),{},{menuIds:j}));case 1:case"end":return K.stop()}},ue)}));return function(Y){return ee.apply(this,arguments)}}();return(0,n.jsx)(l.Z,{width:640,title:L.formatMessage({id:"system.role.title",defaultMessage:"\u7F16\u8F91\u89D2\u8272\u4FE1\u606F"}),forceRender:!0,open:a.open,destroyOnClose:!0,onOk:me,onCancel:oe,children:(0,n.jsxs)(c.A,{form:C,grid:!0,layout:"horizontal",submitter:!1,onFinish:ie,children:[(0,n.jsx)(f.Z,{name:"roleId",label:L.formatMessage({id:"system.role.role_id",defaultMessage:"\u89D2\u8272\u7F16\u53F7"}),placeholder:"\u8BF7\u8F93\u5165\u89D2\u8272\u7F16\u53F7",disabled:!0,hidden:!0,rules:[{required:!1,message:(0,n.jsx)(o.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u89D2\u8272\u7F16\u53F7\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u89D2\u8272\u7F16\u53F7\uFF01"})}]}),(0,n.jsx)(_.Z,{name:"roleName",label:L.formatMessage({id:"system.role.role_name",defaultMessage:"\u89D2\u8272\u540D\u79F0"}),placeholder:"\u8BF7\u8F93\u5165\u89D2\u8272\u540D\u79F0",rules:[{required:!0,message:(0,n.jsx)(o.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u89D2\u8272\u540D\u79F0\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u89D2\u8272\u540D\u79F0\uFF01"})}]}),(0,n.jsx)(_.Z,{name:"roleKey",label:L.formatMessage({id:"system.role.role_key",defaultMessage:"\u6743\u9650\u5B57\u7B26\u4E32"}),placeholder:"\u8BF7\u8F93\u5165\u89D2\u8272\u6743\u9650\u5B57\u7B26\u4E32",rules:[{required:!0,message:(0,n.jsx)(o.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u89D2\u8272\u6743\u9650\u5B57\u7B26\u4E32\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u89D2\u8272\u6743\u9650\u5B57\u7B26\u4E32\uFF01"})}]}),(0,n.jsx)(f.Z,{name:"roleSort",label:L.formatMessage({id:"system.role.role_sort",defaultMessage:"\u663E\u793A\u987A\u5E8F"}),placeholder:"\u8BF7\u8F93\u5165\u663E\u793A\u987A\u5E8F",rules:[{required:!0,message:(0,n.jsx)(o.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u663E\u793A\u987A\u5E8F\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u663E\u793A\u987A\u5E8F\uFF01"})}],fieldProps:{defaultValue:1}}),(0,n.jsx)(F.Z.Group,{valueEnum:x,name:"status",label:L.formatMessage({id:"system.role.status",defaultMessage:"\u89D2\u8272\u72B6\u6001"}),placeholder:"\u8BF7\u8F93\u5165\u89D2\u8272\u72B6\u6001",rules:[{required:!0,message:(0,n.jsx)(o.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u89D2\u8272\u72B6\u6001\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u89D2\u8272\u72B6\u6001\uFF01"})}],fieldProps:{defaultValue:"0"}}),(0,n.jsx)(c.A.Item,{name:"menuIds",label:L.formatMessage({id:"system.role.auth",defaultMessage:"\u83DC\u5355\u6743\u9650"}),children:(0,n.jsx)(g.Z,{checkable:!0,multiple:!0,checkStrictly:!0,defaultExpandAll:!1,treeData:D,defaultCheckedKeys:s,onCheck:function(ue){return P(ue.checked)}})}),(0,n.jsx)(d.Z,{name:"remark",label:L.formatMessage({id:"system.role.remark",defaultMessage:"\u5907\u6CE8"}),placeholder:"\u8BF7\u8F93\u5165\u5907\u6CE8",rules:[{required:!1,message:(0,n.jsx)(o.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u5907\u6CE8\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u5907\u6CE8\uFF01"})}]})]})})};W.default=i},38394:function(J,W,e){e.r(W);var O=e(5574),t=e.n(O),U=e(15009),r=e.n(U),y=e(97857),m=e.n(y),v=e(99289),h=e.n(v),E=e(67294),c=e(76772),f=e(17788),_=e(2453),F=e(72269),d=e(83622),M=e(85418),l=e(78957),o=e(6110),g=e(65385),n=e(2236),i=e(86548),p=e(48689),a=e(80882),z=e(24969),S=e(11475),C=e(37563),D=e(177),s=e(92982),b=e(31981),u=e(52728),j=e(20014),P=e(85893),x=f.Z.confirm,L=function(){var Y=h()(r()().mark(function w(K){var H,I;return r()().wrap(function(T){for(;;)switch(T.prev=T.next){case 0:return H=_.ZP.loading("\u6B63\u5728\u6DFB\u52A0"),T.prev=1,T.next=4,(0,C._d)(m()({},K));case 4:return I=T.sent,H(),I.code===200?_.ZP.success("\u6DFB\u52A0\u6210\u529F"):_.ZP.error(I.msg),T.abrupt("return",!0);case 10:return T.prev=10,T.t0=T.catch(1),H(),_.ZP.error("\u6DFB\u52A0\u5931\u8D25\u8BF7\u91CD\u8BD5\uFF01"),T.abrupt("return",!1);case 15:case"end":return T.stop()}},w,null,[[1,10]])}));return function(K){return Y.apply(this,arguments)}}(),me=function(){var Y=h()(r()().mark(function w(K){var H,I;return r()().wrap(function(T){for(;;)switch(T.prev=T.next){case 0:return H=_.ZP.loading("\u6B63\u5728\u66F4\u65B0"),T.prev=1,T.next=4,(0,C.ul)(K);case 4:return I=T.sent,H(),I.code===200?_.ZP.success("\u66F4\u65B0\u6210\u529F"):_.ZP.error(I.msg),T.abrupt("return",!0);case 10:return T.prev=10,T.t0=T.catch(1),H(),_.ZP.error("\u914D\u7F6E\u5931\u8D25\u8BF7\u91CD\u8BD5\uFF01"),T.abrupt("return",!1);case 15:case"end":return T.stop()}},w,null,[[1,10]])}));return function(K){return Y.apply(this,arguments)}}(),oe=function(){var Y=h()(r()().mark(function w(K){var H,I;return r()().wrap(function(T){for(;;)switch(T.prev=T.next){case 0:if(H=_.ZP.loading("\u6B63\u5728\u5220\u9664"),K){T.next=3;break}return T.abrupt("return",!0);case 3:return T.prev=3,T.next=6,(0,C.l5)(K.map(function($){return $.roleId}).join(","));case 6:return I=T.sent,H(),I.code===200?_.ZP.success("\u5220\u9664\u6210\u529F\uFF0C\u5373\u5C06\u5237\u65B0"):_.ZP.error(I.msg),T.abrupt("return",!0);case 12:return T.prev=12,T.t0=T.catch(3),H(),_.ZP.error("\u5220\u9664\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),T.abrupt("return",!1);case 17:case"end":return T.stop()}},w,null,[[3,12]])}));return function(K){return Y.apply(this,arguments)}}(),ie=function(){var Y=h()(r()().mark(function w(K){var H,I,ne;return r()().wrap(function($){for(;;)switch($.prev=$.next){case 0:if(H=_.ZP.loading("\u6B63\u5728\u5220\u9664"),K){$.next=3;break}return $.abrupt("return",!0);case 3:return $.prev=3,I=[K.roleId],$.next=7,(0,C.l5)(I.join(","));case 7:return ne=$.sent,H(),ne.code===200?_.ZP.success("\u5220\u9664\u6210\u529F\uFF0C\u5373\u5C06\u5237\u65B0"):_.ZP.error(ne.msg),$.abrupt("return",!0);case 13:return $.prev=13,$.t0=$.catch(3),H(),_.ZP.error("\u5220\u9664\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),$.abrupt("return",!1);case 18:case"end":return $.stop()}},w,null,[[3,13]])}));return function(K){return Y.apply(this,arguments)}}(),ee=function(){var Y=h()(r()().mark(function w(){var K;return r()().wrap(function(I){for(;;)switch(I.prev=I.next){case 0:return K=_.ZP.loading("\u6B63\u5728\u5BFC\u51FA"),I.prev=1,I.next=4,(0,C.Lp)();case 4:return K(),_.ZP.success("\u5BFC\u51FA\u6210\u529F"),I.abrupt("return",!0);case 9:return I.prev=9,I.t0=I.catch(1),K(),_.ZP.error("\u5BFC\u51FA\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"),I.abrupt("return",!1);case 14:case"end":return I.stop()}},w,null,[[1,9]])}));return function(){return Y.apply(this,arguments)}}(),ue=function(){var w=_.ZP.useMessage(),K=t()(w,2),H=K[0],I=K[1],ne=(0,E.useRef)(),T=(0,E.useState)(!1),$=t()(T,2),ve=$[0],de=$[1],ge=(0,E.useState)(!1),fe=t()(ge,2),Ee=fe[0],ce=fe[1],V=(0,E.useRef)(),k=(0,E.useState)(),Q=t()(k,2),_e=Q[0],te=Q[1],Ae=(0,E.useState)([]),Me=t()(Ae,2),ae=Me[0],pe=Me[1],Re=(0,E.useState)(),Oe=t()(Re,2),be=Oe[0],De=Oe[1],Be=(0,E.useState)([]),Ce=t()(Be,2),ye=Ce[0],Te=Ce[1],We=(0,E.useState)([]),Fe=t()(We,2),je=Fe[0],Le=Fe[1],le=(0,c.useAccess)(),Ie=(0,c.useIntl)();(0,E.useEffect)(function(){(0,s.pX)("sys_normal_disable").then(function(X){Le(X)})},[]);var Ue=function(Z){var R=Z.status==="1"?"\u542F\u7528":"\u505C\u7528",B=Z.status==="0"?"1":"0";x({title:"\u786E\u8BA4\u8981".concat(R).concat(Z.roleName,"\u89D2\u8272\u5417\uFF1F"),onOk:function(){(0,C.sp)(Z.roleId,B).then(function(A){if(A.code===200){var N;H.open({type:"success",content:"\u66F4\u65B0\u6210\u529F\uFF01"}),(N=V.current)===null||N===void 0||N.reload()}else H.open({type:"error",content:"\u66F4\u65B0\u5931\u8D25\uFF01"})})}})},Ke=[{title:(0,P.jsx)(c.FormattedMessage,{id:"system.role.role_id",defaultMessage:"\u89D2\u8272\u7F16\u53F7"}),dataIndex:"roleId",valueType:"text"},{title:(0,P.jsx)(c.FormattedMessage,{id:"system.role.role_name",defaultMessage:"\u89D2\u8272\u540D\u79F0"}),dataIndex:"roleName",valueType:"text"},{title:(0,P.jsx)(c.FormattedMessage,{id:"system.role.role_key",defaultMessage:"\u89D2\u8272\u6743\u9650\u5B57\u7B26\u4E32"}),dataIndex:"roleKey",valueType:"text",hideInSearch:!0},{title:(0,P.jsx)(c.FormattedMessage,{id:"system.role.role_sort",defaultMessage:"\u663E\u793A\u987A\u5E8F"}),dataIndex:"roleSort",valueType:"text",hideInSearch:!0},{title:(0,P.jsx)(c.FormattedMessage,{id:"system.role.status",defaultMessage:"\u89D2\u8272\u72B6\u6001"}),dataIndex:"status",valueType:"select",valueEnum:je,render:function(Z,R){return(0,P.jsx)(F.Z,{checked:R.status==="0",checkedChildren:"\u6B63\u5E38",unCheckedChildren:"\u505C\u7528",defaultChecked:!0,onClick:function(){return Ue(R)}})}},{title:(0,P.jsx)(c.FormattedMessage,{id:"system.role.create_time",defaultMessage:"\u521B\u5EFA\u65F6\u95F4"}),dataIndex:"createTime",valueType:"dateRange",render:function(Z,R){return(0,P.jsxs)("span",{children:[R.createTime.toString()," "]})},search:{transform:function(Z){return{"params[beginTime]":Z[0],"params[endTime]":Z[1]}}}},{title:(0,P.jsx)(c.FormattedMessage,{id:"pages.searchTable.titleOption",defaultMessage:"\u64CD\u4F5C"}),dataIndex:"option",width:"220px",valueType:"option",render:function(Z,R){return[(0,P.jsx)(d.ZP,{type:"link",size:"small",icon:(0,P.jsx)(i.Z,{}),hidden:!le.hasPerms("system:role:edit"),onClick:function(){(0,C.mj)(R.roleId).then(function(G){if(G.code===200){var A=(0,b.lt)(G.menus);De(A),Te(G.checkedKeys.map(function(N){return"".concat(N)})),de(!0),te(R)}else _.ZP.warning(G.msg)})},children:"\u7F16\u8F91"},"edit"),(0,P.jsx)(d.ZP,{type:"link",size:"small",danger:!0,icon:(0,P.jsx)(p.Z,{}),hidden:!le.hasPerms("system:role:remove"),onClick:h()(r()().mark(function B(){return r()().wrap(function(A){for(;;)switch(A.prev=A.next){case 0:f.Z.confirm({title:"\u5220\u9664",content:"\u786E\u5B9A\u5220\u9664\u8BE5\u9879\u5417\uFF1F",okText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88",onOk:function(){var N=h()(r()().mark(function se(){var Pe;return r()().wrap(function(he){for(;;)switch(he.prev=he.next){case 0:return he.next=2,ie(R);case 2:Pe=he.sent,Pe&&V.current&&V.current.reload();case 4:case"end":return he.stop()}},se)}));function q(){return N.apply(this,arguments)}return q}()});case 1:case"end":return A.stop()}},B)})),children:"\u5220\u9664"},"batchRemove"),(0,P.jsx)(M.Z,{menu:{items:[{label:"\u6570\u636E\u6743\u9650",key:"datascope",disabled:!le.hasPerms("system:role:edit")},{label:"\u5206\u914D\u7528\u6237",key:"authUser",disabled:!le.hasPerms("system:role:edit")}],onClick:function(G){var A=G.key;A==="datascope"?((0,C.cY)(R.roleId).then(function(N){N.code===200&&(te(N.data),ce(!0))}),(0,C.Vl)(R.roleId).then(function(N){N.code===200&&(De((0,b.lt)(N.depts)),Te(N.checkedKeys.map(function(q){return"".concat(q)})))})):A==="authUser"&&c.history.push("/system/role-auth/user/".concat(R.roleId))}},children:(0,P.jsx)("a",{onClick:function(G){return G.preventDefault()},children:(0,P.jsxs)(l.Z,{children:[(0,P.jsx)(a.Z,{}),"\u66F4\u591A"]})})},"more")]}}];return(0,P.jsxs)(o._z,{children:[I,(0,P.jsx)("div",{style:{width:"100%",float:"right"},children:(0,P.jsx)(g.Z,{headerTitle:Ie.formatMessage({id:"pages.searchTable.title",defaultMessage:"\u4FE1\u606F"}),actionRef:V,formRef:ne,rowKey:"roleId",search:{labelWidth:120},toolBarRender:function(){return[(0,P.jsxs)(d.ZP,{type:"primary",hidden:!le.hasPerms("system:role:add"),onClick:h()(r()().mark(function Z(){return r()().wrap(function(B){for(;;)switch(B.prev=B.next){case 0:(0,u.Th)().then(function(G){if(G.code===200){var A=(0,b.lt)(G.data);De(A),Te([]),de(!0),te(void 0)}else _.ZP.warning(G.msg)});case 1:case"end":return B.stop()}},Z)})),children:[(0,P.jsx)(z.Z,{})," ",(0,P.jsx)(c.FormattedMessage,{id:"pages.searchTable.new",defaultMessage:"\u65B0\u5EFA"})]},"add"),(0,P.jsxs)(d.ZP,{type:"primary",danger:!0,hidden:(ae==null?void 0:ae.length)===0||!le.hasPerms("system:role:remove"),onClick:h()(r()().mark(function Z(){return r()().wrap(function(B){for(;;)switch(B.prev=B.next){case 0:f.Z.confirm({title:"\u662F\u5426\u786E\u8BA4\u5220\u9664\u6240\u9009\u6570\u636E\u9879?",icon:(0,P.jsx)(S.Z,{}),content:"\u8BF7\u8C28\u614E\u64CD\u4F5C",onOk:function(){return h()(r()().mark(function A(){var N,q,se;return r()().wrap(function(re){for(;;)switch(re.prev=re.next){case 0:return re.next=2,oe(ae);case 2:N=re.sent,N&&(pe([]),(q=V.current)===null||q===void 0||(se=q.reloadAndRest)===null||se===void 0||se.call(q));case 4:case"end":return re.stop()}},A)}))()},onCancel:function(){}});case 1:case"end":return B.stop()}},Z)})),children:[(0,P.jsx)(p.Z,{}),(0,P.jsx)(c.FormattedMessage,{id:"pages.searchTable.delete",defaultMessage:"\u5220\u9664"})]},"remove"),(0,P.jsxs)(d.ZP,{type:"primary",hidden:!le.hasPerms("system:role:export"),onClick:h()(r()().mark(function Z(){return r()().wrap(function(B){for(;;)switch(B.prev=B.next){case 0:ee();case 1:case"end":return B.stop()}},Z)})),children:[(0,P.jsx)(z.Z,{}),(0,P.jsx)(c.FormattedMessage,{id:"pages.searchTable.export",defaultMessage:"\u5BFC\u51FA"})]},"export")]},request:function(Z){return(0,C.JV)(m()({},Z)).then(function(R){var B={data:R.rows,total:R.total,success:!0};return B})},columns:Ke,rowSelection:{onChange:function(Z,R){pe(R)}}},"roleList")}),(ae==null?void 0:ae.length)>0&&(0,P.jsx)(n.S,{extra:(0,P.jsxs)("div",{children:[(0,P.jsx)(c.FormattedMessage,{id:"pages.searchTable.chosen",defaultMessage:"\u5DF2\u9009\u62E9"}),(0,P.jsx)("a",{style:{fontWeight:600},children:ae.length}),(0,P.jsx)(c.FormattedMessage,{id:"pages.searchTable.item",defaultMessage:"\u9879"})]}),children:(0,P.jsx)(d.ZP,{danger:!0,hidden:!le.hasPerms("system:role:del"),onClick:h()(r()().mark(function X(){return r()().wrap(function(R){for(;;)switch(R.prev=R.next){case 0:f.Z.confirm({title:"\u5220\u9664",content:"\u786E\u5B9A\u5220\u9664\u8BE5\u9879\u5417\uFF1F",okText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88",onOk:function(){var B=h()(r()().mark(function A(){var N,q,se;return r()().wrap(function(re){for(;;)switch(re.prev=re.next){case 0:return re.next=2,oe(ae);case 2:N=re.sent,N&&(pe([]),(q=V.current)===null||q===void 0||(se=q.reloadAndRest)===null||se===void 0||se.call(q));case 4:case"end":return re.stop()}},A)}));function G(){return B.apply(this,arguments)}return G}()});case 1:case"end":return R.stop()}},X)})),children:(0,P.jsx)(c.FormattedMessage,{id:"pages.searchTable.batchDeletion",defaultMessage:"\u6279\u91CF\u5220\u9664"})},"remove")}),(0,P.jsx)(D.default,{onSubmit:function(){var X=h()(r()().mark(function Z(R){var B;return r()().wrap(function(A){for(;;)switch(A.prev=A.next){case 0:if(B=!1,!R.roleId){A.next=7;break}return A.next=4,me(m()({},R));case 4:B=A.sent,A.next=10;break;case 7:return A.next=9,L(m()({},R));case 9:B=A.sent;case 10:B&&(de(!1),te(void 0),V.current&&V.current.reload());case 11:case"end":return A.stop()}},Z)}));return function(Z){return X.apply(this,arguments)}}(),onCancel:function(){de(!1),te(void 0)},open:ve,values:_e||{},menuTree:be||[],menuCheckedKeys:ye||[],statusOptions:je}),(0,P.jsx)(j.default,{onSubmit:function(){var X=h()(r()().mark(function Z(R){var B;return r()().wrap(function(A){for(;;)switch(A.prev=A.next){case 0:return A.next=2,(0,C.tm)(R);case 2:B=A.sent,B&&(ce(!1),pe([]),te(void 0),_.ZP.success("\u914D\u7F6E\u6210\u529F\u3002"));case 4:case"end":return A.stop()}},Z)}));return function(Z){return X.apply(this,arguments)}}(),onCancel:function(){ce(!1),pe([]),te(void 0)},open:Ee,values:_e||{},deptTree:be||[],deptCheckedKeys:ye||[]})]})};W.default=ue},92982:function(J,W,e){e.d(W,{Hr:function(){return M},QK:function(){return S},Vd:function(){return _},a7:function(){return n},jK:function(){return c},n2:function(){return z},oH:function(){return o},pX:function(){return F},sF:function(){return p}});var O=e(15009),t=e.n(O),U=e(97857),r=e.n(U),y=e(99289),m=e.n(y),v=e(76772),h=e(33867),E=e(30964);function c(D){return f.apply(this,arguments)}function f(){return f=m()(t()().mark(function D(s){return t()().wrap(function(u){for(;;)switch(u.prev=u.next){case 0:return u.abrupt("return",(0,v.request)("/api/system/dict/type/list",{params:r()({},s),method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return u.stop()}},D)})),f.apply(this,arguments)}function _(D){return(0,v.request)("/api/system/dict/type/".concat(D),{method:"GET"})}function F(D,s){return d.apply(this,arguments)}function d(){return d=m()(t()().mark(function D(s,b){var u,j;return t()().wrap(function(x){for(;;)switch(x.prev=x.next){case 0:return x.next=2,(0,v.request)("/api/system/dict/data/type/".concat(s),{method:"GET"});case 2:if(u=x.sent,u.code!==h.iK.SUCCESS){x.next=9;break}return j={},u.data.forEach(function(L){j[L.dictValue]={text:L.dictLabel,label:L.dictLabel,value:b?Number(L.dictValue):L.dictValue,key:L.dictCode,listClass:L.listClass,status:L.listClass}}),x.abrupt("return",j);case 9:return x.abrupt("return",{});case 10:case"end":return x.stop()}},D)})),d.apply(this,arguments)}function M(D,s){return l.apply(this,arguments)}function l(){return l=m()(t()().mark(function D(s,b){var u,j;return t()().wrap(function(x){for(;;)switch(x.prev=x.next){case 0:return x.next=2,(0,v.request)("/api/system/dict/data/type/".concat(s),{method:"GET"});case 2:if(u=x.sent,u.code!==200){x.next=6;break}return j=u.data.map(function(L){return{text:L.dictLabel,label:L.dictLabel,value:b?Number(L.dictValue):L.dictValue,key:L.dictCode,listClass:L.listClass,status:L.listClass}}),x.abrupt("return",j);case 6:return x.abrupt("return",[]);case 7:case"end":return x.stop()}},D)})),l.apply(this,arguments)}function o(D){return g.apply(this,arguments)}function g(){return g=m()(t()().mark(function D(s){return t()().wrap(function(u){for(;;)switch(u.prev=u.next){case 0:return u.abrupt("return",(0,v.request)("/api/system/dict/type",{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},data:s}));case 1:case"end":return u.stop()}},D)})),g.apply(this,arguments)}function n(D){return i.apply(this,arguments)}function i(){return i=m()(t()().mark(function D(s){return t()().wrap(function(u){for(;;)switch(u.prev=u.next){case 0:return u.abrupt("return",(0,v.request)("/api/system/dict/type",{method:"PUT",headers:{"Content-Type":"application/json;charset=UTF-8"},data:s}));case 1:case"end":return u.stop()}},D)})),i.apply(this,arguments)}function p(D){return a.apply(this,arguments)}function a(){return a=m()(t()().mark(function D(s){return t()().wrap(function(u){for(;;)switch(u.prev=u.next){case 0:return u.abrupt("return",(0,v.request)("/api/system/dict/type/".concat(s),{method:"DELETE"}));case 1:case"end":return u.stop()}},D)})),a.apply(this,arguments)}function z(D){return(0,E.su)("/api/system/dict/type/export",{params:D},"dict_type_".concat(new Date().getTime(),".xlsx"))}function S(D){return C.apply(this,arguments)}function C(){return C=m()(t()().mark(function D(s){return t()().wrap(function(u){for(;;)switch(u.prev=u.next){case 0:return u.abrupt("return",(0,v.request)("/api/system/dict/type/optionselect",{params:r()({},s),method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"}}));case 1:case"end":return u.stop()}},D)})),C.apply(this,arguments)}},52728:function(J,W,e){e.d(W,{Af:function(){return h},Th:function(){return o},_8:function(){return F},bL:function(){return f},n_:function(){return M}});var O=e(15009),t=e.n(O),U=e(97857),r=e.n(U),y=e(99289),m=e.n(y),v=e(76772);function h(g,n){return E.apply(this,arguments)}function E(){return E=m()(t()().mark(function g(n,i){return t()().wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.abrupt("return",(0,v.request)("/api/system/menu/list",r()({method:"GET",headers:{"Content-Type":"application/json;charset=UTF-8"},params:n},i||{})));case 1:case"end":return a.stop()}},g)})),E.apply(this,arguments)}function c(g,n){return request("/api/system/menu/".concat(g),_objectSpread({method:"GET"},n||{}))}function f(g,n){return _.apply(this,arguments)}function _(){return _=m()(t()().mark(function g(n,i){return t()().wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.abrupt("return",(0,v.request)("/api/system/menu",r()({method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},data:n},i||{})));case 1:case"end":return a.stop()}},g)})),_.apply(this,arguments)}function F(g,n){return d.apply(this,arguments)}function d(){return d=m()(t()().mark(function g(n,i){return t()().wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.abrupt("return",(0,v.request)("/api/system/menu",r()({method:"PUT",headers:{"Content-Type":"application/json;charset=UTF-8"},data:n},i||{})));case 1:case"end":return a.stop()}},g)})),d.apply(this,arguments)}function M(g,n){return l.apply(this,arguments)}function l(){return l=m()(t()().mark(function g(n,i){return t()().wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.abrupt("return",(0,v.request)("/api/system/menu/".concat(n),r()({method:"DELETE"},i||{})));case 1:case"end":return a.stop()}},g)})),l.apply(this,arguments)}function o(){return(0,v.request)("/api/system/menu/treeselect",{method:"GET"})}},37563:function(J,W,e){e.d(W,{CE:function(){return z},JV:function(){return h},LA:function(){return S},Lp:function(){return o},Vl:function(){return D},_d:function(){return f},cY:function(){return c},dY:function(){return C},iH:function(){return p},l5:function(){return M},mj:function(){return g},p7:function(){return a},sp:function(){return i},tm:function(){return n},ul:function(){return F}});var O=e(15009),t=e.n(O),U=e(99289),r=e.n(U),y=e(33867),m=e(76772),v=e(30964);function h(s){return E.apply(this,arguments)}function E(){return E=r()(t()().mark(function s(b){return t()().wrap(function(j){for(;;)switch(j.prev=j.next){case 0:return j.abrupt("return",(0,m.request)("/api/system/role/list",{method:"GET",headers:{"Content-Type":y.zc.FORM_URLENCODED},params:b}));case 1:case"end":return j.stop()}},s)})),E.apply(this,arguments)}function c(s){return(0,m.request)("/api/system/role/".concat(s),{method:"GET"})}function f(s){return _.apply(this,arguments)}function _(){return _=r()(t()().mark(function s(b){return t()().wrap(function(j){for(;;)switch(j.prev=j.next){case 0:return j.abrupt("return",(0,m.request)("/api/system/role",{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},data:b}));case 1:case"end":return j.stop()}},s)})),_.apply(this,arguments)}function F(s){return d.apply(this,arguments)}function d(){return d=r()(t()().mark(function s(b){return t()().wrap(function(j){for(;;)switch(j.prev=j.next){case 0:return j.abrupt("return",(0,m.request)("/api/system/role",{method:"PUT",headers:{"Content-Type":"application/json;charset=UTF-8"},data:b}));case 1:case"end":return j.stop()}},s)})),d.apply(this,arguments)}function M(s){return l.apply(this,arguments)}function l(){return l=r()(t()().mark(function s(b){return t()().wrap(function(j){for(;;)switch(j.prev=j.next){case 0:return j.abrupt("return",(0,m.request)("/api/system/role/".concat(b),{method:"DELETE"}));case 1:case"end":return j.stop()}},s)})),l.apply(this,arguments)}function o(s){return(0,v.su)("/api/system/role/export",{params:s},"role_".concat(new Date().getTime(),".xlsx"))}function g(s){return(0,m.request)("/api/system/menu/roleMenuTreeselect/".concat(s),{method:"get"})}function n(s){return(0,m.request)("/api/system/role/dataScope",{method:"put",data:s})}function i(s,b){var u={roleId:s,status:b};return(0,m.request)("/api/system/role/changeStatus",{method:"put",data:u})}function p(s){return(0,m.request)("/api/system/role/authUser/allocatedList",{method:"get",params:s})}function a(s){return(0,m.request)("/api/system/role/authUser/unallocatedList",{method:"get",params:s})}function z(s){return(0,m.request)("/api/system/role/authUser/cancel",{method:"put",data:s})}function S(s){return(0,m.request)("/api/system/role/authUser/cancelAll",{method:"put",params:s})}function C(s){return(0,m.request)("/api/system/role/authUser/selectAll",{method:"put",params:s,headers:{"Content-Type":y.zc.FORM_URLENCODED}})}function D(s){return(0,m.request)("/api/system/role/deptTree/"+s,{method:"get"})}},30964:function(J,W,e){e.d(W,{p6:function(){return c},su:function(){return f}});var O=e(15009),t=e.n(O),U=e(97857),r=e.n(U),y=e(99289),m=e.n(y),v=e(76772),h={xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",zip:"application/zip"};function E(d,M){var l=document.createElement("a"),o=new Blob([d.data],{type:M}),g=new RegExp("filename=([^;]+\\.[^\\.;]+);*"),n=decodeURI(d.headers["content-disposition"]),i=g.exec(n),p=i?i[1]:"file";p=p.replace(/"/g,""),l.style.display="none",l.href=URL.createObjectURL(o),l.setAttribute("download",p),document.body.appendChild(l),l.click(),URL.revokeObjectURL(l.href),document.body.removeChild(l)}function c(d){(0,v.request)(d,{method:"GET",responseType:"blob",getResponse:!0}).then(function(M){E(M,h.zip)})}function f(d,M,l){return _.apply(this,arguments)}function _(){return _=m()(t()().mark(function d(M,l,o){return t()().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",(0,v.request)(M,r()(r()({},l),{},{method:"POST",responseType:"blob"})).then(function(i){var p=document.createElement("a"),a=i;p.style.display="none",p.href=URL.createObjectURL(a),p.setAttribute("download",o),document.body.appendChild(p),p.click(),URL.revokeObjectURL(p.href),document.body.removeChild(p)}));case 1:case"end":return n.stop()}},d)})),_.apply(this,arguments)}function F(d){window.location.href="/api/common/download?fileName=".concat(encodeURI(d),"&delete=",!0)}},31981:function(J,W,e){e.d(W,{C2:function(){return t},lt:function(){return r}});var O=e(87735);function t(y,m,v,h,E,c){var f={id:m||"id",name:v||"name",parentId:h||"parentId",parentName:E||"parentName",childrenList:c||"children"},_=[],F=[],d=[];y.forEach(function(l){var o=l,g=o[f.parentId];_[g]||(_[g]=[]),o.key=o[f.id],o.title=o[f.name],o.value=o[f.id],o[f.childrenList]=null,F[o[f.id]]=o,_[g].push(o)}),y.forEach(function(l){var o=l,g=o[f.parentId];F[g]||(o[f.parentName]="",d.push(o))});function M(l){var o=l;_[o[f.id]]&&(o[f.childrenList]||(o[f.childrenList]=[]),o[f.childrenList]=_[o[f.id]]),o[f.childrenList]&&o[f.childrenList].forEach(function(g){var n=g;n[f.parentName]=o[f.name],M(n)})}return d.forEach(function(l){M(l)}),d}var U=function(){return parse(window.location.href.split("?")[1])};function r(y){var m=y.map(function(v){var h={id:v.id,title:v.label,key:"".concat(v.id),value:v.id};return v.children&&(h.children=r(v.children)),h});return m}}}]);
