"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[8394],{31199:function(J,W,e){var O=e(1413),t=e(45987),U=e(67294),r=e(43495),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(45987),U=e(22270),r=e(78045),y=e(67294),m=e(90789),v=e(43495),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(45987),U=e(22270),r=e(67294),y=e(66758),m=e(43495),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(45987),U=e(67294),r=e(43495),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(45987),r=e(21770),y=e(99859),m=e(55241),v=e(98423),h=e(67294),E=e(43495),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}}}]);
