diff --git a/ruoyi-admin/src/main/resources/static/1994.e4f41d05.async.js b/ruoyi-admin/src/main/resources/static/1994.e4f41d05.async.js
new file mode 100644
index 0000000..b516753
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/static/1994.e4f41d05.async.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[1994],{98097:function(we,U,r){r.d(U,{vY:function(){return Ne}});var R=r(74902),M=r(74165),Y=r(15861),q=r(91),s=r(1413),Se=r(97937),pe=r(63606),de=r(86548),O=r(952),_=r(92179),P=r(67294),f=r(48054),$=r(4393),ee=r(25378),be=r(96074),z=r(78957),e=r(85893),te=function(t){var a=t.padding;return(0,e.jsx)("div",{style:{padding:a||"0 24px"},children:(0,e.jsx)(be.Z,{style:{margin:0}})})},Q={xs:2,sm:2,md:4,lg:4,xl:6,xxl:6},C=function(t){var a=t.size,n=t.active,i=(0,P.useMemo)(function(){return{lg:!0,md:!0,sm:!1,xl:!1,xs:!1,xxl:!1}},[]),g=(0,ee.Z)()||i,o=Object.keys(g).filter(function(Z){return g[Z]===!0})[0]||"md",x=a===void 0?Q[o]||6:a,p=function(d){return d===0?0:x>2?42:16};return(0,e.jsx)($.Z,{bordered:!1,style:{marginBlockEnd:16},children:(0,e.jsx)("div",{style:{width:"100%",justifyContent:"space-between",display:"flex"},children:new Array(x).fill(null).map(function(Z,d){return(0,e.jsxs)("div",{style:{borderInlineStart:x>2&&d===1?"1px solid rgba(0,0,0,0.06)":void 0,paddingInlineStart:p(d),flex:1,marginInlineEnd:d===0?16:0},children:[(0,e.jsx)(f.Z,{active:n,paragraph:!1,title:{width:100,style:{marginBlockStart:0}}}),(0,e.jsx)(f.Z.Button,{active:n,style:{height:48}})]},d)})})})},H=function(t){var a=t.active;return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)($.Z,{bordered:!1,style:{borderRadius:0},styles:{body:{padding:24}},children:(0,e.jsxs)("div",{style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,e.jsx)("div",{style:{maxWidth:"100%",flex:1},children:(0,e.jsx)(f.Z,{active:a,title:{width:100,style:{marginBlockStart:0}},paragraph:{rows:1,style:{margin:0}}})}),(0,e.jsx)(f.Z.Button,{active:a,size:"small",style:{width:165,marginBlockStart:12}})]})}),(0,e.jsx)(te,{})]})},ae=function(t){var a=t.size,n=t.active,i=n===void 0?!0:n,g=t.actionButton;return(0,e.jsxs)($.Z,{bordered:!1,styles:{body:{padding:0}},children:[new Array(a).fill(null).map(function(o,x){return(0,e.jsx)(H,{active:!!i},x)}),g!==!1&&(0,e.jsx)($.Z,{bordered:!1,style:{borderStartEndRadius:0,borderTopLeftRadius:0},styles:{body:{display:"flex",alignItems:"center",justifyContent:"center"}},children:(0,e.jsx)(f.Z.Button,{style:{width:102},active:i,size:"small"})})]})},G=function(t){var a=t.active;return(0,e.jsxs)("div",{style:{marginBlockEnd:16},children:[(0,e.jsx)(f.Z,{paragraph:!1,title:{width:185}}),(0,e.jsx)(f.Z.Button,{active:a,size:"small"})]})},ue=function(t){var a=t.active;return(0,e.jsx)($.Z,{bordered:!1,style:{borderBottomRightRadius:0,borderBottomLeftRadius:0},styles:{body:{paddingBlockEnd:8}},children:(0,e.jsxs)(z.Z,{style:{width:"100%",justifyContent:"space-between"},children:[(0,e.jsx)(f.Z.Button,{active:a,style:{width:200},size:"small"}),(0,e.jsxs)(z.Z,{children:[(0,e.jsx)(f.Z.Button,{active:a,size:"small",style:{width:120}}),(0,e.jsx)(f.Z.Button,{active:a,size:"small",style:{width:80}})]})]})})},Ce=function(t){var a=t.active,n=a===void 0?!0:a,i=t.statistic,g=t.actionButton,o=t.toolbar,x=t.pageHeader,p=t.list,Z=p===void 0?5:p;return(0,e.jsxs)("div",{style:{width:"100%"},children:[x!==!1&&(0,e.jsx)(G,{active:n}),i!==!1&&(0,e.jsx)(C,{size:i,active:n}),(o!==!1||Z!==!1)&&(0,e.jsxs)($.Z,{bordered:!1,styles:{body:{padding:0}},children:[o!==!1&&(0,e.jsx)(ue,{active:n}),Z!==!1&&(0,e.jsx)(ae,{size:Z,active:n,actionButton:g})]})]})},Te=Ce,ne={xs:1,sm:2,md:3,lg:3,xl:3,xxl:4},Ee=function(t){var a=t.active;return(0,e.jsxs)("div",{style:{marginBlockStart:32},children:[(0,e.jsx)(f.Z.Button,{active:a,size:"small",style:{width:100,marginBlockEnd:16}}),(0,e.jsxs)("div",{style:{width:"100%",justifyContent:"space-between",display:"flex"},children:[(0,e.jsxs)("div",{style:{flex:1,marginInlineEnd:24,maxWidth:300},children:[(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{marginBlockStart:0}}}),(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{marginBlockStart:8}}}),(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{marginBlockStart:8}}})]}),(0,e.jsx)("div",{style:{flex:1,alignItems:"center",justifyContent:"center"},children:(0,e.jsxs)("div",{style:{maxWidth:300,margin:"auto"},children:[(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{marginBlockStart:0}}}),(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{marginBlockStart:8}}})]})})]})]})},ce=function(t){var a=t.size,n=t.active,i=(0,P.useMemo)(function(){return{lg:!0,md:!0,sm:!1,xl:!1,xs:!1,xxl:!1}},[]),g=(0,ee.Z)()||i,o=Object.keys(g).filter(function(p){return g[p]===!0})[0]||"md",x=a===void 0?ne[o]||3:a;return(0,e.jsx)("div",{style:{width:"100%",justifyContent:"space-between",display:"flex"},children:new Array(x).fill(null).map(function(p,Z){return(0,e.jsxs)("div",{style:{flex:1,paddingInlineStart:Z===0?0:24,paddingInlineEnd:Z===x-1?0:24},children:[(0,e.jsx)(f.Z,{active:n,paragraph:!1,title:{style:{marginBlockStart:0}}}),(0,e.jsx)(f.Z,{active:n,paragraph:!1,title:{style:{marginBlockStart:8}}}),(0,e.jsx)(f.Z,{active:n,paragraph:!1,title:{style:{marginBlockStart:8}}})]},Z)})})},ve=function(t){var a=t.active,n=t.header,i=n===void 0?!1:n,g=(0,P.useMemo)(function(){return{lg:!0,md:!0,sm:!1,xl:!1,xs:!1,xxl:!1}},[]),o=(0,ee.Z)()||g,x=Object.keys(o).filter(function(Z){return o[Z]===!0})[0]||"md",p=ne[x]||3;return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{style:{display:"flex",background:i?"rgba(0,0,0,0.02)":"none",padding:"24px 8px"},children:[new Array(p).fill(null).map(function(Z,d){return(0,e.jsx)("div",{style:{flex:1,paddingInlineStart:i&&d===0?0:20,paddingInlineEnd:32},children:(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{margin:0,height:24,width:i?"75px":"100%"}}})},d)}),(0,e.jsx)("div",{style:{flex:3,paddingInlineStart:32},children:(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{margin:0,height:24,width:i?"75px":"100%"}}})})]}),(0,e.jsx)(te,{padding:"0px 0px"})]})},re=function(t){var a=t.active,n=t.size,i=n===void 0?4:n;return(0,e.jsxs)($.Z,{bordered:!1,children:[(0,e.jsx)(f.Z.Button,{active:a,size:"small",style:{width:100,marginBlockEnd:16}}),(0,e.jsx)(ve,{header:!0,active:a}),new Array(i).fill(null).map(function(g,o){return(0,e.jsx)(ve,{active:a},o)}),(0,e.jsx)("div",{style:{display:"flex",justifyContent:"flex-end",paddingBlockStart:16},children:(0,e.jsx)(f.Z,{active:a,paragraph:!1,title:{style:{margin:0,height:32,float:"right",maxWidth:"630px"}}})})]})},Ie=function(t){var a=t.active;return(0,e.jsxs)($.Z,{bordered:!1,style:{borderStartEndRadius:0,borderTopLeftRadius:0},children:[(0,e.jsx)(f.Z.Button,{active:a,size:"small",style:{width:100,marginBlockEnd:16}}),(0,e.jsx)(ce,{active:a}),(0,e.jsx)(Ee,{active:a})]})},A=function(t){var a=t.active,n=a===void 0?!0:a,i=t.pageHeader,g=t.list;return(0,e.jsxs)("div",{style:{width:"100%"},children:[i!==!1&&(0,e.jsx)(G,{active:n}),(0,e.jsx)(Ie,{active:n}),g!==!1&&(0,e.jsx)(te,{}),g!==!1&&(0,e.jsx)(re,{active:n,size:g})]})},fe=A,De=function(t){var a=t.active,n=a===void 0?!0:a,i=t.pageHeader;return(0,e.jsxs)("div",{style:{width:"100%"},children:[i!==!1&&(0,e.jsx)(G,{active:n}),(0,e.jsx)($.Z,{children:(0,e.jsxs)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",flexDirection:"column",padding:128},children:[(0,e.jsx)(f.Z.Avatar,{size:64,style:{marginBlockEnd:32}}),(0,e.jsx)(f.Z.Button,{active:n,style:{width:214,marginBlockEnd:8}}),(0,e.jsx)(f.Z.Button,{active:n,style:{width:328},size:"small"}),(0,e.jsxs)(z.Z,{style:{marginBlockStart:24},children:[(0,e.jsx)(f.Z.Button,{active:n,style:{width:116}}),(0,e.jsx)(f.Z.Button,{active:n,style:{width:116}})]})]})})]})},le=De,I=["type"],me=function(t){var a=t.type,n=a===void 0?"list":a,i=(0,q.Z)(t,I);return n==="result"?(0,e.jsx)(le,(0,s.Z)({},i)):n==="descriptions"?(0,e.jsx)(fe,(0,s.Z)({},i)):(0,e.jsx)(Te,(0,s.Z)({},i))},ge=me,ie=r(2026),xe=r(90081),se=r(1977),Be=r(77398),X=r(12795),Pe=r(53914),J=r(97685),He=r(10915),Le=r(2453),We=r(56790),ke=r(21770),ye=r(86671),Ke=function(t){return(Le.ZP.warn||Le.ZP.warning)(t)};function Oe(l){var t=l.data,a=l.row;return(0,s.Z)((0,s.Z)({},t),a)}function Xe(l){var t=(0,P.useRef)(null),a=l.type||"single",n=(0,He.YB)(),i=(0,ke.Z)([],{value:l.editableKeys,onChange:l.onChange?function(m){var y;l==null||(y=l.onChange)===null||y===void 0||y.call(l,m,l.dataSource)}:void 0}),g=(0,J.Z)(i,2),o=g[0],x=g[1],p=(0,P.useMemo)(function(){var m=a==="single"?o==null?void 0:o.slice(0,1):o;return new Set(m)},[(o||[]).join(","),a]),Z=(0,P.useCallback)(function(m){return!!(o!=null&&o.includes((0,ye.sN)(m)))},[(o||[]).join(",")]),d=function(y,b){var v;return p.size>0&&a==="single"?(Ke(l.onlyOneLineEditorAlertMessage||n.getMessage("editableTable.onlyOneLineEditor","\u53EA\u80FD\u540C\u65F6\u7F16\u8F91\u4E00\u884C")),!1):(t.current=(v=b!=null?b:(0,We.U2)(l.dataSource,Array.isArray(y)?y:[y]))!==null&&v!==void 0?v:null,p.add((0,ye.sN)(y)),x(Array.from(p)),!0)},T=function(y){return p.delete((0,ye.sN)(y)),x(Array.from(p)),!0},F=function(){var m=(0,Y.Z)((0,M.Z)().mark(function y(b,v,w,L){var B,c;return(0,M.Z)().wrap(function(h){for(;;)switch(h.prev=h.next){case 0:return h.next=2,l==null||(B=l.onCancel)===null||B===void 0?void 0:B.call(l,b,v,w,L);case 2:if(c=h.sent,c!==!1){h.next=5;break}return h.abrupt("return",!1);case 5:return h.abrupt("return",!0);case 6:case"end":return h.stop()}},y)}));return function(b,v,w,L){return m.apply(this,arguments)}}(),D=function(){var m=(0,Y.Z)((0,M.Z)().mark(function y(b,v,w){var L,B,c;return(0,M.Z)().wrap(function(h){for(;;)switch(h.prev=h.next){case 0:return h.next=2,l==null||(L=l.onSave)===null||L===void 0?void 0:L.call(l,b,v,w);case 2:if(B=h.sent,B!==!1){h.next=5;break}return h.abrupt("return",!1);case 5:return h.next=7,T(b);case 7:return c={data:l.dataSource,row:v,key:b,childrenColumnName:l.childrenColumnName||"children"},l.setDataSource(Oe(c)),h.abrupt("return",!0);case 10:case"end":return h.stop()}},y)}));return function(b,v,w){return m.apply(this,arguments)}}(),W=n.getMessage("editableTable.action.save","\u4FDD\u5B58"),E=n.getMessage("editableTable.action.delete","\u5220\u9664"),k=n.getMessage("editableTable.action.cancel","\u53D6\u6D88"),N=(0,P.useCallback)(function(m,y){var b=(0,s.Z)({recordKey:m,cancelEditable:T,onCancel:F,onSave:D,editableKeys:o,setEditableRowKeys:x,saveText:W,cancelText:k,preEditRowRef:t,deleteText:E,deletePopconfirmMessage:"".concat(n.getMessage("deleteThisLine","\u5220\u9664\u6B64\u9879"),"?"),editorType:"Map"},y),v=(0,ye.aX)(l.dataSource,b);return l.actionRender?l.actionRender(l.dataSource,b,{save:v.save,delete:v.delete,cancel:v.cancel}):[v.save,v.delete,v.cancel]},[o&&o.join(","),l.dataSource]);return{editableKeys:o,setEditableRowKeys:x,isEditable:Z,actionRender:N,startEditable:d,cancelEditable:T}}var Ge=r(78164),Me=r(67159),Re=r(26412),Ve=r(21532),Qe=r(50344),Ye=r(88306),Je=function(t,a){var n=a||{},i=n.onRequestError,g=n.effects,o=n.manual,x=n.dataSource,p=n.defaultDataSource,Z=n.onDataSourceChange,d=(0,ke.Z)(p,{value:x,onChange:Z}),T=(0,J.Z)(d,2),F=T[0],D=T[1],W=(0,ke.Z)(a==null?void 0:a.loading,{value:a==null?void 0:a.loading,onChange:a==null?void 0:a.onLoadingChange}),E=(0,J.Z)(W,2),k=E[0],N=E[1],m=function(v){D(v),N(!1)},y=function(){var b=(0,Y.Z)((0,M.Z)().mark(function v(){var w,L,B;return(0,M.Z)().wrap(function(u){for(;;)switch(u.prev=u.next){case 0:if(!k){u.next=2;break}return u.abrupt("return");case 2:return N(!0),u.prev=3,u.next=6,t();case 6:if(u.t0=u.sent,u.t0){u.next=9;break}u.t0={};case 9:w=u.t0,L=w.data,B=w.success,B!==!1&&m(L),u.next=23;break;case 15:if(u.prev=15,u.t1=u.catch(3),i!==void 0){u.next=21;break}throw new Error(u.t1);case 21:i(u.t1);case 22:N(!1);case 23:return u.prev=23,N(!1),u.finish(23);case 26:case"end":return u.stop()}},v,null,[[3,15,23,26]])}));return function(){return b.apply(this,arguments)}}();return(0,P.useEffect)(function(){o||y()},[].concat((0,R.Z)(g||[]),[o])),{dataSource:F,setDataSource:D,loading:k,reload:function(){return y()}}},Ue=Je,ze=r(64847),qe=["valueEnum","render","renderText","mode","plain","dataIndex","request","params","editable"],_e=["request","columns","params","dataSource","onDataSourceChange","formProps","editable","loading","onLoadingChange","actionRef","onRequestError","emptyText","contentStyle"],et=function(t,a){var n=t.dataIndex;if(n){var i=Array.isArray(n)?(0,Ye.Z)(a,n):a[n];if(i!==void 0||i!==null)return i}return t.children},$e=function(t){var a,n=t.valueEnum,i=t.action,g=t.index,o=t.text,x=t.entity,p=t.mode,Z=t.render,d=t.editableUtils,T=t.valueType,F=t.plain,D=t.dataIndex,W=t.request,E=t.renderFormItem,k=t.params,N=t.emptyText,m=O.ZP.useFormInstance(),y=(a=ze.Ow.useToken)===null||a===void 0?void 0:a.call(ze.Ow),b=y.token,v={text:o,valueEnum:n,mode:p||"read",proFieldProps:{emptyText:N,render:Z?function(B){return Z==null?void 0:Z(B,x,g,i,(0,s.Z)((0,s.Z)({},t),{},{type:"descriptions"}))}:void 0},ignoreFormItem:!0,valueType:T,request:W,params:k,plain:F};if(p==="read"||!p||T==="option"){var w=(0,ie.w)(t.fieldProps,void 0,(0,s.Z)((0,s.Z)({},t),{},{rowKey:D,isEditable:!1}));return(0,e.jsx)(_.Z,(0,s.Z)((0,s.Z)({name:D},v),{},{fieldProps:w}))}var L=function(){var c,u=(0,ie.w)(t.formItemProps,m,(0,s.Z)((0,s.Z)({},t),{},{rowKey:D,isEditable:!0})),h=(0,ie.w)(t.fieldProps,m,(0,s.Z)((0,s.Z)({},t),{},{rowKey:D,isEditable:!0}));return(0,e.jsxs)("div",{style:{display:"flex",gap:b.marginXS,alignItems:"baseline"},children:[(0,e.jsx)(xe.U,(0,s.Z)((0,s.Z)({name:D},u),{},{style:(0,s.Z)({margin:0},(u==null?void 0:u.style)||{}),initialValue:o||(u==null?void 0:u.initialValue),children:(0,e.jsx)(_.Z,(0,s.Z)((0,s.Z)({},v),{},{proFieldProps:(0,s.Z)({},v.proFieldProps),renderFormItem:E?function(){return E==null?void 0:E((0,s.Z)((0,s.Z)({},t),{},{type:"descriptions"}),{isEditable:!0,recordKey:D,record:m.getFieldValue([D].flat(1)),defaultRender:function(){return(0,e.jsx)(_.Z,(0,s.Z)((0,s.Z)({},v),{},{fieldProps:h}))},type:"descriptions"},m)}:void 0,fieldProps:h}))})),(0,e.jsx)("div",{style:{display:"flex",maxHeight:b.controlHeight,alignItems:"center",gap:b.marginXS},children:d==null||(c=d.actionRender)===null||c===void 0?void 0:c.call(d,D||g,{cancelText:(0,e.jsx)(Se.Z,{}),saveText:(0,e.jsx)(pe.Z,{}),deleteText:!1})})]})};return(0,e.jsx)("div",{style:{marginTop:-5,marginBottom:-5,marginLeft:0,marginRight:0},children:L()})},tt=function(t,a,n,i,g){var o,x=[],p=(0,se.n)(Me.Z,"5.8.0")>=0,Z=t==null||(o=t.map)===null||o===void 0?void 0:o.call(t,function(d,T){var F,D,W;if(P.isValidElement(d))return p?{children:d}:d;var E=d,k=E.valueEnum,N=E.render,m=E.renderText,y=E.mode,b=E.plain,v=E.dataIndex,w=E.request,L=E.params,B=E.editable,c=(0,q.Z)(E,qe),u=(F=et(d,a))!==null&&F!==void 0?F:c.children,h=m?m(u,a,T,n):u,V=typeof c.title=="function"?c.title(d,"descriptions",null):c.title,K=typeof c.valueType=="function"?c.valueType(a||{},"descriptions"):c.valueType,j=i==null?void 0:i.isEditable(v||T),S=y||j?"edit":"read",oe=i&&S==="read"&&B!==!1&&(B==null?void 0:B(h,a,T))!==!1,he=oe?z.Z:P.Fragment,Ze=S==="edit"?h:(0,Be.X)(h,d,h),je=p&&K!=="option"?(0,s.Z)((0,s.Z)({},c),{},{key:c.key||((D=c.label)===null||D===void 0?void 0:D.toString())||T,label:(V||c.label||c.tooltip)&&(0,e.jsx)(X.G,{label:V||c.label,tooltip:c.tooltip,ellipsis:d.ellipsis}),children:(0,e.jsxs)(he,{children:[(0,P.createElement)($e,(0,s.Z)((0,s.Z)({},d),{},{key:d==null?void 0:d.key,dataIndex:d.dataIndex||T,mode:S,text:Ze,valueType:K,entity:a,index:T,emptyText:g,action:n,editableUtils:i})),oe&&(0,e.jsx)(de.Z,{onClick:function(){i==null||i.startEditable(v||T)}})]})}):(0,P.createElement)(Re.Z.Item,(0,s.Z)((0,s.Z)({},c),{},{key:c.key||((W=c.label)===null||W===void 0?void 0:W.toString())||T,label:(V||c.label||c.tooltip)&&(0,e.jsx)(X.G,{label:V||c.label,tooltip:c.tooltip,ellipsis:d.ellipsis})}),(0,e.jsxs)(he,{children:[(0,e.jsx)($e,(0,s.Z)((0,s.Z)({},d),{},{dataIndex:d.dataIndex||T,mode:S,text:Ze,valueType:K,entity:a,index:T,action:n,editableUtils:i})),oe&&K!=="option"&&(0,e.jsx)(de.Z,{onClick:function(){i==null||i.startEditable(v||T)}})]}));return K==="option"?(x.push(je),null):je}).filter(function(d){return d});return{options:x!=null&&x.length?x:null,children:Z}},Ae=function(t){return(0,e.jsx)(Re.Z.Item,(0,s.Z)((0,s.Z)({},t),{},{children:t.children}))};Ae.displayName="ProDescriptionsItem";var at=function(t){return t.children},Ne=function(t){var a,n=t.request,i=t.columns,g=t.params,o=t.dataSource,x=t.onDataSourceChange,p=t.formProps,Z=t.editable,d=t.loading,T=t.onLoadingChange,F=t.actionRef,D=t.onRequestError,W=t.emptyText,E=t.contentStyle,k=(0,q.Z)(t,_e),N=(0,P.useContext)(Ve.ZP.ConfigContext),m=Ue((0,Y.Z)((0,M.Z)().mark(function V(){var K;return(0,M.Z)().wrap(function(S){for(;;)switch(S.prev=S.next){case 0:if(!n){S.next=6;break}return S.next=3,n(g||{});case 3:S.t0=S.sent,S.next=7;break;case 6:S.t0={data:{}};case 7:return K=S.t0,S.abrupt("return",K);case 9:case"end":return S.stop()}},V)})),{onRequestError:D,effects:[(0,Pe.ZP)(g)],manual:!n,dataSource:o,loading:d,onLoadingChange:T,onDataSourceChange:x}),y=Xe((0,s.Z)((0,s.Z)({},t.editable),{},{childrenColumnName:void 0,dataSource:m.dataSource,setDataSource:m.setDataSource}));if((0,P.useEffect)(function(){F&&(F.current=(0,s.Z)({reload:m.reload},y))},[m,F,y]),m.loading||m.loading===void 0&&n)return(0,e.jsx)(ge,{type:"descriptions",list:!1,pageHeader:!1});var b=function(){var K=(0,Qe.Z)(t.children).filter(Boolean).map(function(j){if(!P.isValidElement(j))return j;var S=j==null?void 0:j.props,oe=S.valueEnum,he=S.valueType,Ze=S.dataIndex,je=S.ellipsis,Fe=S.copyable,nt=S.request;return!he&&!oe&&!Ze&&!nt&&!je&&!Fe&&j.type.displayName!=="ProDescriptionsItem"?j:(0,s.Z)((0,s.Z)({},j==null?void 0:j.props),{},{entity:o})});return[].concat((0,R.Z)(i||[]),(0,R.Z)(K)).filter(function(j){return!j||j!=null&&j.valueType&&["index","indexBorder"].includes(j==null?void 0:j.valueType)?!1:!(j!=null&&j.hideInDescriptions)}).sort(function(j,S){return S.order||j.order?(S.order||0)-(j.order||0):(S.index||0)-(j.index||0)})},v=tt(b(),m.dataSource||{},(F==null?void 0:F.current)||m,Z?y:void 0,t.emptyText),w=v.options,L=v.children,B=Z?O.ZP:at,c=null;(k.title||k.tooltip||k.tip)&&(c=(0,e.jsx)(X.G,{label:k.title,tooltip:k.tooltip||k.tip}));var u=N.getPrefixCls("pro-descriptions"),h=(0,se.n)(Me.Z,"5.8.0")>=0;return(0,e.jsx)(Ge.S,{children:(0,e.jsx)(B,(0,s.Z)((0,s.Z)({form:(a=t.editable)===null||a===void 0?void 0:a.form,component:!1,submitter:!1},p),{},{onFinish:void 0,children:(0,e.jsx)(Re.Z,(0,s.Z)((0,s.Z)({className:u},k),{},{contentStyle:(0,s.Z)({minWidth:0},E||{}),extra:k.extra?(0,e.jsxs)(z.Z,{children:[w,k.extra]}):w,title:c,items:h?L:void 0,children:h?null:L}))}),"form")})};Ne.Item=Ae;var rt=null},2236:function(we,U,r){r.d(U,{S:function(){return te}});var R=r(1413),M=r(4942),Y=r(91),q=r(12044),s=r(21532),Se=r(93967),pe=r.n(Se),de=r(98423),O=r(67294),_=r(73935),P=r(76509),f=r(64847),$=function(C){return(0,M.Z)({},C.componentCls,{position:"fixed",insetInlineEnd:0,bottom:0,zIndex:99,display:"flex",alignItems:"center",width:"100%",paddingInline:24,paddingBlock:0,boxSizing:"border-box",lineHeight:"64px",backgroundColor:(0,f.uK)(C.colorBgElevated,.6),borderBlockStart:"1px solid ".concat(C.colorSplit),"-webkit-backdrop-filter":"blur(8px)",backdropFilter:"blur(8px)",color:C.colorText,transition:"all 0.2s ease 0s","&-left":{flex:1,color:C.colorText},"&-right":{color:C.colorText,"> *":{marginInlineEnd:8,"&:last-child":{marginBlock:0,marginInline:0}}}})};function ee(Q){return(0,f.Xj)("ProLayoutFooterToolbar",function(C){var H=(0,R.Z)((0,R.Z)({},C),{},{componentCls:".".concat(Q)});return[$(H)]})}function be(Q,C){var H=C.stylish;return(0,f.Xj)("ProLayoutFooterToolbarStylish",function(ae){var G=(0,R.Z)((0,R.Z)({},ae),{},{componentCls:".".concat(Q)});return H?[(0,M.Z)({},"".concat(G.componentCls),H==null?void 0:H(G))]:[]})}var z=r(85893),e=["children","className","extra","portalDom","style","renderContent"],te=function(C){var H=C.children,ae=C.className,G=C.extra,ue=C.portalDom,Ce=ue===void 0?!0:ue,Te=C.style,ne=C.renderContent,Ee=(0,Y.Z)(C,e),ce=(0,O.useContext)(s.ZP.ConfigContext),ve=ce.getPrefixCls,re=ce.getTargetContainer,Ie=C.prefixCls||ve("pro"),A="".concat(Ie,"-footer-bar"),fe=ee(A),De=fe.wrapSSR,le=fe.hashId,I=(0,O.useContext)(P.X),me=(0,O.useMemo)(function(){var X=I.hasSiderMenu,Pe=I.isMobile,J=I.siderWidth;if(X)return J?Pe?"100%":"calc(100% - ".concat(J,"px)"):"100%"},[I.collapsed,I.hasSiderMenu,I.isMobile,I.siderWidth]),ge=(0,O.useMemo)(function(){return typeof window=="undefined"||typeof document=="undefined"?null:(re==null?void 0:re())||document.body},[]),ie=be("".concat(A,".").concat(A,"-stylish"),{stylish:C.stylish}),xe=(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)("div",{className:"".concat(A,"-left ").concat(le).trim(),children:G}),(0,z.jsx)("div",{className:"".concat(A,"-right ").concat(le).trim(),children:H})]});(0,O.useEffect)(function(){return!I||!(I!=null&&I.setHasFooterToolbar)?function(){}:(I==null||I.setHasFooterToolbar(!0),function(){var X;I==null||(X=I.setHasFooterToolbar)===null||X===void 0||X.call(I,!1)})},[]);var se=(0,z.jsx)("div",(0,R.Z)((0,R.Z)({className:pe()(ae,le,A,(0,M.Z)({},"".concat(A,"-stylish"),!!C.stylish)),style:(0,R.Z)({width:me},Te)},(0,de.Z)(Ee,["prefixCls"])),{},{children:ne?ne((0,R.Z)((0,R.Z)((0,R.Z)({},C),I),{},{leftWidth:me}),xe):xe})),Be=!(0,q.j)()||!Ce||!ge?se:(0,_.createPortal)(se,ge,A);return ie.wrapSSR(De((0,z.jsx)(O.Fragment,{children:Be},A)))}},76509:function(we,U,r){r.d(U,{X:function(){return M}});var R=r(67294),M=(0,R.createContext)({})}}]);
