"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[14],{31199:function(ie,$,e){var h=e(1413),v=e(91),s=e(67294),j=e(92179),H=e(85893),V=["fieldProps","min","proFieldProps","max"],z=function(i,G){var J=i.fieldProps,S=i.min,W=i.proFieldProps,g=i.max,_=(0,v.Z)(i,V);return(0,H.jsx)(j.Z,(0,h.Z)({valueType:"digit",fieldProps:(0,h.Z)({min:S,max:g},J),ref:G,filedConfig:{defaultProps:{width:"100%"}},proFieldProps:W},_))},F=s.forwardRef(z);$.Z=F},64317:function(ie,$,e){var h=e(1413),v=e(91),s=e(22270),j=e(67294),H=e(66758),V=e(92179),z=e(85893),F=["fieldProps","children","params","proFieldProps","mode","valueEnum","request","showSearch","options"],K=["fieldProps","children","params","proFieldProps","mode","valueEnum","request","options"],i=function(_,B){var w=_.fieldProps,a=_.children,n=_.params,o=_.proFieldProps,D=_.mode,Z=_.valueEnum,m=_.request,I=_.showSearch,x=_.options,C=(0,v.Z)(_,F),A=(0,j.useContext)(H.Z);return(0,z.jsx)(V.Z,(0,h.Z)((0,h.Z)({valueEnum:(0,s.h)(Z),request:m,params:n,valueType:"select",filedConfig:{customLightMode:!0},fieldProps:(0,h.Z)({options:x,mode:D,showSearch:I,getPopupContainer:A.getPopupContainer},w),ref:B,proFieldProps:o},C),{},{children:a}))},G=j.forwardRef(function(g,_){var B=g.fieldProps,w=g.children,a=g.params,n=g.proFieldProps,o=g.mode,D=g.valueEnum,Z=g.request,m=g.options,I=(0,v.Z)(g,K),x=(0,h.Z)({options:m,mode:o||"multiple",labelInValue:!0,showSearch:!0,suffixIcon:null,autoClearSearchValue:!0,optionLabelProp:"label"},B),C=(0,j.useContext)(H.Z);return(0,z.jsx)(V.Z,(0,h.Z)((0,h.Z)({valueEnum:(0,s.h)(D),request:Z,params:a,valueType:"select",filedConfig:{customLightMode:!0},fieldProps:(0,h.Z)({getPopupContainer:C.getPopupContainer},x),ref:_,proFieldProps:n},I),{},{children:w}))}),J=j.forwardRef(i),S=G,W=J;W.SearchSelect=S,W.displayName="ProFormComponent",$.Z=W},5966:function(ie,$,e){var h=e(97685),v=e(1413),s=e(91),j=e(21770),H=e(99859),V=e(55241),z=e(98423),F=e(67294),K=e(92179),i=e(85893),G=["fieldProps","proFieldProps"],J=["fieldProps","proFieldProps"],S="text",W=function(a){var n=a.fieldProps,o=a.proFieldProps,D=(0,s.Z)(a,G);return(0,i.jsx)(K.Z,(0,v.Z)({valueType:S,fieldProps:n,filedConfig:{valueType:S},proFieldProps:o},D))},g=function(a){var n=(0,j.Z)(a.open||!1,{value:a.open,onChange:a.onOpenChange}),o=(0,h.Z)(n,2),D=o[0],Z=o[1];return(0,i.jsx)(H.Z.Item,{shouldUpdate:!0,noStyle:!0,children:function(I){var x,C=I.getFieldValue(a.name||[]);return(0,i.jsx)(V.Z,(0,v.Z)((0,v.Z)({getPopupContainer:function(E){return E&&E.parentNode?E.parentNode:E},onOpenChange:function(E){return Z(E)},content:(0,i.jsxs)("div",{style:{padding:"4px 0"},children:[(x=a.statusRender)===null||x===void 0?void 0:x.call(a,C),a.strengthText?(0,i.jsx)("div",{style:{marginTop:10},children:(0,i.jsx)("span",{children:a.strengthText})}):null]}),overlayStyle:{width:240},placement:"rightTop"},a.popoverProps),{},{open:D,children:a.children}))}})},_=function(a){var n=a.fieldProps,o=a.proFieldProps,D=(0,s.Z)(a,J),Z=(0,F.useState)(!1),m=(0,h.Z)(Z,2),I=m[0],x=m[1];return n!=null&&n.statusRender&&D.name?(0,i.jsx)(g,{name:D.name,statusRender:n==null?void 0:n.statusRender,popoverProps:n==null?void 0:n.popoverProps,strengthText:n==null?void 0:n.strengthText,open:I,onOpenChange:x,children:(0,i.jsx)("div",{children:(0,i.jsx)(K.Z,(0,v.Z)({valueType:"password",fieldProps:(0,v.Z)((0,v.Z)({},(0,z.Z)(n,["statusRender","popoverProps","strengthText"])),{},{onBlur:function(A){var E;n==null||(E=n.onBlur)===null||E===void 0||E.call(n,A),x(!1)},onClick:function(A){var E;n==null||(E=n.onClick)===null||E===void 0||E.call(n,A),x(!0)}}),proFieldProps:o,filedConfig:{valueType:S}},D))})}):(0,i.jsx)(K.Z,(0,v.Z)({valueType:"password",fieldProps:n,proFieldProps:o,filedConfig:{valueType:S}},D))},B=W;B.Password=_,B.displayName="ProFormComponent",$.Z=B},20014:function(ie,$,e){e.r($);var h=e(15009),v=e.n(h),s=e(97857),j=e.n(s),H=e(99289),V=e.n(H),z=e(5574),F=e.n(z),K=e(67294),i=e(99859),G=e(17788),J=e(71230),S=e(15746),W=e(84567),g=e(20863),_=e(76772),B=e(97269),w=e(31199),a=e(5966),n=e(64317),o=e(85893),D=function(m){var I=i.Z.useForm(),x=F()(I,1),C=x[0],A=m.deptTree,E=m.deptCheckedKeys,ue=(0,K.useState)("1"),ce=F()(ue,2),Pe=ce[0],_e=ce[1],le=(0,K.useState)([]),pe=F()(le,2),l=pe[0],u=pe[1],p=(0,K.useState)([]),r=F()(p,2),d=r[0],t=r[1],c=(0,K.useState)(!0),f=F()(c,2),y=f[0],M=f[1];(0,K.useEffect)(function(){u(E),C.resetFields(),C.setFieldsValue({roleId:m.values.roleId,roleName:m.values.roleName,roleKey:m.values.roleKey,dataScope:m.values.dataScope}),_e(m.values.dataScope)},[m.values]);var L=(0,_.useIntl)(),te=function(){C.submit()},ne=function(){m.onCancel()},re=function(){var O=V()(v()().mark(function P(b){return v()().wrap(function(ee){for(;;)switch(ee.prev=ee.next){case 0:m.onSubmit(j()(j()({},b),{},{deptIds:l}));case 1:case"end":return ee.stop()}},P)}));return function(b){return O.apply(this,arguments)}}(),ae=function O(P){var b=[];return P.forEach(function(T){b.push(T.key),T.children&&(b=b.concat(O(T.children)))}),b},k=ae(A),q=function(P){P.includes("deptExpand")?t(k):t([]),P.includes("deptNodeAll")?u(k):u([]),P.includes("deptCheckStrictly")?M(!1):M(!0)};return(0,o.jsx)(G.Z,{width:640,title:L.formatMessage({id:"system.user.auth.role",defaultMessage:"\u5206\u914D\u89D2\u8272"}),open:m.open,destroyOnClose:!0,forceRender:!0,onOk:te,onCancel:ne,children:(0,o.jsxs)(B.A,{form:C,grid:!0,layout:"horizontal",onFinish:re,initialValues:{login_password:"",confirm_password:""},children:[(0,o.jsx)(w.Z,{name:"roleId",label:L.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,o.jsx)(_.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u89D2\u8272\u7F16\u53F7\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u89D2\u8272\u7F16\u53F7\uFF01"})}]}),(0,o.jsx)(a.Z,{name:"roleName",label:L.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,o.jsx)(_.FormattedMessage,{id:"\u8BF7\u8F93\u5165\u89D2\u8272\u540D\u79F0\uFF01",defaultMessage:"\u8BF7\u8F93\u5165\u89D2\u8272\u540D\u79F0\uFF01"})}]}),(0,o.jsx)(a.Z,{name:"roleKey",label:L.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,o.jsx)(_.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,o.jsx)(n.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(P){_e(P)}}}),(0,o.jsx)(B.A.Item,{name:"deptIds",label:L.formatMessage({id:"system.role.auth",defaultMessage:"\u83DC\u5355\u6743\u9650"}),required:Pe==="1",hidden:Pe!=="1",children:(0,o.jsxs)(J.Z,{gutter:[16,16],children:[(0,o.jsx)(S.Z,{md:24,children:(0,o.jsx)(W.Z.Group,{options:[{label:"\u5C55\u5F00/\u6298\u53E0",value:"deptExpand"},{label:"\u5168\u9009/\u5168\u4E0D\u9009",value:"deptNodeAll"}],onChange:q})}),(0,o.jsx)(S.Z,{md:24,children:(0,o.jsx)(g.Z,{checkable:!0,checkStrictly:y,expandedKeys:d,treeData:A,checkedKeys:l,defaultCheckedKeys:E,onCheck:function(P,b){return console.log(P,b),u(y?P.checked:{checked:P,halfChecked:b.halfCheckedKeys})},onExpand:function(P){t(d.concat(P))}})})]})})]})})};$.default=D},20863:function(ie,$,e){e.d($,{Z:function(){return pe}});var h=e(70593),v=e(74902),s=e(67294),j=e(26911),H=e(95591),V=e(32319),z=e(93967),F=e.n(z),K=e(10225),i=e(1089),G=e(53124),J=e(29751),S=e(33603),W=e(29691),g=e(40561);const _=4;function B(l){const{dropPosition:u,dropLevelOffset:p,prefixCls:r,indent:d,direction:t="ltr"}=l,c=t==="ltr"?"left":"right",f=t==="ltr"?"right":"left",y={[c]:-p*d+_,[f]:0};switch(u){case-1:y.top=-3;break;case 1:y.bottom=-3;break;default:y.bottom=-3,y[c]=d+_;break}return s.createElement("div",{style:y,className:`${r}-drop-indicator`})}var w=B,a=e(61639),o=s.forwardRef((l,u)=>{var p;const{getPrefixCls:r,direction:d,virtual:t,tree:c}=s.useContext(G.E_),{prefixCls:f,className:y,showIcon:M=!1,showLine:L,switcherIcon:te,switcherLoadingIcon:ne,blockNode:re=!1,children:ae,checkable:k=!1,selectable:q=!0,draggable:O,motion:P,style:b}=l,T=r("tree",f),ee=r(),de=P!=null?P:Object.assign(Object.assign({},(0,S.Z)(ee)),{motionAppear:!1}),ve=Object.assign(Object.assign({},l),{checkable:k,selectable:q,showIcon:M,motion:de,blockNode:re,showLine:!!L,dropIndicatorRender:w}),[Q,U,Y]=(0,g.ZP)(T),[,se]=(0,W.ZP)(),oe=se.paddingXS/2+(((p=se.Tree)===null||p===void 0?void 0:p.titleHeight)||se.controlHeightSM),Ee=s.useMemo(()=>{if(!O)return!1;let R={};switch(typeof O){case"function":R.nodeDraggable=O;break;case"object":R=Object.assign({},O);break;default:break}return R.icon!==!1&&(R.icon=R.icon||s.createElement(J.Z,null)),R},[O]),N=R=>s.createElement(a.Z,{prefixCls:T,switcherIcon:te,switcherLoadingIcon:ne,treeNodeProps:R,showLine:L});return Q(s.createElement(h.ZP,Object.assign({itemHeight:oe,ref:u,virtual:t},ve,{style:Object.assign(Object.assign({},c==null?void 0:c.style),b),prefixCls:T,className:F()({[`${T}-icon-hide`]:!M,[`${T}-block-node`]:re,[`${T}-unselectable`]:!q,[`${T}-rtl`]:d==="rtl"},c==null?void 0:c.className,y,U,Y),direction:d,checkable:k&&s.createElement("span",{className:`${T}-checkbox-inner`}),selectable:q,switcherIcon:N,draggable:Ee}),ae))});const D=0,Z=1,m=2;function I(l,u,p){const{key:r,children:d}=p;function t(c){const f=c[r],y=c[d];u(f,c)!==!1&&I(y||[],u,p)}l.forEach(t)}function x(l){let{treeData:u,expandedKeys:p,startKey:r,endKey:d,fieldNames:t}=l;const c=[];let f=D;if(r&&r===d)return[r];if(!r||!d)return[];function y(M){return M===r||M===d}return I(u,M=>{if(f===m)return!1;if(y(M)){if(c.push(M),f===D)f=Z;else if(f===Z)return f=m,!1}else f===Z&&c.push(M);return p.includes(M)},(0,i.w$)(t)),c}function C(l,u,p){const r=(0,v.Z)(u),d=[];return I(l,(t,c)=>{const f=r.indexOf(t);return f!==-1&&(d.push(c),r.splice(f,1)),!!r.length},(0,i.w$)(p)),d}var A=function(l,u){var p={};for(var r in l)Object.prototype.hasOwnProperty.call(l,r)&&u.indexOf(r)<0&&(p[r]=l[r]);if(l!=null&&typeof Object.getOwnPropertySymbols=="function")for(var d=0,r=Object.getOwnPropertySymbols(l);d<r.length;d++)u.indexOf(r[d])<0&&Object.prototype.propertyIsEnumerable.call(l,r[d])&&(p[r[d]]=l[r[d]]);return p};function E(l){const{isLeaf:u,expanded:p}=l;return u?s.createElement(j.Z,null):p?s.createElement(H.Z,null):s.createElement(V.Z,null)}function ue(l){let{treeData:u,children:p}=l;return u||(0,i.zn)(p)}const ce=(l,u)=>{var{defaultExpandAll:p,defaultExpandParent:r,defaultExpandedKeys:d}=l,t=A(l,["defaultExpandAll","defaultExpandParent","defaultExpandedKeys"]);const c=s.useRef(null),f=s.useRef(null),y=()=>{const{keyEntities:Q}=(0,i.I8)(ue(t));let U;return p?U=Object.keys(Q):r?U=(0,K.r7)(t.expandedKeys||d||[],Q):U=t.expandedKeys||d||[],U},[M,L]=s.useState(t.selectedKeys||t.defaultSelectedKeys||[]),[te,ne]=s.useState(()=>y());s.useEffect(()=>{"selectedKeys"in t&&L(t.selectedKeys)},[t.selectedKeys]),s.useEffect(()=>{"expandedKeys"in t&&ne(t.expandedKeys)},[t.expandedKeys]);const re=(Q,U)=>{var Y;return"expandedKeys"in t||ne(Q),(Y=t.onExpand)===null||Y===void 0?void 0:Y.call(t,Q,U)},ae=(Q,U)=>{var Y;const{multiple:se,fieldNames:oe}=t,{node:Ee,nativeEvent:N}=U,{key:R=""}=Ee,me=ue(t),fe=Object.assign(Object.assign({},U),{selected:!0}),he=(N==null?void 0:N.ctrlKey)||(N==null?void 0:N.metaKey),ge=N==null?void 0:N.shiftKey;let X;se&&he?(X=Q,c.current=R,f.current=X,fe.selectedNodes=C(me,X,oe)):se&&ge?(X=Array.from(new Set([].concat((0,v.Z)(f.current||[]),(0,v.Z)(x({treeData:me,expandedKeys:te,startKey:R,endKey:c.current,fieldNames:oe}))))),fe.selectedNodes=C(me,X,oe)):(X=[R],c.current=R,f.current=X,fe.selectedNodes=C(me,X,oe)),(Y=t.onSelect)===null||Y===void 0||Y.call(t,X,fe),"selectedKeys"in t||L(X)},{getPrefixCls:k,direction:q}=s.useContext(G.E_),{prefixCls:O,className:P,showIcon:b=!0,expandAction:T="click"}=t,ee=A(t,["prefixCls","className","showIcon","expandAction"]),de=k("tree",O),ve=F()(`${de}-directory`,{[`${de}-directory-rtl`]:q==="rtl"},P);return s.createElement(o,Object.assign({icon:E,ref:u,blockNode:!0},ee,{showIcon:b,expandAction:T,prefixCls:de,className:ve,expandedKeys:te,selectedKeys:M,onSelect:ae,onExpand:re}))};var _e=s.forwardRef(ce);const le=o;le.DirectoryTree=_e,le.TreeNode=h.OF;var pe=le}}]);
