@topthink/common 1.1.6 → 1.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +3 -3
package/lib/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as n,Fragment as c}from"react/jsx-runtime";import t,{SubMenu as r,MenuItem as i}from"rc-menu";import o from"styled-components";export{createGlobalStyle,css,keyframes,default as styled}from"styled-components";import{useRoutes as a,useLocation as s,Link as l,Navigate as d,BrowserRouter as u,Routes as h,Route as m,useNavigate as g}from"react-router-dom";export{Link,useRoutes}from"react-router-dom";import*as p from"react";import f,{useMemo as v,useState as b,useEffect as x,useContext as y,Children as w,useCallback as k,createElement as _,forwardRef as z,useRef as C,useImperativeHandle as S,Fragment as N}from"react";import j from"sweetalert2/dist/sweetalert2.js";import E from"sweetalert2-react-content";import{Alert as L,Spinner as U,Dropdown as O,Card as A,Pagination as I,Button as P,Table as D,Form as B,Modal as F,OverlayTrigger as R,Tooltip as T}from"react-bootstrap";import q from"rc-notification";import{useAsync as M,useAsyncCallback as H}from"react-async-hook";import K from"query-string";import G from"axios";import*as V from"retry-axios";import*as W from"path";import Y from"classnames";import{intersection as $,mapValues as J,debounce as Q,values as X,uniqueId as Z}from"lodash";import ee from"rc-steps";import"rc-steps/assets/index.css";import ne,{getRegistry as ce}from"@topthink/json-form";import te from"rc-table";export{Navigate,Outlet,useLocation,useNavigate,useOutlet,useParams}from"react-router";function re(e,n){return n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}var ie;const oe=o.footer(ie||(ie=re(["\n\n"])));function ae(){return e(oe,{children:e("div",{className:"container"})})}const se=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/";const c=[];for(const a of e){var t,r,i,o;if(null!==(t=a.meta)&&void 0!==t&&t.hideInMenu)continue;const e=null===(r=a.meta)||void 0===r?void 0:r.title;if(!e)continue;let s=a.path||"";s="".concat(n,"/").concat(s),s=s.replace(/\/+/,"/").replace(/\/$/,"");const l={title:e,icon:null===(i=a.meta)||void 0===i?void 0:i.icon,path:s,children:[]};null!==(o=a.meta)&&void 0!==o&&o.hideChildrenInMenu||a.children&&a.children.length>0&&(l.children=se(a.children,s)),c.push(l)}return c};var le,de,ue,he,me,ge;const pe=t=>t.map((t=>{const o=n(c,{children:[t.icon&&e("i",{className:"bi bi-".concat(t.icon)}),t.title]});return t.children.length>0?e(r,{title:o,children:pe(t.children)},t.path):e(i,{children:e(l,{to:t.path,children:o})},t.path)})),fe=()=>({height:0}),ve=e=>({height:e.scrollHeight}),be={motionName:"rc-menu-collapse",motionAppear:!0,onAppearStart:fe,onAppearActive:ve,onEnterStart:fe,onEnterActive:ve,onLeaveStart:ve,onLeaveActive:fe};function xe(c){let{routes:t,basename:r,title:i}=c;const o=a(t),l=v((()=>function(e){return se(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/")}(t,r)),[t,r]),{pathname:d}=s(),u=v((()=>{const e=[];return d.split("/").reduce(((n,c)=>(n.length>1&&e.push(n.join("/")),[...n,c])),[]),e.push(d),e}),[d]),[h,m]=b([]);x((()=>{m(u.slice(0,-1))}),[u]);return n(ye,{children:[n(we,{children:[e(ke,{children:i}),e(Ce,{mode:"inline",motion:be,openKeys:h,onOpenChange:e=>{const n=e[e.length-1];m(e.filter((e=>n.startsWith(e))))},selectedKeys:u,children:pe(l)})]}),n(_e,{children:[e(ze,{children:o}),e(ae,{})]})]})}const ye=o.div(le||(le=re(["\n display: flex;\n flex-wrap: nowrap;\n width: 100%;\n"]))),we=o.nav(de||(de=re(["\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n z-index: 100;\n padding: 54px 0 0;\n border-right: 1px solid #e3e3e3;\n width: 230px;\n background-color: #f5f5f5;\n"]))),ke=o.div(ue||(ue=re(["\n padding: 10px 0;\n height: 64px;\n line-height: 44px;\n text-indent: 24px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n font-size: 16px;\n"]))),_e=o.div(he||(he=re(["\n margin-left: 230px;\n flex: 1;\n"]))),ze=o.main(me||(me=re(["\n min-height: calc(100vh - 54px);\n position: relative;\n"]))),Ce=o(t)(ge||(ge=re(["\n border: none;\n box-shadow: none;\n padding: 0;\n\n .rc-menu-item {\n display: flex;\n\n &:hover {\n background-color: #f0f0f0;\n }\n\n a {\n flex: 1;\n text-decoration: none;\n color: dimgray;\n\n .bi {\n font-size: 16px;\n line-height: 18px;\n margin-right: 9px;\n min-width: 19px;\n text-align: center;\n vertical-align: text-bottom;\n }\n }\n }\n\n .rc-menu-sub {\n background-color: #eee;\n border-top: 1px solid #eee;\n border-bottom: 1px solid #eee;\n\n & > li {\n &:first-child {\n margin-top: 4px;\n }\n\n &:last-child {\n margin-bottom: 4px;\n }\n }\n\n .rc-menu-item-selected {\n background-color: #eee;\n color: var(--bs-primary);\n\n & > a {\n color: var(--bs-primary);\n }\n }\n\n .rc-menu-item-active {\n background-color: #eee;\n }\n\n .rc-menu-item {\n &:hover {\n background-color: #e7e7e7;\n }\n }\n }\n\n .rc-menu-submenu {\n & > .rc-menu-submenu-title {\n &:hover {\n background-color: #e7e7e7;\n }\n\n .bi {\n font-size: 16px;\n line-height: 18px;\n margin-right: 9px;\n min-width: 19px;\n text-align: center;\n vertical-align: text-bottom;\n }\n }\n }\n\n .rc-menu-submenu-active > .rc-menu-submenu-title {\n background-color: #eee;\n }\n\n .rc-menu-item,\n .rc-menu-submenu > .rc-menu-submenu-title {\n padding: 0 8px 0 24px;\n font-size: 14px;\n line-height: 36px;\n cursor: pointer;\n }\n\n .rc-menu-sub > .rc-menu-item,\n .rc-menu-sub > .rc-menu-submenu > .rc-menu-submenu-title {\n padding-top: 0;\n padding-bottom: 0;\n padding-right: 0;\n }\n\n .rc-menu-submenu-arrow {\n line-height: 38px;\n }\n\n .rc-menu-item-selected {\n background-color: #f5f5f5;\n color: var(--bs-primary);\n\n & > a {\n color: var(--bs-primary);\n }\n }\n\n .rc-menu-submenu-selected {\n background-color: #eee;\n\n & > .rc-menu-submenu-title {\n color: var(--bs-primary);\n font-weight: 500;\n }\n }\n\n & > .rc-menu-item {\n line-height: 38px;\n }\n\n & > .rc-menu-submenu {\n &.rc-menu-submenu-selected {\n background-color: #f5f5f5;\n }\n\n & > .rc-menu-submenu-title {\n line-height: 38px;\n\n &:hover {\n background-color: #f0f0f0;\n }\n }\n\n &.rc-menu-submenu-active > .rc-menu-submenu-title {\n background-color: #f5f5f5;\n }\n\n & > .rc-menu-sub {\n border-top: 1px solid #e6e6e6;\n border-bottom: 1px solid #e6e6e6;\n\n & > li {\n &:first-child {\n margin-top: 9px;\n }\n\n &:last-child {\n margin-bottom: 9px;\n }\n }\n }\n }\n\n"]))),Se=E(j),Ne={confirmButtonText:"确定",cancelButtonText:"取消"},je={confirm:async e=>{const{isConfirmed:n}=await Se.fire({...Ne,icon:"warning",showCancelButton:!0,...e});return n},error:e=>{Se.fire({...Ne,toast:!0,position:"top",icon:"error",timer:3e3,showConfirmButton:!1,...e})}};let Ee;const Le=n=>{let{type:c,...t}=n;!function(e){if(Ee)return e(Ee);q.newInstance({prefixCls:"notification",maxCount:5,style:{top:20,right:20}},(n=>{Ee?e(Ee):(Ee=n,e(n))}))}((n=>{t.duration=3;let r=c;if("error"===c)r="danger",t.duration=t.closable?0:5;t.content=e(L,{variant:r,children:t.content}),n.notice(t)}))};let Ue={};var Oe,Ae,Ie,Pe;["error","success","info"].forEach((e=>{Ue[e]=(n,c)=>{Le({...c,type:e,content:n})}}));const De=o.div(Oe||(Oe=re(["\n padding: 48px 32px;\n"]))),Be=o.div(Ae||(Ae=re(["\n margin-bottom: 24px;\n text-align: center;\n font-size: 72px;\n"]))),Fe=o.div(Ie||(Ie=re(["\n color: rgba(0, 0, 0, .85);\n font-size: 24px;\n line-height: 1.8;\n text-align: center;\n"]))),Re=o.div(Pe||(Pe=re(["\n margin-top: 32px;\n text-align: center;\n"]))),Te={success:e("i",{className:"bi bi-check-circle-fill text-success"}),error:e("i",{className:"bi bi-exclamation-circle-fill text-danger"}),info:e("i",{className:"bi bi-info-circle-fill text-info"}),warning:e("i",{className:"bi bi-exclamation-triangle-fill text-warning"})};function qe(c){let{status:t,title:r,icon:i,extra:o}=c;return!i&&t&&(i=Te[t]),n(De,{children:[i&&e(Be,{children:i}),r&&e(Fe,{children:r}),o&&e(Re,{children:o})]})}var Me,He;o.div(Me||(Me=re(["\n position: relative;\n"])));const Ke=o.div(He||(He=re(["\n display: ",";\n position: absolute;\n top: 0 !important;\n left: 0 !important;\n width: 100%;\n height: 100%;\n text-align: center;\n vertical-align: middle;\n padding: 1em;\n background-color: ",";\n opacity: ",";\n line-height: 1;\n animation-fill-mode: both;\n animation-duration: .5s;\n transition: background-color .5s linear;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n user-select: none;\n will-change: opacity;\n z-index: 990;\n"])),(e=>e.active?"flex":"none"),(e=>e.inverted?"rgba(255, 255, 255, .85)":"rgba(0, 0, 0, .85)"),(e=>e.active?1:0));var Ge;function Ve(c){let{loading:t=!0,children:r,variant:i="success",animation:o="border",wrap:a,...s}=c;return t?(r&&(r=e("p",{className:"mt-3 text-secondary",children:r})),r=n(Ke,{inverted:!0,active:!0,children:[e(U,{animation:o,variant:i,...s}),r]}),a?e(We,{height:"number"==typeof a?a:150,children:r}):r):null}const We=o.div(Ge||(Ge=re(["\n position: relative;\n height: ",";\n"])),(e=>"".concat(e.height,"px")));class Ye extends Error{constructor(e){var n,c,t;super("Unauthorized"),t=void 0,(c="url")in(n=this)?Object.defineProperty(n,c,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[c]=t,this.url=e}}function $e(n){let{onLogin:c}=n;const{result:t}=M((async()=>{await c();const e=sessionStorage.getItem("redirect_uri");return e&&sessionStorage.removeItem("redirect_uri"),e||"/"}),[]);return t?e(d,{to:t,replace:!0}):e(Ve,{})}function Je(n){let{onLogout:c}=n;return M((async()=>{await c()}),[]),e(Ve,{})}V.attach(),G.defaults.raxConfig={retryDelay:2e3,backoffType:"static",shouldRetry:e=>{var n,c;return"GET"===(null===(n=e.config.method)||void 0===n?void 0:n.toUpperCase())&&449===(null===(c=e.response)||void 0===c?void 0:c.status)}},G.defaults.maxContentLength=1/0,G.defaults.maxBodyLength=1/0,G.defaults.baseURL="/api",G.interceptors.request.use((e=>{const n=sessionStorage.getItem("authorization");return n&&(e.headers={...e.headers,Authorization:"Bearer ".concat(n)}),e}),(e=>Promise.reject(e)));const Qe=e=>e&&"object"==typeof e;G.interceptors.response.use((e=>(201===e.status&&e.data.location&&(window.location.href=e.data.location,e.data=void 0),e)),(e=>{if(G.isAxiosError(e)&&e.response){const{data:n,status:c}=e.response;401===c?(e.errors="Unauthorized",Qe(n)&&n.url&&(e=new Ye(n.url)),Ue.error("Unauthorized")):Qe(n)?422===c?e.errors=n:"message"in n&&(e.errors=n.message):e.errors=n}return Promise.reject(e)}));const Xe=G.isAxiosError,Ze=async function(e){e="string"==typeof e?{url:e}:e;const{data:n}=await G.request({paramsSerializer:function(e){return K.stringify(e,{sort:!1,skipNull:!0,skipEmptyString:!0})},...e});return n};Ze.defaults=G.defaults,Ze.interceptors=G.interceptors;const en=f.createContext({});function nn(c){const{basename:t="/",onLogin:r,onLogout:i,authentication:o,baseURL:a,userResolver:s}=c;a&&(Ze.defaults.baseURL=a),"token"===o&&Ze.interceptors.request.use((e=>{const n=sessionStorage.getItem("authorization");return n&&(e.headers={...e.headers,Authorization:"Bearer ".concat(n)}),e}));const l=e=>{window.location.pathname!==W.join(t,"/logout")&&sessionStorage.setItem("redirect_uri",function(e,n){return"/"===n?e:e.slice(n.length)}(window.location.pathname+window.location.search,t));const n=window.location.origin+W.join(t,"/login");window.location.href=K.stringifyUrl({url:e.url,query:{redirect_uri:n}})},d=async()=>{let e;if(r)e=await r();else{const n=K.parse(window.location.hash.substr(1));n.access_token&&(e=n.access_token)}"token"===o&&e&&sessionStorage.setItem("authorization",e)},g=async()=>{if(i)try{await i()}catch(e){e instanceof Ye&&l(e)}"token"===o&&sessionStorage.removeItem("authorization")};return function(c){let{children:r}=c;return e(en.Provider,{value:{userResolver:s,onUnauthorized:l},children:e(u,{basename:t,children:n(h,{children:[e(m,{path:"*",element:r}),e(m,{path:"login",element:e($e,{onLogin:d})}),e(m,{path:"logout",element:e(Je,{onLogout:g})})]})})})}}const cn=f.createContext(null),tn=function(n){let{children:c}=n;const[t,r]=b(null),{userResolver:i,onUnauthorized:o}=y(en);return M((async()=>{if(i)return i()}),[],{onError(e){e instanceof Ye&&o&&o(e)},onSuccess(e){e&&r(e)}}),t?e(cn.Provider,{value:[t,r],children:c}):e(Ve,{})};function rn(){const e=y(cn);if(!e)throw new Error("please use `useUser` in UserContext");return e}var on,an;const sn=o.a(on||(on=re(["\n cursor: pointer;\n"])));function ln(c){let{children:t,menus:r,className:i,logo:o=!0}=c;const[a]=rn();return e(dn,{className:Y("navbar navbar-expand-lg navbar-light bg-white border-bottom sticky-top",i),children:n("div",{className:"container-fluid",children:[o&&e("a",{className:"navbar-brand",href:"https://www.topthink.com",children:e("img",{src:"data:image/svg+xml,%3csvg width='485' height='132' xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='enable-background:new 0 0 531.69 198.43%3b' version='1.1'%3e %3cstyle type='text/css'%3e.st0%7bfill:%233C60FF%3b%7d%3c/style%3e %3cg%3e %3ctitle%3ebackground%3c/title%3e %3crect fill='none' id='canvas_background' height='134' width='487' y='-1' x='-1'/%3e %3c/g%3e %3cg%3e %3ctitle%3eLayer 1%3c/title%3e %3cpath id='svg_1' d='m132.29%2c62.34c-1.19%2c-18.77 -10.34%2c-35.36 -24.11%2c-46.46c-11.15%2c-8.99 -25.34%2c-14.38 -40.79%2c-14.38c-0.55%2c0 -1.09%2c0.01 -1.63%2c0.02c-3.32%2c0.08 -6.57%2c0.41 -9.75%2c0.98c-30.49%2c5.38 -53.65%2c32 -53.65%2c64.04c0%2c1.87 0.08%2c3.73 0.24%2c5.57c2.5%2c29.51 24.7%2c53.4 53.41%2c58.47c2.38%2c0.42 4.8%2c0.72 7.26%2c0.86c0.83%2c0.05 1.66%2c0.09 2.5%2c0.11c0.54%2c0.01 1.08%2c0.02 1.63%2c0.02c34.04%2c0 61.97%2c-26.16 64.79%2c-59.46c0.16%2c-1.83 0.24%2c-3.69 0.24%2c-5.57c0%2c-1.42 -0.05%2c-2.82 -0.14%2c-4.2zm-76.27%2c32.5c-0.26%2c0.01 -0.53%2c0.01 -0.79%2c0.01c-14.56%2c0 -26.88%2c-9.57 -31.03%2c-22.76c-0.97%2c-3.08 -1.49%2c-6.35 -1.49%2c-9.75c0%2c-17.95 14.56%2c-32.52 32.51%2c-32.52c0.26%2c0 0.53%2c0 0.79%2c0.01c3.41%2c0.08 6.69%2c0.68 9.75%2c1.74c6.5%2c2.22 12.06%2c6.45 15.97%2c11.94c1.98%2c2.78 3.54%2c5.9 4.57%2c9.25c0.94%2c3.03 1.44%2c6.24 1.44%2c9.58l-9.75%2c0c0%2c-2.18 -0.31%2c-4.29 -0.88%2c-6.28c-0.92%2c-3.23 -2.55%2c-6.17 -4.69%2c-8.64c-1.86%2c-2.14 -4.12%2c-3.93 -6.65%2c-5.25c-2.93%2c-1.54 -6.24%2c-2.46 -9.75%2c-2.58c-0.26%2c-0.01 -0.52%2c-0.01 -0.79%2c-0.01c-12.57%2c0 -22.76%2c10.19 -22.76%2c22.76c0%2c3.49 0.79%2c6.8 2.19%2c9.75c3.65%2c7.69 11.49%2c13.01 20.57%2c13.01c0.27%2c0 0.53%2c-0.01 0.79%2c-0.01l0%2c9.75zm55.7%2c-17.92c-3.35%2c10.5 -13.18%2c18.09 -24.78%2c18.09c-3.13%2c0 -6.13%2c-0.55 -8.91%2c-1.57c-2.18%2c-0.8 -4.24%2c-1.88 -6.11%2c-3.21c-2.38%2c-1.68 -4.47%2c-3.76 -6.16%2c-6.13c-0.28%2c-0.39 -0.55%2c-0.79 -0.81%2c-1.2c-2.03%2c-3.2 -3.38%2c-6.87 -3.85%2c-10.82l9.87%2c0c0.33%2c1.71 0.92%2c3.32 1.74%2c4.8c1.61%2c2.91 4.09%2c5.26 7.09%2c6.72c0.57%2c0.28 1.15%2c0.53 1.76%2c0.73c1.68%2c0.6 3.49%2c0.92 5.37%2c0.92c7.92%2c0 14.52%2c-5.67 15.96%2c-13.17c0.2%2c-1 0.3%2c-2.04 0.3%2c-3.09c0%2c-2.37 -0.51%2c-4.63 -1.43%2c-6.67c-1.66%2c-3.71 -4.68%2c-6.68 -8.43%2c-8.28l3.54%2c-9.1c7.43%2c3.08 13.13%2c9.49 15.21%2c17.38c0.44%2c1.64 0.72%2c3.34 0.81%2c5.09c0.04%2c0.52 0.05%2c1.05 0.05%2c1.58c0%2c1.05 -0.07%2c2.07 -0.18%2c3.09c-0.18%2c1.68 -0.54%2c3.3 -1.04%2c4.84z' class='st0'/%3e %3cg id='svg_2'%3e %3cg id='svg_3'%3e %3crect id='svg_4' height='6.34' width='94.12' class='st0' y='20.46' x='163.29'/%3e %3c/g%3e %3cg id='svg_5'%3e %3cpath id='svg_6' d='m169.31%2c113.72l0%2c-6.34c6.49%2c0 11.77%2c-5.28 11.77%2c-11.77l0%2c-71.98l6.34%2c0l0%2c71.98c0%2c9.98 -8.12%2c18.11 -18.11%2c18.11z' class='st0'/%3e %3c/g%3e %3cg id='svg_7'%3e %3cpath id='svg_8' d='m255.49%2c91.27l-6.34%2c0l0%2c-38.2c0%2c-5.06 -4.12%2c-9.18 -9.18%2c-9.18l-19.37%2c0c-5.06%2c0 -9.18%2c4.12 -9.18%2c9.18l0%2c38.2l-6.34%2c0l0%2c-38.2c0%2c-8.55 6.96%2c-15.51 15.51%2c-15.51l19.38%2c0c8.55%2c0 15.51%2c6.96 15.51%2c15.51l0%2c38.2l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_9'%3e %3crect id='svg_10' height='17.09' width='6.34' class='st0' y='23.63' x='227.12'/%3e %3c/g%3e %3cg id='svg_11'%3e %3cpath id='svg_12' d='m206.43%2c113.84l-3.34%2c0l0%2c-6.34l3.34%2c0c6.3%2c0 12.9%2c-3.56 15.35%2c-8.29c3.49%2c-6.71 5.33%2c-14.25 5.33%2c-21.81l0%2c-26.13l6.34%2c0l0%2c26.13c0%2c8.58 -2.09%2c17.13 -6.05%2c24.74c-3.98%2c7.68 -13.57%2c11.7 -20.97%2c11.7z' class='st0'/%3e %3c/g%3e %3cg id='svg_13'%3e %3cpath id='svg_14' d='m257.48%2c113.84l-3.34%2c0c-7.4%2c0 -16.98%2c-4.02 -20.98%2c-11.7c-3.96%2c-7.61 -6.05%2c-16.16 -6.05%2c-24.74l6.34%2c0c0%2c7.56 1.84%2c15.1 5.33%2c21.81c2.46%2c4.73 9.06%2c8.29 15.35%2c8.29l3.34%2c0l0%2c6.34l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_15'%3e %3crect id='svg_16' height='6.34' width='42.87' class='st0' y='27.89' x='274.07'/%3e %3c/g%3e %3cg id='svg_17'%3e %3crect id='svg_18' height='61.38' width='6.34' class='st0' y='14.89' x='293.05'/%3e %3c/g%3e %3cg id='svg_19'%3e %3crect id='svg_20' height='6.34' width='33.26' class='st0' transform='matrix(0.11%2c-0.9939%2c0.9939%2c0.11%2c194.7608%2c392.0006) ' y='46.985071' x='325.728637'/%3e %3c/g%3e %3cg id='svg_21'%3e %3crect id='svg_22' height='33.26' width='6.34' class='st0' transform='matrix(0.9939%2c-0.11%2c0.11%2c0.9939%2c-7.5075%2c38.3801) ' y='37.060893' x='310.495485'/%3e %3c/g%3e %3cg id='svg_23'%3e %3cpath id='svg_24' d='m352.9%2c77.14l-15.15%2c0c-7.52%2c0 -13.64%2c-6.12 -13.64%2c-13.63l0%2c-29.61c0%2c-7.52 6.12%2c-13.64 13.64%2c-13.64l15.15%2c0c7.52%2c0 13.64%2c6.12 13.64%2c13.64l0%2c29.61c0%2c7.52 -6.12%2c13.63 -13.64%2c13.63zm-15.15%2c-50.54c-4.02%2c0 -7.3%2c3.27 -7.3%2c7.3l0%2c29.61c0%2c4.02 3.27%2c7.3 7.3%2c7.3l15.15%2c0c4.02%2c0 7.3%2c-3.27 7.3%2c-7.3l0%2c-29.61c0%2c-4.02 -3.27%2c-7.3 -7.3%2c-7.3l-15.15%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_25'%3e %3cg id='svg_26'%3e %3crect id='svg_27' height='6.34' width='17.8' class='st0' y='37.2' x='336.43'/%3e %3c/g%3e %3cg id='svg_28'%3e %3crect id='svg_29' height='6.34' width='17.8' class='st0' y='53.87' x='336.43'/%3e %3c/g%3e %3c/g%3e %3cg id='svg_30'%3e %3cpath id='svg_31' d='m352.7%2c113.84l-37.98%2c0c-8%2c0 -14.5%2c-6.51 -14.5%2c-14.5l0%2c-16.14l6.34%2c0l0%2c16.13c0%2c4.5 3.66%2c8.17 8.17%2c8.17l37.98%2c0l0%2c6.34l-0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_32'%3e %3crect id='svg_33' height='6.34' width='23.57' class='st0' transform='matrix(0.2529%2c-0.9675%2c0.9675%2c0.2529%2c114.4986%2c402.9877) ' y='83.698593' x='326.836101'/%3e %3c/g%3e %3cg id='svg_34'%3e %3crect id='svg_35' height='6.34' width='20.52' class='st0' y='86.2' x='321.58'/%3e %3c/g%3e %3cg id='svg_36'%3e %3crect id='svg_37' height='24.75' width='6.34' class='st0' transform='matrix(0.9556%2c-0.2946%2c0.2946%2c0.9556%2c-19.7967%2c122.424) ' y='75.874073' x='369.686666'/%3e %3c/g%3e %3cg id='svg_38'%3e %3crect id='svg_39' height='6.34' width='71.83' class='st0' y='20.46' x='395.51'/%3e %3c/g%3e %3cg id='svg_40'%3e %3crect id='svg_41' height='6.34' width='90.81' class='st0' y='57.44' x='386.02'/%3e %3c/g%3e %3cg id='svg_42'%3e %3cpath id='svg_43' d='m463.12%2c113.64l-56%2c0c-4.5%2c0 -8.59%2c-2.29 -10.94%2c-6.14c-2.35%2c-3.84 -2.52%2c-8.53 -0.46%2c-12.53l17.68%2c-35.81l5.64%2c2.89l-17.68%2c35.81c-1.04%2c2.02 -0.95%2c4.39 0.23%2c6.33c1.19%2c1.94 3.25%2c3.1 5.53%2c3.1l56%2c0c1.51%2c0 2.88%2c-0.71 3.74%2c-1.95c0.81%2c-1.16 1.03%2c-2.57 0.63%2c-3.91l-7.8%2c-12.34l5.36%2c-3.39l8.18%2c12.94l0.12%2c0.31c1.24%2c3.34 0.76%2c7.08 -1.28%2c10.01c-2.04%2c2.94 -5.39%2c4.68 -8.95%2c4.68z' class='st0'/%3e %3c/g%3e %3c/g%3e %3c/g%3e%3c/svg%3e",height:"30"})}),t,n(O,{navbar:!0,children:[e(O.Toggle,{as:sn,className:"nav-link",children:e("img",{className:"rounded-circle",width:"25",height:"25",src:a.avatar})}),e(O.Menu,{className:"shadow",children:r})]})]})})}const dn=o.header(an||(an=re(["\n height: 54px;\n"])));function un(t){let{children:r,title:i,className:o,...a}=t;return e(A,{className:Y("border-0 shadow-sm mb-3",o),...a,children:n("div",{className:"card-body",children:[i&&n(c,{children:[e("h5",{children:i}),e("hr",{})]}),r]})})}function hn(n){let{errors:c}=n;return c?e(L,{variant:"danger",children:e("ul",{className:"mb-0",children:"string"==typeof c?e("li",{children:c}):Object.entries(c).map((n=>{let[c,t]=n;return e("li",{children:t},c)}))})}):null}function mn(n){let{require:t,children:r,fallback:i}=n;const[o]=rn();let a=!1;return"function"==typeof t?a=t(o):("string"==typeof t&&(t=[t]),a=$(o.roles,t).length>0),a||(r=i),e(c,{children:r})}var gn,pn;function fn(n){let{children:c,size:t="small"}=n;"string"==typeof t&&(t={small:8,middle:16,large:24}[t]);const r=w.map(c,(n=>{if(n)return e(bn,{children:n})}));return e(vn,{size:t,children:r})}const vn=o.div(gn||(gn=re(["\n display: inline-flex;\n align-items: center;\n gap: ","px;\n"])),(e=>e.size)),bn=o.div(pn||(pn=re(["\n\n"])));var xn;function yn(){return yn=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var c=arguments[n];for(var t in c)Object.prototype.hasOwnProperty.call(c,t)&&(e[t]=c[t])}return e},yn.apply(this,arguments)}const wn=e=>p.createElement("svg",yn({className:"step_check_svg__icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),xn||(xn=p.createElement("path",{d:"M887.904 298.208c-12.864-12.064-33.152-11.488-45.216 1.408L415.936 753.984l-233.12-229.696c-12.608-12.416-32.864-12.288-45.28.32-12.416 12.576-12.256 32.864.352 45.248l256.48 252.672c.096.096.224.128.32.224s.128.224.224.32c2.016 1.92 4.448 3.008 6.784 4.288 1.152.672 2.144 1.664 3.36 2.144 3.776 1.472 7.776 2.24 11.744 2.24 4.192 0 8.384-.832 12.288-2.496 1.312-.544 2.336-1.664 3.552-2.368 2.4-1.408 4.896-2.592 6.944-4.672.096-.096.128-.256.224-.352.064-.096.192-.128.288-.224L889.28 343.424c12.16-12.832 11.488-33.088-1.376-45.216z"})));var kn;function _n(n){return e(zn,{icons:{finish:e(wn,{}),error:e(c,{})},...n})}_n.Step=ee.Step;const zn=o(ee)(kn||(kn=re(["\n .rc-steps-item-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n & > .rc-steps-icon {\n top: 0;\n }\n }\n\n .rc-steps-item-process {\n .rc-steps-item-icon {\n background: var(--bs-primary);\n border-color: var(--bs-primary);\n }\n }\n\n .rc-steps-item-finish {\n .rc-steps-item-icon {\n border-color: var(--bs-primary);\n\n & > .rc-steps-icon {\n color: var(--bs-primary);\n }\n }\n\n .rc-steps-item-title:after {\n background-color: var(--bs-primary);\n }\n }\n\n"])));function Cn(){}function Sn(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}function Nn(n){let{total:c=0,onChange:t=Cn,defaultCurrent:r=1,defaultPageSize:i=10,className:o,...a}=n;const[s,l]=b(r),[d,u]=b(i);x((()=>{Sn(a.current)&&l(a.current)}),[a.current]),x((()=>{Sn(a.pageSize)&&u(a.pageSize)}),[a.pageSize]);const h=v((()=>Math.floor((c-1)/d)+1),[c,d]),m=k((e=>()=>{e!==s&&(l(e),t(e,d))}),[t,s,d]),g=s-1>0?s-1:0,p=s+1<h?s+1:h,f=[];let y=null,w=null,_=null,z=null;if(h<=7)for(let n=1;n<=h;n+=1){const c=s===n;f.push(e(I.Item,{active:c,onClick:m(n),children:n},n))}else{z=e(I.Last,{onClick:m(h)},"last"),_=e(I.First,{onClick:m(1)},"first"),y=e(I.Prev,{onClick:m(g)},"prev"),w=e(I.Next,{onClick:m(p)},"next");let n=Math.max(1,s-2),c=Math.min(s+2,h);s-1<=2&&(c=5),h-s<=2&&(n=h-4);for(let t=n;t<=c;t+=1){const n=s===t;f.push(e(I.Item,{active:n,onClick:m(t),children:t},t))}s-1>=4&&3!==s&&f.unshift(y),h-s>=4&&s!==h-2&&f.push(w),1!==n&&f.unshift(_),c!==h&&f.push(z)}return e(I,{className:o,children:f})}function jn(n){let{className:t,value:r,locale:i="zh-CN",currency:o=!0}=n;const a=v((()=>{let e={};return e=o?{style:"currency",currency:"CNY",...e}:{minimumFractionDigits:2},new Intl.NumberFormat(i,e)}),[o,i]);return t?e("span",{className:t,children:a.format(r)}):e(c,{children:a.format(r)})}function En(n){let{loading:c,children:t,...r}=n;return e(P,{...r,disabled:c,children:c?"Loading…":t})}function Ln(e){let{url:n,method:c,confirm:t,onSuccess:r,children:i,disabled:o,as:a=P,...s}=e;const[l,d]=b(!1),u=k((async e=>{e.preventDefault();try{if(d(!0),t&&!await je.confirm({text:t}))return;const e="string"==typeof n?{url:n,method:c}:{method:c,...n},i=await Ze(e);r&&r(i)}catch(e){if(!G.isAxiosError(e))throw e;{let n=e.errors;"string"!=typeof e.errors&&(n=Object.values(e.errors).join("<br />")),je.error({text:n})}}finally{d(!1)}}),[n,c,d]);return _(a,{...s,disabled:o||l,onClick:u},i)}function Un(n){let{to:c,replace:t,...r}=n,i=g();return e(P,{...r,onClick:e=>{e.preventDefault(),i(c,{replace:t})}})}const On=require("ajv-i18n/localize/zh"),An={upload:function(n){const{widgets:c}=ce(),t={...n.options,async onUpload(e){if(n.options.onUpload instanceof Function)return await n.options.onUpload.call(e);if(n.options.endpoint){const c=new FormData;c.set("file",e);const{url:t}=await Ze({url:n.options.endpoint,method:"post",data:c});return t}}};return e(c.upload,{...n,options:t})}},In=z(((n,c)=>{let{action:t,method:r="post",onSuccess:i,formData:o,onSubmit:a,onChange:s,submitText:l="提交",children:d,...u}=n;const[h,m]=b(),[g,p]=b(!1),[f,v]=b(o),x=k((async(e,n)=>{try{if(p(!0),t){const{formData:n}=e;try{const e=await Ze({url:t,method:r,data:n});m(void 0),i&&await i(e)}catch(e){throw G.isAxiosError(e)&&m((e=>{const n=e.errors;return"string"==typeof n?{__errors:[n]}:J(n,(e=>({__errors:[e]})))})(e)),e}}else a&&await a(e,n)}finally{p(!1)}}),[t,r,a]),y=k((e=>{const{formData:n}=e;v(n),s&&s(e)}),[v,s]),w=k((e=>(e=e.map((e=>({keyword:e.name,dataPath:e.property,...e}))),On(e),e)),[]),_=e(En,{loading:g,type:"submit",variant:"primary",children:l});return"function"==typeof d&&(d=d({submit:_,loading:g})),e(ne,{ref:c,extraErrors:h,onSubmit:x,transformErrors:w,noHtml5Validate:!0,noValidate:!0,...u,formData:f,onChange:y,widgets:An,children:d||e("div",{className:"col-12",children:_})})}));var Pn,Dn,Bn,Fn,Rn;function Tn(c){let{title:t,children:r,extra:i}=c;return n(qn,{children:[e(Mn,{children:n("div",{className:"container",children:[e(Kn,{children:t}),e(Gn,{children:i})]})}),e(Hn,{className:"container",children:r})]})}const qn=o.div(Pn||(Pn=re(["\n width: 100%;\n"]))),Mn=o.div(Dn||(Dn=re(["\n background-color: #fff;\n display: flex;\n\n .container {\n padding: 0 24px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n"]))),Hn=o.div(Bn||(Bn=re(["\n margin-top: 24px;\n"]))),Kn=o.div(Fn||(Fn=re(["\n font-size: 22px;\n line-height: 64px;\n height: 64px;\n"]))),Gn=o.div(Rn||(Rn=re(["\n\n"])));const Vn=function(n){let{indeterminate:c=!1,...t}=n;const r=C(null);return x((()=>{r.current&&(r.current.indeterminate=c)}),[c]),e("input",{ref:r,...t,className:"form-check-input",type:"checkbox"})};var Wn,Yn,$n,Jn,Qn,Xn;const Zn=o(D)(Wn||(Wn=re(["\n .rc-table-thead {\n border-top: none;\n }\n"]))),ec={table:n=>e(Zn,{...n,className:"align-middle table-hover"})},nc=o(Nn)(Yn||(Yn=re(["\n margin-bottom: 0;\n justify-content: flex-end;\n"])));function cc(e){return"current_page"in e}const tc=z(((t,r)=>{let{source:i,rowKey:o="id",paginate:a=!0,toolBarRender:s,columns:l=[],search:d,rowSelection:u,card:h=!0,...m}=t;const[g,p]=b([]),[f,y]=b(a?{total:0,current:1,pageSize:10}:null),[w,_]=b(!0),[z,N]=b(""),j=k((async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};_(!0);try{let n;if("string"==typeof i){const c={q:z};f&&(c.page=e.page||f.current),n=await Ze({url:i,params:c})}else n=await i();a&&cc(n)&&(y({total:n.total,current:n.current_page,pageSize:n.per_page}),n=n.data),p(n)}catch(e){}finally{_(!1)}}),[i,p,f,z]);x((()=>{j()}),[z]);const E=C({reload:j});x((()=>{E.current={reload:j}}),[j]),S(r,(()=>E.current));const[L]=function(n,c,t){const[r,i]=b((()=>new Set((null==n?void 0:n.selectedRowKeys)||[]))),o=e=>"string"==typeof c?e[c]:c(e),a=e=>t.find((n=>o(n)===e)),s=k((e=>{i(e);const c=Array.from(e),t=c.map((function(e){return a(e)}));null!=n&&n.onChange&&(null==n||n.onChange(c,t))}),[a]);return[k((c=>{if(!n)return c;const i=t.map(o),a=i.every((function(e){return r.has(e)})),l=i.some((function(e){return r.has(e)}));return[{key:"selection",title:e(Vn,{checked:a,indeterminate:!a&&l,onChange:()=>{a?i.forEach((function(e){r.delete(e)})):i.forEach((function(e){r.add(e)})),s(new Set(r))}}),width:30,align:"center",render(n){let{record:c}=n;const t=o(c),i=r.has(t);return e(Vn,{checked:i,onChange:()=>{i?r.delete(t):r.add(t),s(new Set(r))}})}},...c]}),[t,n,r])]}(u,o,g),U=v((()=>L(l).map((e=>{const n={...e,render:void 0};if("render"in e&&e.render){const c=e.render;n.render=(e,n,t)=>c({value:e,record:n,index:t,action:E.current})}return n}))),[l,L,E]),O=function(e,n,c){const t=C(e),r=C(Q(e,n,c));return x((()=>{t.current=e})),x((()=>{r.current=Q((function(){t.current(...arguments)}),n,c)}),[n,c]),r.current}((e=>{N(e.target.value)}),500),A=n(c,{children:[e(Ve,{loading:w}),!1!==s&&n(rc,{children:[e(oc,{size:12,children:s&&s(E.current)}),n(ic,{size:12,children:[d&&e(B.Control,{onChange:O,type:"search",placeholder:"Search..."}),e(ac,{onClick:E.current.reload,children:e("i",{className:"bi bi-arrow-repeat"})})]})]}),e(te,{...m,rowKey:o,columns:U,components:ec,data:g}),f&&e(nc,{...f,onChange:e=>{j({page:e})}})]});return h?e(un,{children:A}):A})),rc=o.div($n||($n=re(["\n display: flex;\n justify-content: space-between;\n padding-bottom: 1rem;\n height: 48px;\n border-bottom: 2px solid #212529;\n"]))),ic=o(fn)(Jn||(Jn=re(["\n\n"]))),oc=o(fn)(Qn||(Qn=re(["\n\n"]))),ac=o.span(Xn||(Xn=re(["\n cursor: pointer;\n font-size: 20px;\n line-height: 1;\n\n &:hover {\n color: var(--bs-primary);\n }\n"]))),sc=z(((t,r)=>{let{text:i,variant:o,header:a=i,footer:s=!0,onOk:l,size:d,okText:u="确定",onShow:h,children:m,as:g=P}=t;const[p,f]=b(!1),[v,x]=b(!1),y=()=>f(!1);S(r,(()=>({close:y})));const w=_(g,{variant:o,onClick:()=>f(!0)},i);return n(c,{children:[w,n(F,{size:d,show:p,onHide:y,onShow:h,children:[a&&e(F.Header,{closeButton:!0,children:e(F.Title,{as:"h5",children:a})}),e(F.Body,{children:m}),s&&n(F.Footer,{children:[e(P,{variant:"secondary",onClick:y,children:"取消"}),e(En,{loading:v,variant:"primary",onClick:async()=>{if(l){x(!0);const e=await l();if(x(!1),!1===e)return}y()},children:u})]})]})]})}));function lc(n){let{text:c,header:t,schema:r,uiSchema:i,action:o,method:a,formData:s,variant:l,onSuccess:d,onChange:u,fields:h,size:m,as:g}=n;const p=C(null),f=k((async()=>{try{var e;return await(null===(e=p.current)||void 0===e?void 0:e.submit()),!0}catch{return!1}}),[]);return e(sc,{as:g,text:c,onOk:f,header:t,variant:l,size:m,children:e(In,{ref:p,schema:r,uiSchema:i,action:o,method:a,formData:s,fields:h,onChange:u,onSuccess:d,children:e(N,{})})})}function dc(e){let{manual:n,refreshDeps:c,...t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{execute:r,currentParams:i,error:o,...a}=H((async n=>(e="string"==typeof e?{url:e}:e,await Ze({...e,...n}))),t);x((()=>{n||c||r()}),[]),x((()=>{c&&s()}),c);const s=k((()=>{i?r(...i):r()}),[r,i]);if(o&&Xe(o)){const e=o.errors;o=new Error("string"==typeof e?e:X(e).join(""))}return{refresh:s,execute:r,error:o,...a}}let uc=0;function hc(){let{onHide:e,onShow:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[c,t]=b(!1),[r,i]=b("visible-".concat(uc)),o=k((()=>{t(!1),e&&e()}),[t,e]),a=k((()=>{i("visible-".concat(++uc))}),[i,uc]),s=k((()=>{t(!0),n&&n()}),[t,n]),l={show:c,onHide:o,onExited:a,key:r};return{visible:c,show:s,hide:o,state:l}}function mc(n){let{tooltip:c,children:t,placement:r="bottom"}=n;return e(R,{placement:r,overlay:e(T,{id:Z(),children:c}),children:t})}export{mn as Access,un as Card,Tn as Content,hn as Error,ae as Footer,In as Form,ln as Header,Un as LinkButton,Ve as Loader,En as LoadingButton,je as Message,sc as ModalButton,lc as ModalForm,jn as NumberFormat,Nn as Pagination,Ln as RequestButton,qe as Result,xe as SiderLayout,fn as Space,_n as Steps,tc as Table,Ue as Toast,mc as Tooltip,tn as UserProvider,nn as createApplication,Xe as isRequestError,Ze as request,hc as useOverlayState,dc as useRequest,rn as useUser};
|
|
1
|
+
import{jsx as e,jsxs as n,Fragment as c}from"react/jsx-runtime";import t,{SubMenu as r,MenuItem as i}from"rc-menu";import o from"styled-components";export{createGlobalStyle,css,keyframes,default as styled}from"styled-components";import{useRoutes as a,useLocation as s,Link as l,Navigate as d,BrowserRouter as u,Routes as h,Route as m,useNavigate as g}from"react-router-dom";export{Link,useRoutes}from"react-router-dom";import*as p from"react";import f,{useMemo as v,useState as b,useEffect as x,useContext as y,Children as w,useCallback as k,createElement as _,forwardRef as z,useRef as C,useImperativeHandle as S,Fragment as N}from"react";import j from"sweetalert2/dist/sweetalert2.js";import E from"sweetalert2-react-content";import{Alert as L,Spinner as U,Dropdown as O,Card as A,Pagination as I,Button as P,Table as D,Form as B,Modal as F,OverlayTrigger as R,Tooltip as T}from"react-bootstrap";import q from"rc-notification";import{useAsync as M,useAsyncCallback as H}from"react-async-hook";import K from"query-string";import G from"axios";import*as V from"retry-axios";import*as W from"path";import Y from"classnames";import{intersection as $,mapValues as J,debounce as Q,values as X,uniqueId as Z}from"lodash";import ee from"rc-steps";import"rc-steps/assets/index.css";import ne,{getRegistry as ce}from"@topthink/json-form";import te from"rc-table";export{Navigate,Outlet,useLocation,useNavigate,useOutlet,useParams}from"react-router";function re(e,n){return n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}var ie;const oe=o.footer(ie||(ie=re(["\n\n"])));function ae(){return e(oe,{children:e("div",{className:"container"})})}const se=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/";const c=[];for(const a of e){var t,r,i,o;if(null!==(t=a.meta)&&void 0!==t&&t.hideInMenu)continue;const e=null===(r=a.meta)||void 0===r?void 0:r.title;if(!e)continue;let s=a.path||"";s="".concat(n,"/").concat(s),s=s.replace(/\/+/,"/").replace(/\/$/,"");const l={title:e,icon:null===(i=a.meta)||void 0===i?void 0:i.icon,path:s,children:[]};null!==(o=a.meta)&&void 0!==o&&o.hideChildrenInMenu||a.children&&a.children.length>0&&(l.children=se(a.children,s)),c.push(l)}return c};var le,de,ue,he,me,ge;const pe=t=>t.map((t=>{const o=n(c,{children:[t.icon&&e("i",{className:"bi bi-".concat(t.icon)}),t.title]});return t.children.length>0?e(r,{title:o,children:pe(t.children)},t.path):e(i,{children:e(l,{to:t.path,children:o})},t.path)})),fe=()=>({height:0}),ve=e=>({height:e.scrollHeight}),be={motionName:"rc-menu-collapse",motionAppear:!0,onAppearStart:fe,onAppearActive:ve,onEnterStart:fe,onEnterActive:ve,onLeaveStart:ve,onLeaveActive:fe};function xe(c){let{routes:t,basename:r,title:i}=c;const o=a(t),l=v((()=>function(e){return se(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/")}(t,r)),[t,r]),{pathname:d}=s(),u=v((()=>{const e=[];return d.split("/").reduce(((n,c)=>(n.length>1&&e.push(n.join("/")),[...n,c])),[]),e.push(d),e}),[d]),[h,m]=b([]);x((()=>{m(u.slice(0,-1))}),[u]);return n(ye,{children:[n(we,{children:[e(ke,{children:i}),e(Ce,{mode:"inline",motion:be,openKeys:h,onOpenChange:e=>{const n=e[e.length-1];m(e.filter((e=>n.startsWith(e))))},selectedKeys:u,children:pe(l)})]}),n(_e,{children:[e(ze,{children:o}),e(ae,{})]})]})}const ye=o.div(le||(le=re(["\n display: flex;\n flex-wrap: nowrap;\n width: 100%;\n"]))),we=o.nav(de||(de=re(["\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n z-index: 100;\n padding: 54px 0 0;\n border-right: 1px solid #e3e3e3;\n width: 230px;\n background-color: #f5f5f5;\n"]))),ke=o.div(ue||(ue=re(["\n padding: 10px 0;\n height: 64px;\n line-height: 44px;\n text-indent: 24px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n font-size: 16px;\n"]))),_e=o.div(he||(he=re(["\n margin-left: 230px;\n flex: 1;\n"]))),ze=o.main(me||(me=re(["\n min-height: calc(100vh - 54px);\n position: relative;\n"]))),Ce=o(t)(ge||(ge=re(["\n border: none;\n box-shadow: none;\n padding: 0;\n\n .rc-menu-item {\n display: flex;\n\n &:hover {\n background-color: #f0f0f0;\n }\n\n a {\n flex: 1;\n text-decoration: none;\n color: dimgray;\n\n .bi {\n font-size: 16px;\n line-height: 18px;\n margin-right: 9px;\n min-width: 19px;\n text-align: center;\n vertical-align: text-bottom;\n }\n }\n }\n\n .rc-menu-sub {\n background-color: #eee;\n border-top: 1px solid #eee;\n border-bottom: 1px solid #eee;\n\n & > li {\n &:first-child {\n margin-top: 4px;\n }\n\n &:last-child {\n margin-bottom: 4px;\n }\n }\n\n .rc-menu-item-selected {\n background-color: #eee;\n color: var(--bs-primary);\n\n & > a {\n color: var(--bs-primary);\n }\n }\n\n .rc-menu-item-active {\n background-color: #eee;\n }\n\n .rc-menu-item {\n &:hover {\n background-color: #e7e7e7;\n }\n }\n }\n\n .rc-menu-submenu {\n & > .rc-menu-submenu-title {\n &:hover {\n background-color: #e7e7e7;\n }\n\n .bi {\n font-size: 16px;\n line-height: 18px;\n margin-right: 9px;\n min-width: 19px;\n text-align: center;\n vertical-align: text-bottom;\n }\n }\n }\n\n .rc-menu-submenu-active > .rc-menu-submenu-title {\n background-color: #eee;\n }\n\n .rc-menu-item,\n .rc-menu-submenu > .rc-menu-submenu-title {\n padding: 0 8px 0 24px;\n font-size: 14px;\n line-height: 36px;\n cursor: pointer;\n }\n\n .rc-menu-sub > .rc-menu-item,\n .rc-menu-sub > .rc-menu-submenu > .rc-menu-submenu-title {\n padding-top: 0;\n padding-bottom: 0;\n padding-right: 0;\n }\n\n .rc-menu-submenu-arrow {\n line-height: 38px;\n }\n\n .rc-menu-item-selected {\n background-color: #f5f5f5;\n color: var(--bs-primary);\n\n & > a {\n color: var(--bs-primary);\n }\n }\n\n .rc-menu-submenu-selected {\n background-color: #eee;\n\n & > .rc-menu-submenu-title {\n color: var(--bs-primary);\n font-weight: 500;\n }\n }\n\n & > .rc-menu-item {\n line-height: 38px;\n }\n\n & > .rc-menu-submenu {\n &.rc-menu-submenu-selected {\n background-color: #f5f5f5;\n }\n\n & > .rc-menu-submenu-title {\n line-height: 38px;\n\n &:hover {\n background-color: #f0f0f0;\n }\n }\n\n &.rc-menu-submenu-active > .rc-menu-submenu-title {\n background-color: #f5f5f5;\n }\n\n & > .rc-menu-sub {\n border-top: 1px solid #e6e6e6;\n border-bottom: 1px solid #e6e6e6;\n\n & > li {\n &:first-child {\n margin-top: 9px;\n }\n\n &:last-child {\n margin-bottom: 9px;\n }\n }\n }\n }\n\n"]))),Se=E(j),Ne={confirmButtonText:"确定",cancelButtonText:"取消"},je={confirm:async e=>{const{isConfirmed:n}=await Se.fire({...Ne,icon:"warning",showCancelButton:!0,...e});return n},error:e=>{Se.fire({...Ne,toast:!0,position:"top",icon:"error",timer:3e3,showConfirmButton:!1,...e})}};let Ee;const Le=n=>{let{type:c,...t}=n;!function(e){if(Ee)return e(Ee);q.newInstance({prefixCls:"notification",maxCount:5,style:{top:20,right:20}},(n=>{Ee?e(Ee):(Ee=n,e(n))}))}((n=>{t.duration=3;let r=c;if("error"===c)r="danger",t.duration=t.closable?0:5;t.content=e(L,{variant:r,children:t.content}),n.notice(t)}))};let Ue={};var Oe,Ae,Ie,Pe;["error","success","info"].forEach((e=>{Ue[e]=(n,c)=>{Le({...c,type:e,content:n})}}));const De=o.div(Oe||(Oe=re(["\n padding: 48px 32px;\n"]))),Be=o.div(Ae||(Ae=re(["\n margin-bottom: 24px;\n text-align: center;\n font-size: 72px;\n"]))),Fe=o.div(Ie||(Ie=re(["\n color: rgba(0, 0, 0, .85);\n font-size: 24px;\n line-height: 1.8;\n text-align: center;\n"]))),Re=o.div(Pe||(Pe=re(["\n margin-top: 32px;\n text-align: center;\n"]))),Te={success:e("i",{className:"bi bi-check-circle-fill text-success"}),error:e("i",{className:"bi bi-exclamation-circle-fill text-danger"}),info:e("i",{className:"bi bi-info-circle-fill text-info"}),warning:e("i",{className:"bi bi-exclamation-triangle-fill text-warning"})};function qe(c){let{status:t,title:r,icon:i,extra:o}=c;return!i&&t&&(i=Te[t]),n(De,{children:[i&&e(Be,{children:i}),r&&e(Fe,{children:r}),o&&e(Re,{children:o})]})}var Me,He;o.div(Me||(Me=re(["\n position: relative;\n"])));const Ke=o.div(He||(He=re(["\n display: ",";\n position: absolute;\n top: 0 !important;\n left: 0 !important;\n width: 100%;\n height: 100%;\n text-align: center;\n vertical-align: middle;\n padding: 1em;\n background-color: ",";\n opacity: ",";\n line-height: 1;\n animation-fill-mode: both;\n animation-duration: .5s;\n transition: background-color .5s linear;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n user-select: none;\n will-change: opacity;\n z-index: 990;\n"])),(e=>e.active?"flex":"none"),(e=>e.inverted?"rgba(255, 255, 255, .85)":"rgba(0, 0, 0, .85)"),(e=>e.active?1:0));var Ge;function Ve(c){let{loading:t=!0,children:r,variant:i="success",animation:o="border",wrap:a,...s}=c;return t?(r&&(r=e("p",{className:"mt-3 text-secondary",children:r})),r=n(Ke,{inverted:!0,active:!0,children:[e(U,{animation:o,variant:i,...s}),r]}),a?e(We,{height:"number"==typeof a?a:150,children:r}):r):null}const We=o.div(Ge||(Ge=re(["\n position: relative;\n height: ",";\n"])),(e=>"".concat(e.height,"px")));class Ye extends Error{constructor(e){var n,c,t;super("Unauthorized"),t=void 0,(c="url")in(n=this)?Object.defineProperty(n,c,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[c]=t,this.url=e}}function $e(n){let{onLogin:c}=n;const{result:t}=M((async()=>{await c();const e=sessionStorage.getItem("redirect_uri");return e&&sessionStorage.removeItem("redirect_uri"),e||"/"}),[]);return t?e(d,{to:t,replace:!0}):e(Ve,{})}function Je(n){let{onLogout:c}=n;return M((async()=>{await c()}),[]),e(Ve,{})}V.attach(),G.defaults.raxConfig={retryDelay:2e3,backoffType:"static",shouldRetry:e=>{var n,c;return"GET"===(null===(n=e.config.method)||void 0===n?void 0:n.toUpperCase())&&449===(null===(c=e.response)||void 0===c?void 0:c.status)}},G.defaults.maxContentLength=1/0,G.defaults.maxBodyLength=1/0,G.defaults.baseURL="/api",G.interceptors.request.use((e=>{const n=sessionStorage.getItem("authorization");return n&&(e.headers={...e.headers,Authorization:"Bearer ".concat(n)}),e}),(e=>Promise.reject(e)));const Qe=e=>e&&"object"==typeof e;G.interceptors.response.use((e=>(201===e.status&&e.data.location&&(window.location.href=e.data.location,e.data=void 0),e)),(e=>{if(G.isAxiosError(e)&&e.response){const{data:n,status:c}=e.response;401===c?(e.errors="Unauthorized",Qe(n)&&n.url&&(e=new Ye(n.url)),Ue.error("Unauthorized")):Qe(n)?422===c?e.errors=n:"message"in n&&(e.errors=n.message):e.errors=n}return Promise.reject(e)}));const Xe=G.isAxiosError,Ze=async function(e){e="string"==typeof e?{url:e}:e;const{data:n}=await G.request({paramsSerializer:function(e){return K.stringify(e,{sort:!1,skipNull:!0,skipEmptyString:!0})},...e});return n};Ze.defaults=G.defaults,Ze.interceptors=G.interceptors;const en=f.createContext({});function nn(c){const{basename:t="/",onLogin:r,onLogout:i,authentication:o,baseURL:a,userResolver:s}=c;a&&(Ze.defaults.baseURL=a),"token"===o&&Ze.interceptors.request.use((e=>{const n=sessionStorage.getItem("authorization");return n&&(e.headers={...e.headers,Authorization:"Bearer ".concat(n)}),e}));const l=e=>{window.location.pathname!==W.join(t,"/logout")&&sessionStorage.setItem("redirect_uri",function(e,n){return"/"===n?e:e.slice(n.length)}(window.location.pathname+window.location.search,t));const n=window.location.origin+W.join(t,"/login");window.location.href=K.stringifyUrl({url:e.url,query:{redirect_uri:n}})},d=async()=>{let e;if(r)e=await r();else{const n=K.parse(window.location.hash.substr(1));n.access_token&&(e=n.access_token)}"token"===o&&e&&sessionStorage.setItem("authorization",e)},g=async()=>{if(i)try{await i()}catch(e){e instanceof Ye&&l(e)}"token"===o&&sessionStorage.removeItem("authorization")};return function(c){let{children:r}=c;return e(en.Provider,{value:{userResolver:s,onUnauthorized:l},children:e(u,{basename:t,children:n(h,{children:[e(m,{path:"*",element:r}),e(m,{path:"login",element:e($e,{onLogin:d})}),e(m,{path:"logout",element:e(Je,{onLogout:g})})]})})})}}const cn=f.createContext(null),tn=function(n){let{children:c}=n;const[t,r]=b(null),{userResolver:i,onUnauthorized:o}=y(en);return M((async()=>{if(i)return i()}),[],{onError(e){e instanceof Ye&&o&&o(e)},onSuccess(e){e&&r(e)}}),t?e(cn.Provider,{value:[t,r],children:c}):e(Ve,{})};function rn(){const e=y(cn);if(!e)throw new Error("please use `useUser` in UserContext");return e}var on,an;const sn=o.a(on||(on=re(["\n cursor: pointer;\n"])));function ln(c){let{children:t,menus:r,className:i,logo:o=!0}=c;const[a]=rn();return e(dn,{className:Y("navbar navbar-expand-lg navbar-light bg-white border-bottom sticky-top",i),children:n("div",{className:"container-fluid",children:[o&&e("a",{className:"navbar-brand",href:"https://www.topthink.com",children:e("img",{src:"data:image/svg+xml,%3csvg width='485' height='132' xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='enable-background:new 0 0 531.69 198.43%3b' version='1.1'%3e %3cstyle type='text/css'%3e.st0%7bfill:%233C60FF%3b%7d%3c/style%3e %3cg%3e %3ctitle%3ebackground%3c/title%3e %3crect fill='none' id='canvas_background' height='134' width='487' y='-1' x='-1'/%3e %3c/g%3e %3cg%3e %3ctitle%3eLayer 1%3c/title%3e %3cpath id='svg_1' d='m132.29%2c62.34c-1.19%2c-18.77 -10.34%2c-35.36 -24.11%2c-46.46c-11.15%2c-8.99 -25.34%2c-14.38 -40.79%2c-14.38c-0.55%2c0 -1.09%2c0.01 -1.63%2c0.02c-3.32%2c0.08 -6.57%2c0.41 -9.75%2c0.98c-30.49%2c5.38 -53.65%2c32 -53.65%2c64.04c0%2c1.87 0.08%2c3.73 0.24%2c5.57c2.5%2c29.51 24.7%2c53.4 53.41%2c58.47c2.38%2c0.42 4.8%2c0.72 7.26%2c0.86c0.83%2c0.05 1.66%2c0.09 2.5%2c0.11c0.54%2c0.01 1.08%2c0.02 1.63%2c0.02c34.04%2c0 61.97%2c-26.16 64.79%2c-59.46c0.16%2c-1.83 0.24%2c-3.69 0.24%2c-5.57c0%2c-1.42 -0.05%2c-2.82 -0.14%2c-4.2zm-76.27%2c32.5c-0.26%2c0.01 -0.53%2c0.01 -0.79%2c0.01c-14.56%2c0 -26.88%2c-9.57 -31.03%2c-22.76c-0.97%2c-3.08 -1.49%2c-6.35 -1.49%2c-9.75c0%2c-17.95 14.56%2c-32.52 32.51%2c-32.52c0.26%2c0 0.53%2c0 0.79%2c0.01c3.41%2c0.08 6.69%2c0.68 9.75%2c1.74c6.5%2c2.22 12.06%2c6.45 15.97%2c11.94c1.98%2c2.78 3.54%2c5.9 4.57%2c9.25c0.94%2c3.03 1.44%2c6.24 1.44%2c9.58l-9.75%2c0c0%2c-2.18 -0.31%2c-4.29 -0.88%2c-6.28c-0.92%2c-3.23 -2.55%2c-6.17 -4.69%2c-8.64c-1.86%2c-2.14 -4.12%2c-3.93 -6.65%2c-5.25c-2.93%2c-1.54 -6.24%2c-2.46 -9.75%2c-2.58c-0.26%2c-0.01 -0.52%2c-0.01 -0.79%2c-0.01c-12.57%2c0 -22.76%2c10.19 -22.76%2c22.76c0%2c3.49 0.79%2c6.8 2.19%2c9.75c3.65%2c7.69 11.49%2c13.01 20.57%2c13.01c0.27%2c0 0.53%2c-0.01 0.79%2c-0.01l0%2c9.75zm55.7%2c-17.92c-3.35%2c10.5 -13.18%2c18.09 -24.78%2c18.09c-3.13%2c0 -6.13%2c-0.55 -8.91%2c-1.57c-2.18%2c-0.8 -4.24%2c-1.88 -6.11%2c-3.21c-2.38%2c-1.68 -4.47%2c-3.76 -6.16%2c-6.13c-0.28%2c-0.39 -0.55%2c-0.79 -0.81%2c-1.2c-2.03%2c-3.2 -3.38%2c-6.87 -3.85%2c-10.82l9.87%2c0c0.33%2c1.71 0.92%2c3.32 1.74%2c4.8c1.61%2c2.91 4.09%2c5.26 7.09%2c6.72c0.57%2c0.28 1.15%2c0.53 1.76%2c0.73c1.68%2c0.6 3.49%2c0.92 5.37%2c0.92c7.92%2c0 14.52%2c-5.67 15.96%2c-13.17c0.2%2c-1 0.3%2c-2.04 0.3%2c-3.09c0%2c-2.37 -0.51%2c-4.63 -1.43%2c-6.67c-1.66%2c-3.71 -4.68%2c-6.68 -8.43%2c-8.28l3.54%2c-9.1c7.43%2c3.08 13.13%2c9.49 15.21%2c17.38c0.44%2c1.64 0.72%2c3.34 0.81%2c5.09c0.04%2c0.52 0.05%2c1.05 0.05%2c1.58c0%2c1.05 -0.07%2c2.07 -0.18%2c3.09c-0.18%2c1.68 -0.54%2c3.3 -1.04%2c4.84z' class='st0'/%3e %3cg id='svg_2'%3e %3cg id='svg_3'%3e %3crect id='svg_4' height='6.34' width='94.12' class='st0' y='20.46' x='163.29'/%3e %3c/g%3e %3cg id='svg_5'%3e %3cpath id='svg_6' d='m169.31%2c113.72l0%2c-6.34c6.49%2c0 11.77%2c-5.28 11.77%2c-11.77l0%2c-71.98l6.34%2c0l0%2c71.98c0%2c9.98 -8.12%2c18.11 -18.11%2c18.11z' class='st0'/%3e %3c/g%3e %3cg id='svg_7'%3e %3cpath id='svg_8' d='m255.49%2c91.27l-6.34%2c0l0%2c-38.2c0%2c-5.06 -4.12%2c-9.18 -9.18%2c-9.18l-19.37%2c0c-5.06%2c0 -9.18%2c4.12 -9.18%2c9.18l0%2c38.2l-6.34%2c0l0%2c-38.2c0%2c-8.55 6.96%2c-15.51 15.51%2c-15.51l19.38%2c0c8.55%2c0 15.51%2c6.96 15.51%2c15.51l0%2c38.2l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_9'%3e %3crect id='svg_10' height='17.09' width='6.34' class='st0' y='23.63' x='227.12'/%3e %3c/g%3e %3cg id='svg_11'%3e %3cpath id='svg_12' d='m206.43%2c113.84l-3.34%2c0l0%2c-6.34l3.34%2c0c6.3%2c0 12.9%2c-3.56 15.35%2c-8.29c3.49%2c-6.71 5.33%2c-14.25 5.33%2c-21.81l0%2c-26.13l6.34%2c0l0%2c26.13c0%2c8.58 -2.09%2c17.13 -6.05%2c24.74c-3.98%2c7.68 -13.57%2c11.7 -20.97%2c11.7z' class='st0'/%3e %3c/g%3e %3cg id='svg_13'%3e %3cpath id='svg_14' d='m257.48%2c113.84l-3.34%2c0c-7.4%2c0 -16.98%2c-4.02 -20.98%2c-11.7c-3.96%2c-7.61 -6.05%2c-16.16 -6.05%2c-24.74l6.34%2c0c0%2c7.56 1.84%2c15.1 5.33%2c21.81c2.46%2c4.73 9.06%2c8.29 15.35%2c8.29l3.34%2c0l0%2c6.34l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_15'%3e %3crect id='svg_16' height='6.34' width='42.87' class='st0' y='27.89' x='274.07'/%3e %3c/g%3e %3cg id='svg_17'%3e %3crect id='svg_18' height='61.38' width='6.34' class='st0' y='14.89' x='293.05'/%3e %3c/g%3e %3cg id='svg_19'%3e %3crect id='svg_20' height='6.34' width='33.26' class='st0' transform='matrix(0.11%2c-0.9939%2c0.9939%2c0.11%2c194.7608%2c392.0006) ' y='46.985071' x='325.728637'/%3e %3c/g%3e %3cg id='svg_21'%3e %3crect id='svg_22' height='33.26' width='6.34' class='st0' transform='matrix(0.9939%2c-0.11%2c0.11%2c0.9939%2c-7.5075%2c38.3801) ' y='37.060893' x='310.495485'/%3e %3c/g%3e %3cg id='svg_23'%3e %3cpath id='svg_24' d='m352.9%2c77.14l-15.15%2c0c-7.52%2c0 -13.64%2c-6.12 -13.64%2c-13.63l0%2c-29.61c0%2c-7.52 6.12%2c-13.64 13.64%2c-13.64l15.15%2c0c7.52%2c0 13.64%2c6.12 13.64%2c13.64l0%2c29.61c0%2c7.52 -6.12%2c13.63 -13.64%2c13.63zm-15.15%2c-50.54c-4.02%2c0 -7.3%2c3.27 -7.3%2c7.3l0%2c29.61c0%2c4.02 3.27%2c7.3 7.3%2c7.3l15.15%2c0c4.02%2c0 7.3%2c-3.27 7.3%2c-7.3l0%2c-29.61c0%2c-4.02 -3.27%2c-7.3 -7.3%2c-7.3l-15.15%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_25'%3e %3cg id='svg_26'%3e %3crect id='svg_27' height='6.34' width='17.8' class='st0' y='37.2' x='336.43'/%3e %3c/g%3e %3cg id='svg_28'%3e %3crect id='svg_29' height='6.34' width='17.8' class='st0' y='53.87' x='336.43'/%3e %3c/g%3e %3c/g%3e %3cg id='svg_30'%3e %3cpath id='svg_31' d='m352.7%2c113.84l-37.98%2c0c-8%2c0 -14.5%2c-6.51 -14.5%2c-14.5l0%2c-16.14l6.34%2c0l0%2c16.13c0%2c4.5 3.66%2c8.17 8.17%2c8.17l37.98%2c0l0%2c6.34l-0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_32'%3e %3crect id='svg_33' height='6.34' width='23.57' class='st0' transform='matrix(0.2529%2c-0.9675%2c0.9675%2c0.2529%2c114.4986%2c402.9877) ' y='83.698593' x='326.836101'/%3e %3c/g%3e %3cg id='svg_34'%3e %3crect id='svg_35' height='6.34' width='20.52' class='st0' y='86.2' x='321.58'/%3e %3c/g%3e %3cg id='svg_36'%3e %3crect id='svg_37' height='24.75' width='6.34' class='st0' transform='matrix(0.9556%2c-0.2946%2c0.2946%2c0.9556%2c-19.7967%2c122.424) ' y='75.874073' x='369.686666'/%3e %3c/g%3e %3cg id='svg_38'%3e %3crect id='svg_39' height='6.34' width='71.83' class='st0' y='20.46' x='395.51'/%3e %3c/g%3e %3cg id='svg_40'%3e %3crect id='svg_41' height='6.34' width='90.81' class='st0' y='57.44' x='386.02'/%3e %3c/g%3e %3cg id='svg_42'%3e %3cpath id='svg_43' d='m463.12%2c113.64l-56%2c0c-4.5%2c0 -8.59%2c-2.29 -10.94%2c-6.14c-2.35%2c-3.84 -2.52%2c-8.53 -0.46%2c-12.53l17.68%2c-35.81l5.64%2c2.89l-17.68%2c35.81c-1.04%2c2.02 -0.95%2c4.39 0.23%2c6.33c1.19%2c1.94 3.25%2c3.1 5.53%2c3.1l56%2c0c1.51%2c0 2.88%2c-0.71 3.74%2c-1.95c0.81%2c-1.16 1.03%2c-2.57 0.63%2c-3.91l-7.8%2c-12.34l5.36%2c-3.39l8.18%2c12.94l0.12%2c0.31c1.24%2c3.34 0.76%2c7.08 -1.28%2c10.01c-2.04%2c2.94 -5.39%2c4.68 -8.95%2c4.68z' class='st0'/%3e %3c/g%3e %3c/g%3e %3c/g%3e%3c/svg%3e",height:"30"})}),t,n(O,{navbar:!0,children:[e(O.Toggle,{as:sn,className:"nav-link",children:e("img",{className:"rounded-circle",width:"25",height:"25",src:a.avatar})}),e(O.Menu,{className:"shadow",children:r})]})]})})}const dn=o.header(an||(an=re(["\n height: 54px;\n"])));function un(t){let{children:r,title:i,className:o,...a}=t;return e(A,{className:Y("border-0 shadow-sm mb-3",o),...a,children:n("div",{className:"card-body",children:[i&&n(c,{children:[e("h5",{children:i}),e("hr",{})]}),r]})})}function hn(n){let{errors:c}=n;return c?e(L,{variant:"danger",children:e("ul",{className:"mb-0",children:"string"==typeof c?e("li",{children:c}):Object.entries(c).map((n=>{let[c,t]=n;return e("li",{children:t},c)}))})}):null}function mn(n){let{require:t,children:r,fallback:i}=n;const[o]=rn();let a=!1;return"function"==typeof t?a=t(o):("string"==typeof t&&(t=[t]),a=$(o.roles,t).length>0),a||(r=i),e(c,{children:r})}var gn,pn;function fn(n){let{children:c,size:t="small"}=n;"string"==typeof t&&(t={small:8,middle:16,large:24}[t]);const r=w.map(c,(n=>{if(n)return e(bn,{children:n})}));return e(vn,{size:t,children:r})}const vn=o.div(gn||(gn=re(["\n display: inline-flex;\n align-items: center;\n gap: ","px;\n"])),(e=>e.size)),bn=o.div(pn||(pn=re(["\n\n"])));var xn;function yn(){return yn=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var c=arguments[n];for(var t in c)Object.prototype.hasOwnProperty.call(c,t)&&(e[t]=c[t])}return e},yn.apply(this,arguments)}const wn=e=>p.createElement("svg",yn({className:"step_check_svg__icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),xn||(xn=p.createElement("path",{d:"M887.904 298.208c-12.864-12.064-33.152-11.488-45.216 1.408L415.936 753.984l-233.12-229.696c-12.608-12.416-32.864-12.288-45.28.32-12.416 12.576-12.256 32.864.352 45.248l256.48 252.672c.096.096.224.128.32.224s.128.224.224.32c2.016 1.92 4.448 3.008 6.784 4.288 1.152.672 2.144 1.664 3.36 2.144 3.776 1.472 7.776 2.24 11.744 2.24 4.192 0 8.384-.832 12.288-2.496 1.312-.544 2.336-1.664 3.552-2.368 2.4-1.408 4.896-2.592 6.944-4.672.096-.096.128-.256.224-.352.064-.096.192-.128.288-.224L889.28 343.424c12.16-12.832 11.488-33.088-1.376-45.216z"})));var kn;function _n(n){return e(zn,{icons:{finish:e(wn,{}),error:e(c,{})},...n})}_n.Step=ee.Step;const zn=o(ee)(kn||(kn=re(["\n .rc-steps-item-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n & > .rc-steps-icon {\n top: 0;\n }\n }\n\n .rc-steps-item-process {\n .rc-steps-item-icon {\n background: var(--bs-primary);\n border-color: var(--bs-primary);\n }\n }\n\n .rc-steps-item-finish {\n .rc-steps-item-icon {\n border-color: var(--bs-primary);\n\n & > .rc-steps-icon {\n color: var(--bs-primary);\n }\n }\n\n .rc-steps-item-title:after {\n background-color: var(--bs-primary);\n }\n }\n\n"])));function Cn(){}function Sn(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}function Nn(n){let{total:c=0,onChange:t=Cn,defaultCurrent:r=1,defaultPageSize:i=10,className:o,...a}=n;const[s,l]=b(r),[d,u]=b(i);x((()=>{Sn(a.current)&&l(a.current)}),[a.current]),x((()=>{Sn(a.pageSize)&&u(a.pageSize)}),[a.pageSize]);const h=v((()=>Math.floor((c-1)/d)+1),[c,d]),m=k((e=>()=>{e!==s&&(l(e),t(e,d))}),[t,s,d]),g=s-1>0?s-1:0,p=s+1<h?s+1:h,f=[];let y=null,w=null,_=null,z=null;if(h<=7)for(let n=1;n<=h;n+=1){const c=s===n;f.push(e(I.Item,{active:c,onClick:m(n),children:n},n))}else{z=e(I.Last,{onClick:m(h)},"last"),_=e(I.First,{onClick:m(1)},"first"),y=e(I.Prev,{onClick:m(g)},"prev"),w=e(I.Next,{onClick:m(p)},"next");let n=Math.max(1,s-2),c=Math.min(s+2,h);s-1<=2&&(c=5),h-s<=2&&(n=h-4);for(let t=n;t<=c;t+=1){const n=s===t;f.push(e(I.Item,{active:n,onClick:m(t),children:t},t))}s-1>=4&&3!==s&&f.unshift(y),h-s>=4&&s!==h-2&&f.push(w),1!==n&&f.unshift(_),c!==h&&f.push(z)}return e(I,{className:o,children:f})}function jn(n){let{className:t,value:r,locale:i="zh-CN",currency:o=!0}=n;const a=v((()=>{let e={};return e=o?{style:"currency",currency:"CNY",...e}:{minimumFractionDigits:2},new Intl.NumberFormat(i,e)}),[o,i]);return t?e("span",{className:t,children:a.format(r)}):e(c,{children:a.format(r)})}function En(n){let{loading:c,children:t,...r}=n;return e(P,{...r,disabled:c,children:c?"Loading…":t})}function Ln(e){let{url:n,method:c,confirm:t,onSuccess:r,children:i,disabled:o,as:a=P,...s}=e;const[l,d]=b(!1),u=k((async e=>{e.preventDefault();try{if(d(!0),t&&!await je.confirm({text:t}))return;const e="string"==typeof n?{url:n,method:c}:{method:c,...n},i=await Ze(e);r&&r(i)}catch(e){if(!G.isAxiosError(e))throw e;{let n=e.errors;"string"!=typeof e.errors&&(n=Object.values(e.errors).join("<br />")),je.error({text:n})}}finally{d(!1)}}),[n,c,d]);return _(a,{...s,disabled:o||l,onClick:u},i)}function Un(n){let{to:c,replace:t,...r}=n,i=g();return e(P,{...r,onClick:e=>{e.preventDefault(),i(c,{replace:t})}})}const On=require("ajv-i18n/localize/zh"),An={upload:function(n){const{widgets:c}=ce(),t={...n.options,async onUpload(e){if(n.options.onUpload instanceof Function)return await n.options.onUpload.call(e);if(n.options.endpoint){const c=new FormData;c.set("file",e);const{url:t}=await Ze({url:n.options.endpoint,method:"post",data:c});return t}}};return e(c.upload,{...n,options:t})}},In=z(((n,c)=>{let{action:t,method:r="post",onSuccess:i,formData:o,onSubmit:a,onChange:s,submitText:l="提交",children:d,...u}=n;const[h,m]=b(),[g,p]=b(!1),[f,v]=b(o),x=k((async(e,n)=>{try{if(p(!0),t){const{formData:n}=e;try{const e=await Ze({url:t,method:r,data:n});return m(void 0),i&&await i(e),e}catch(e){throw G.isAxiosError(e)&&m((e=>{const n=e.errors;return"string"==typeof n?{__errors:[n]}:J(n,(e=>({__errors:[e]})))})(e)),e}}else if(a)return await a(e,n)}finally{p(!1)}}),[t,r,a]),y=k((e=>{const{formData:n}=e;v(n),s&&s(e)}),[v,s]),w=k((e=>(e=e.map((e=>({keyword:e.name,dataPath:e.property,...e}))),On(e),e)),[]),_=e(En,{loading:g,type:"submit",variant:"primary",children:l});return"function"==typeof d&&(d=d({submit:_,loading:g})),e(ne,{ref:c,extraErrors:h,onSubmit:x,transformErrors:w,noHtml5Validate:!0,noValidate:!0,...u,formData:f,onChange:y,widgets:An,children:d||e("div",{className:"col-12",children:_})})}));var Pn,Dn,Bn,Fn,Rn;function Tn(c){let{title:t,children:r,extra:i}=c;return n(qn,{children:[e(Mn,{children:n("div",{className:"container",children:[e(Kn,{children:t}),e(Gn,{children:i})]})}),e(Hn,{className:"container",children:r})]})}const qn=o.div(Pn||(Pn=re(["\n width: 100%;\n"]))),Mn=o.div(Dn||(Dn=re(["\n background-color: #fff;\n display: flex;\n\n .container {\n padding: 0 24px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n"]))),Hn=o.div(Bn||(Bn=re(["\n margin-top: 24px;\n"]))),Kn=o.div(Fn||(Fn=re(["\n font-size: 22px;\n line-height: 64px;\n height: 64px;\n"]))),Gn=o.div(Rn||(Rn=re(["\n\n"])));const Vn=function(n){let{indeterminate:c=!1,...t}=n;const r=C(null);return x((()=>{r.current&&(r.current.indeterminate=c)}),[c]),e("input",{ref:r,...t,className:"form-check-input",type:"checkbox"})};var Wn,Yn,$n,Jn,Qn,Xn;const Zn=o(D)(Wn||(Wn=re(["\n .rc-table-thead {\n border-top: none;\n }\n"]))),ec={table:n=>e(Zn,{...n,className:"align-middle table-hover"})},nc=o(Nn)(Yn||(Yn=re(["\n margin-bottom: 0;\n justify-content: flex-end;\n"])));function cc(e){return"current_page"in e}const tc=z(((t,r)=>{let{source:i,rowKey:o="id",paginate:a=!0,toolBarRender:s,columns:l=[],search:d,rowSelection:u,card:h=!0,...m}=t;const[g,p]=b([]),[f,y]=b(a?{total:0,current:1,pageSize:10}:null),[w,_]=b(!0),[z,N]=b(""),j=k((async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};_(!0);try{let n;if("string"==typeof i){const c={q:z};f&&(c.page=e.page||f.current),n=await Ze({url:i,params:c})}else n=await i();a&&cc(n)&&(y({total:n.total,current:n.current_page,pageSize:n.per_page}),n=n.data),p(n)}catch(e){}finally{_(!1)}}),[i,p,f,z]);x((()=>{j()}),[z]);const E=C({reload:j});x((()=>{E.current={reload:j}}),[j]),S(r,(()=>E.current));const[L]=function(n,c,t){const[r,i]=b((()=>new Set((null==n?void 0:n.selectedRowKeys)||[]))),o=e=>"string"==typeof c?e[c]:c(e),a=e=>t.find((n=>o(n)===e)),s=k((e=>{i(e);const c=Array.from(e),t=c.map((function(e){return a(e)}));null!=n&&n.onChange&&(null==n||n.onChange(c,t))}),[a]);return[k((c=>{if(!n)return c;const i=t.map(o),a=i.every((function(e){return r.has(e)})),l=i.some((function(e){return r.has(e)}));return[{key:"selection",title:e(Vn,{checked:a,indeterminate:!a&&l,onChange:()=>{a?i.forEach((function(e){r.delete(e)})):i.forEach((function(e){r.add(e)})),s(new Set(r))}}),width:30,align:"center",render(n){let{record:c}=n;const t=o(c),i=r.has(t);return e(Vn,{checked:i,onChange:()=>{i?r.delete(t):r.add(t),s(new Set(r))}})}},...c]}),[t,n,r])]}(u,o,g),U=v((()=>L(l).map((e=>{const n={...e,render:void 0};if("render"in e&&e.render){const c=e.render;n.render=(e,n,t)=>c({value:e,record:n,index:t,action:E.current})}return n}))),[l,L,E]),O=function(e,n,c){const t=C(e),r=C(Q(e,n,c));return x((()=>{t.current=e})),x((()=>{r.current=Q((function(){t.current(...arguments)}),n,c)}),[n,c]),r.current}((e=>{N(e.target.value)}),500),A=n(c,{children:[e(Ve,{loading:w}),!1!==s&&n(rc,{children:[e(oc,{size:12,children:s&&s(E.current)}),n(ic,{size:12,children:[d&&e(B.Control,{onChange:O,type:"search",placeholder:"Search..."}),e(ac,{onClick:E.current.reload,children:e("i",{className:"bi bi-arrow-repeat"})})]})]}),e(te,{...m,rowKey:o,columns:U,components:ec,data:g}),f&&e(nc,{...f,onChange:e=>{j({page:e})}})]});return h?e(un,{children:A}):A})),rc=o.div($n||($n=re(["\n display: flex;\n justify-content: space-between;\n padding-bottom: 1rem;\n height: 48px;\n border-bottom: 2px solid #212529;\n"]))),ic=o(fn)(Jn||(Jn=re(["\n\n"]))),oc=o(fn)(Qn||(Qn=re(["\n\n"]))),ac=o.span(Xn||(Xn=re(["\n cursor: pointer;\n font-size: 20px;\n line-height: 1;\n\n &:hover {\n color: var(--bs-primary);\n }\n"]))),sc=z(((t,r)=>{let{text:i,variant:o,header:a=i,footer:s=!0,onOk:l,size:d,okText:u="确定",onShow:h,children:m,as:g=P}=t;const[p,f]=b(!1),[v,x]=b(!1),y=()=>f(!1);S(r,(()=>({close:y})));const w=_(g,{variant:o,onClick:()=>f(!0)},i);return n(c,{children:[w,n(F,{size:d,show:p,onHide:y,onShow:h,children:[a&&e(F.Header,{closeButton:!0,children:e(F.Title,{as:"h5",children:a})}),e(F.Body,{children:m}),s&&n(F.Footer,{children:[e(P,{variant:"secondary",onClick:y,children:"取消"}),e(En,{loading:v,variant:"primary",onClick:async()=>{if(l){x(!0);const e=await l();if(x(!1),!1===e)return}y()},children:u})]})]})]})}));function lc(n){let{text:c,header:t,schema:r,uiSchema:i,action:o,method:a,formData:s,variant:l,onSuccess:d,onChange:u,fields:h,size:m,as:g}=n;const p=C(null),f=k((async()=>{try{var e;return await(null===(e=p.current)||void 0===e?void 0:e.submit()),!0}catch{return!1}}),[]);return e(sc,{as:g,text:c,onOk:f,header:t,variant:l,size:m,children:e(In,{ref:p,schema:r,uiSchema:i,action:o,method:a,formData:s,fields:h,onChange:u,onSuccess:d,children:e(N,{})})})}function dc(e){let{manual:n,refreshDeps:c,...t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{execute:r,currentParams:i,error:o,...a}=H((async n=>(e="string"==typeof e?{url:e}:e,await Ze({...e,...n}))),t);x((()=>{n||c||r()}),[]),x((()=>{c&&s()}),c);const s=k((()=>{i?r(...i):r()}),[r,i]);if(o&&Xe(o)){const e=o.errors;o=new Error("string"==typeof e?e:X(e).join(""))}return{refresh:s,execute:r,error:o,...a}}let uc=0;function hc(){let{onHide:e,onShow:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[c,t]=b(!1),[r,i]=b("visible-".concat(uc)),o=k((()=>{t(!1),e&&e()}),[t,e]),a=k((()=>{i("visible-".concat(++uc))}),[i,uc]),s=k((()=>{t(!0),n&&n()}),[t,n]),l={show:c,onHide:o,onExited:a,key:r};return{visible:c,show:s,hide:o,state:l}}function mc(n){let{tooltip:c,children:t,placement:r="bottom"}=n;return e(R,{placement:r,overlay:e(T,{id:Z(),children:c}),children:t})}export{mn as Access,un as Card,Tn as Content,hn as Error,ae as Footer,In as Form,ln as Header,Un as LinkButton,Ve as Loader,En as LoadingButton,je as Message,sc as ModalButton,lc as ModalForm,jn as NumberFormat,Nn as Pagination,Ln as RequestButton,qe as Result,xe as SiderLayout,fn as Space,_n as Steps,tc as Table,Ue as Toast,mc as Tooltip,tn as UserProvider,nn as createApplication,Xe as isRequestError,Ze as request,hc as useOverlayState,dc as useRequest,rn as useUser};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../src/components/footer.tsx","../src/utils/get-menu-data.ts","../src/layout/sider.tsx","../src/utils/message.ts","../src/utils/toast.tsx","../src/components/result.tsx","../src/images/logo.svg","../src/components/dimmer.tsx","../src/components/loader.tsx","../src/errors/unauthorized.ts","../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../src/pages/login.tsx","../src/pages/logout.tsx","../src/request.ts","../src/utils/create-application.tsx","../src/components/user-provider.tsx","../src/components/header.tsx","../src/components/card.tsx","../src/components/error.tsx","../src/components/access.tsx","../src/components/space.tsx","../src/images/step_check.svg","../src/components/steps.tsx","../src/components/pagination.tsx","../src/components/number-format.tsx","../src/components/loading-button.tsx","../src/components/request-button.tsx","../src/components/link-button.tsx","../src/components/form.tsx","../src/components/content.tsx","../src/components/table/use-selection.tsx","../src/components/table/index.tsx","../src/hooks/use-debounce.ts","../src/components/modal-button.tsx","../src/components/modal-form.tsx","../src/hooks/use-request.ts","../src/hooks/use-overlay-state.ts","../src/components/tooltip.tsx"],"sourcesContent":["export default function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}","import styled from 'styled-components';\r\n\r\nconst FooterWrapper = styled.footer`\r\n\r\n`;\r\n\r\n\r\nexport default function Footer() {\r\n return <FooterWrapper>\r\n <div className='container'>\r\n\r\n </div>\r\n </FooterWrapper>;\r\n}\r\n","import type { RouteObject } from 'react-router';\r\n\r\nexport interface MenuData {\r\n path: string;\r\n title: string;\r\n icon?: string;\r\n children: MenuData[];\r\n}\r\n\r\nconst formatRelativePath = (\r\n routes: RouteObject[],\r\n parent: string = '/',\r\n): MenuData[] => {\r\n\r\n const menus: MenuData[] = [];\r\n\r\n for (const route of routes) {\r\n\r\n if (route.meta?.hideInMenu) {\r\n continue;\r\n }\r\n\r\n const title = route.meta?.title;\r\n if (!title) {\r\n continue;\r\n }\r\n\r\n let path = route.path || '';\r\n\r\n path = `${parent}/${path}`;\r\n\r\n path = path.replace(/\\/+/, '/').replace(/\\/$/, '');\r\n\r\n const icon = route.meta?.icon;\r\n\r\n const menu: MenuData = {\r\n title,\r\n icon,\r\n path,\r\n children: []\r\n };\r\n\r\n if (!route.meta?.hideChildrenInMenu) {\r\n if (route.children && route.children.length > 0) {\r\n menu.children = formatRelativePath(route.children, path);\r\n }\r\n }\r\n\r\n menus.push(menu);\r\n }\r\n\r\n return menus;\r\n};\r\n\r\nexport default function getMenuData(routes: RouteObject[], base: string = '/'): MenuData[] {\r\n return formatRelativePath(routes, base);\r\n}\r\n","import RcMenu, { MenuItem, SubMenu } from 'rc-menu';\r\nimport Footer from '../components/footer';\r\nimport { Link, useLocation, useRoutes } from 'react-router-dom';\r\nimport { useEffect, useMemo, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport type { RouteObject } from 'react-router';\r\nimport getMenuData, { MenuData } from '../utils/get-menu-data';\r\nimport type { CSSMotionProps } from 'rc-motion';\r\n\r\ninterface Props {\r\n title: string;\r\n routes: RouteObject[];\r\n basename: string;\r\n}\r\n\r\nconst renderMenuItems = (items: MenuData[]) => {\r\n return items.map((item) => {\r\n\r\n const title = <>\r\n {item.icon && <i className={`bi bi-${item.icon}`} />}\r\n {item.title}\r\n </>;\r\n\r\n if (item.children.length > 0) {\r\n return <SubMenu title={title} key={item.path}>\r\n {renderMenuItems(item.children)}\r\n </SubMenu>;\r\n } else {\r\n return <MenuItem key={item.path}>\r\n <Link to={item.path}>\r\n {title}\r\n </Link>\r\n </MenuItem>;\r\n }\r\n });\r\n};\r\n\r\nconst collapseNode = () => {\r\n return { height: 0 };\r\n};\r\nconst expandNode = (node: HTMLElement) => {\r\n return { height: node.scrollHeight };\r\n};\r\n\r\nconst motion: CSSMotionProps = {\r\n motionName: 'rc-menu-collapse',\r\n motionAppear: true,\r\n onAppearStart: collapseNode,\r\n onAppearActive: expandNode,\r\n onEnterStart: collapseNode,\r\n onEnterActive: expandNode,\r\n onLeaveStart: expandNode,\r\n onLeaveActive: collapseNode,\r\n};\r\n\r\n\r\nexport default function SiderLayout({ routes, basename, title }: Props) {\r\n\r\n const children = useRoutes(routes);\r\n\r\n const menu = useMemo(() => getMenuData(routes, basename), [routes, basename]);\r\n\r\n const { pathname } = useLocation();\r\n\r\n const selectedKeys = useMemo(() => {\r\n const keys: string[] = [];\r\n const parts = pathname.split('/');\r\n parts.reduce<string[]>((pre, curr) => {\r\n if (pre.length > 1) {\r\n keys.push(pre.join('/'));\r\n }\r\n return [...pre, curr];\r\n }, []);\r\n keys.push(pathname);\r\n return keys;\r\n }, [pathname]);\r\n\r\n const [openKeys, setOpenKeys] = useState<string[]>([]);\r\n\r\n useEffect(() => {\r\n setOpenKeys(selectedKeys.slice(0, -1));\r\n }, [selectedKeys]);\r\n\r\n const onOpenChange = (openKeys: string[]) => {\r\n const currentKey = openKeys[openKeys.length - 1];\r\n setOpenKeys(openKeys.filter(key => currentKey.startsWith(key)));\r\n };\r\n\r\n return <Container>\r\n <Sidebar>\r\n <Header>{title}</Header>\r\n <Menu\r\n mode='inline'\r\n motion={motion}\r\n openKeys={openKeys}\r\n onOpenChange={onOpenChange}\r\n selectedKeys={selectedKeys}\r\n >\r\n {renderMenuItems(menu)}\r\n </Menu>\r\n </Sidebar>\r\n <Content>\r\n <Main>{children}</Main>\r\n <Footer />\r\n </Content>\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex-wrap: nowrap;\r\n width: 100%;\r\n`;\r\n\r\nconst Sidebar = styled.nav`\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n z-index: 100;\r\n padding: 54px 0 0;\r\n border-right: 1px solid #e3e3e3;\r\n width: 230px;\r\n background-color: #f5f5f5;\r\n`;\r\n\r\nconst Header = styled.div`\r\n padding: 10px 0;\r\n height: 64px;\r\n line-height: 44px;\r\n text-indent: 24px;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n font-size: 16px;\r\n`;\r\n\r\nconst Content = styled.div`\r\n margin-left: 230px;\r\n flex: 1;\r\n`;\r\n\r\nconst Main = styled.main`\r\n min-height: calc(100vh - 54px);\r\n position: relative;\r\n`;\r\n\r\nconst Menu = styled(RcMenu)`\r\n border: none;\r\n box-shadow: none;\r\n padding: 0;\r\n\r\n .rc-menu-item {\r\n display: flex;\r\n\r\n &:hover {\r\n background-color: #f0f0f0;\r\n }\r\n\r\n a {\r\n flex: 1;\r\n text-decoration: none;\r\n color: dimgray;\r\n\r\n .bi {\r\n font-size: 16px;\r\n line-height: 18px;\r\n margin-right: 9px;\r\n min-width: 19px;\r\n text-align: center;\r\n vertical-align: text-bottom;\r\n }\r\n }\r\n }\r\n\r\n .rc-menu-sub {\r\n background-color: #eee;\r\n border-top: 1px solid #eee;\r\n border-bottom: 1px solid #eee;\r\n\r\n & > li {\r\n &:first-child {\r\n margin-top: 4px;\r\n }\r\n\r\n &:last-child {\r\n margin-bottom: 4px;\r\n }\r\n }\r\n\r\n .rc-menu-item-selected {\r\n background-color: #eee;\r\n color: var(--bs-primary);\r\n\r\n & > a {\r\n color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-menu-item-active {\r\n background-color: #eee;\r\n }\r\n\r\n .rc-menu-item {\r\n &:hover {\r\n background-color: #e7e7e7;\r\n }\r\n }\r\n }\r\n\r\n .rc-menu-submenu {\r\n & > .rc-menu-submenu-title {\r\n &:hover {\r\n background-color: #e7e7e7;\r\n }\r\n\r\n .bi {\r\n font-size: 16px;\r\n line-height: 18px;\r\n margin-right: 9px;\r\n min-width: 19px;\r\n text-align: center;\r\n vertical-align: text-bottom;\r\n }\r\n }\r\n }\r\n\r\n .rc-menu-submenu-active > .rc-menu-submenu-title {\r\n background-color: #eee;\r\n }\r\n\r\n .rc-menu-item,\r\n .rc-menu-submenu > .rc-menu-submenu-title {\r\n padding: 0 8px 0 24px;\r\n font-size: 14px;\r\n line-height: 36px;\r\n cursor: pointer;\r\n }\r\n\r\n .rc-menu-sub > .rc-menu-item,\r\n .rc-menu-sub > .rc-menu-submenu > .rc-menu-submenu-title {\r\n padding-top: 0;\r\n padding-bottom: 0;\r\n padding-right: 0;\r\n }\r\n\r\n .rc-menu-submenu-arrow {\r\n line-height: 38px;\r\n }\r\n\r\n .rc-menu-item-selected {\r\n background-color: #f5f5f5;\r\n color: var(--bs-primary);\r\n\r\n & > a {\r\n color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-menu-submenu-selected {\r\n background-color: #eee;\r\n\r\n & > .rc-menu-submenu-title {\r\n color: var(--bs-primary);\r\n font-weight: 500;\r\n }\r\n }\r\n\r\n & > .rc-menu-item {\r\n line-height: 38px;\r\n }\r\n\r\n & > .rc-menu-submenu {\r\n &.rc-menu-submenu-selected {\r\n background-color: #f5f5f5;\r\n }\r\n\r\n & > .rc-menu-submenu-title {\r\n line-height: 38px;\r\n\r\n &:hover {\r\n background-color: #f0f0f0;\r\n }\r\n }\r\n\r\n &.rc-menu-submenu-active > .rc-menu-submenu-title {\r\n background-color: #f5f5f5;\r\n }\r\n\r\n & > .rc-menu-sub {\r\n border-top: 1px solid #e6e6e6;\r\n border-bottom: 1px solid #e6e6e6;\r\n\r\n & > li {\r\n &:first-child {\r\n margin-top: 9px;\r\n }\r\n\r\n &:last-child {\r\n margin-bottom: 9px;\r\n }\r\n }\r\n }\r\n }\r\n\r\n`;\r\n","import Swal from 'sweetalert2/dist/sweetalert2.js';\r\nimport withReactContent from 'sweetalert2-react-content';\r\n\r\nconst CustomSwal = withReactContent(Swal);\r\n\r\ninterface MessageOptions {\r\n title?: string;\r\n text?: string;\r\n}\r\n\r\nconst defaultOptions = {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消'\r\n};\r\n\r\nconst Message = {\r\n confirm: async (options: MessageOptions) => {\r\n const { isConfirmed } = await CustomSwal.fire({\r\n ...defaultOptions,\r\n icon: 'warning',\r\n showCancelButton: true,\r\n ...options\r\n });\r\n\r\n return isConfirmed;\r\n },\r\n error: (options: MessageOptions) => {\r\n CustomSwal.fire({\r\n ...defaultOptions,\r\n toast: true,\r\n position: 'top',\r\n icon: 'error',\r\n timer: 3000,\r\n showConfirmButton: false,\r\n ...options\r\n });\r\n }\r\n};\r\n\r\nexport default Message;\r\n","import { Alert } from 'react-bootstrap';\r\nimport { NoticeContent, NotificationInstance } from 'rc-notification/lib/Notification';\r\nimport Notification from 'rc-notification';\r\n\r\nlet noticeInstance: NotificationInstance | null;\r\n\r\nfunction getNoticeInstance(callback: (instance: NotificationInstance) => void) {\r\n if (noticeInstance) {\r\n return callback(noticeInstance);\r\n }\r\n\r\n Notification.newInstance({\r\n prefixCls: 'notification',\r\n maxCount: 5,\r\n style: {\r\n top: 20,\r\n right: 20\r\n }\r\n }, (instance) => {\r\n if (noticeInstance) {\r\n callback(noticeInstance);\r\n return;\r\n }\r\n noticeInstance = instance;\r\n callback(instance);\r\n });\r\n}\r\n\r\nconst types = ['error', 'success', 'info'];\r\n\r\nconst notice = ({ type, ...options }: { type: string } & NoticeContent) => {\r\n getNoticeInstance((instance) => {\r\n options.duration = 3;\r\n let variant = type;\r\n switch (type) {\r\n case 'error':\r\n variant = 'danger';\r\n options.duration = options.closable ? 0 : 5;\r\n break;\r\n }\r\n\r\n options.content = <Alert variant={variant}>{options.content}</Alert>;\r\n\r\n instance.notice(options);\r\n });\r\n};\r\n\r\n\r\nlet Toast: {\r\n [index in typeof types[number]]: (content: string, options?: NoticeContent) => void\r\n} = {};\r\n\r\ntypes.forEach((type) => {\r\n Toast[type] = (content, options) => {\r\n notice({\r\n ...options,\r\n type,\r\n content\r\n });\r\n };\r\n});\r\n\r\nexport default Toast;\r\n","import { ReactNode } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst Container = styled.div`\r\n padding: 48px 32px;\r\n`;\r\n\r\nconst Icon = styled.div`\r\n margin-bottom: 24px;\r\n text-align: center;\r\n font-size: 72px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n color: rgba(0, 0, 0, .85);\r\n font-size: 24px;\r\n line-height: 1.8;\r\n text-align: center;\r\n`;\r\n\r\nconst Extra = styled.div`\r\n margin-top: 32px;\r\n text-align: center;\r\n`;\r\n\r\nconst IconMap = {\r\n success: <i className='bi bi-check-circle-fill text-success' />,\r\n error: <i className='bi bi-exclamation-circle-fill text-danger' />,\r\n info: <i className='bi bi-info-circle-fill text-info' />,\r\n warning: <i className='bi bi-exclamation-triangle-fill text-warning' />,\r\n};\r\n\r\ninterface ResultProps {\r\n status?: keyof typeof IconMap\r\n icon?: ReactNode\r\n title?: string\r\n extra?: ReactNode;\r\n}\r\n\r\nexport default function Result({ status, title, icon, extra }: ResultProps) {\r\n\r\n if (!icon && status) {\r\n icon = IconMap[status];\r\n }\r\n\r\n return <Container>\r\n {icon && <Icon>{icon}</Icon>}\r\n {title && <Title>{title}</Title>}\r\n {extra && <Extra>{extra}</Extra>}\r\n </Container>;\r\n}\r\n","var img = \"data:image/svg+xml,%3csvg width='485' height='132' xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='enable-background:new 0 0 531.69 198.43%3b' version='1.1'%3e %3cstyle type='text/css'%3e.st0%7bfill:%233C60FF%3b%7d%3c/style%3e %3cg%3e %3ctitle%3ebackground%3c/title%3e %3crect fill='none' id='canvas_background' height='134' width='487' y='-1' x='-1'/%3e %3c/g%3e %3cg%3e %3ctitle%3eLayer 1%3c/title%3e %3cpath id='svg_1' d='m132.29%2c62.34c-1.19%2c-18.77 -10.34%2c-35.36 -24.11%2c-46.46c-11.15%2c-8.99 -25.34%2c-14.38 -40.79%2c-14.38c-0.55%2c0 -1.09%2c0.01 -1.63%2c0.02c-3.32%2c0.08 -6.57%2c0.41 -9.75%2c0.98c-30.49%2c5.38 -53.65%2c32 -53.65%2c64.04c0%2c1.87 0.08%2c3.73 0.24%2c5.57c2.5%2c29.51 24.7%2c53.4 53.41%2c58.47c2.38%2c0.42 4.8%2c0.72 7.26%2c0.86c0.83%2c0.05 1.66%2c0.09 2.5%2c0.11c0.54%2c0.01 1.08%2c0.02 1.63%2c0.02c34.04%2c0 61.97%2c-26.16 64.79%2c-59.46c0.16%2c-1.83 0.24%2c-3.69 0.24%2c-5.57c0%2c-1.42 -0.05%2c-2.82 -0.14%2c-4.2zm-76.27%2c32.5c-0.26%2c0.01 -0.53%2c0.01 -0.79%2c0.01c-14.56%2c0 -26.88%2c-9.57 -31.03%2c-22.76c-0.97%2c-3.08 -1.49%2c-6.35 -1.49%2c-9.75c0%2c-17.95 14.56%2c-32.52 32.51%2c-32.52c0.26%2c0 0.53%2c0 0.79%2c0.01c3.41%2c0.08 6.69%2c0.68 9.75%2c1.74c6.5%2c2.22 12.06%2c6.45 15.97%2c11.94c1.98%2c2.78 3.54%2c5.9 4.57%2c9.25c0.94%2c3.03 1.44%2c6.24 1.44%2c9.58l-9.75%2c0c0%2c-2.18 -0.31%2c-4.29 -0.88%2c-6.28c-0.92%2c-3.23 -2.55%2c-6.17 -4.69%2c-8.64c-1.86%2c-2.14 -4.12%2c-3.93 -6.65%2c-5.25c-2.93%2c-1.54 -6.24%2c-2.46 -9.75%2c-2.58c-0.26%2c-0.01 -0.52%2c-0.01 -0.79%2c-0.01c-12.57%2c0 -22.76%2c10.19 -22.76%2c22.76c0%2c3.49 0.79%2c6.8 2.19%2c9.75c3.65%2c7.69 11.49%2c13.01 20.57%2c13.01c0.27%2c0 0.53%2c-0.01 0.79%2c-0.01l0%2c9.75zm55.7%2c-17.92c-3.35%2c10.5 -13.18%2c18.09 -24.78%2c18.09c-3.13%2c0 -6.13%2c-0.55 -8.91%2c-1.57c-2.18%2c-0.8 -4.24%2c-1.88 -6.11%2c-3.21c-2.38%2c-1.68 -4.47%2c-3.76 -6.16%2c-6.13c-0.28%2c-0.39 -0.55%2c-0.79 -0.81%2c-1.2c-2.03%2c-3.2 -3.38%2c-6.87 -3.85%2c-10.82l9.87%2c0c0.33%2c1.71 0.92%2c3.32 1.74%2c4.8c1.61%2c2.91 4.09%2c5.26 7.09%2c6.72c0.57%2c0.28 1.15%2c0.53 1.76%2c0.73c1.68%2c0.6 3.49%2c0.92 5.37%2c0.92c7.92%2c0 14.52%2c-5.67 15.96%2c-13.17c0.2%2c-1 0.3%2c-2.04 0.3%2c-3.09c0%2c-2.37 -0.51%2c-4.63 -1.43%2c-6.67c-1.66%2c-3.71 -4.68%2c-6.68 -8.43%2c-8.28l3.54%2c-9.1c7.43%2c3.08 13.13%2c9.49 15.21%2c17.38c0.44%2c1.64 0.72%2c3.34 0.81%2c5.09c0.04%2c0.52 0.05%2c1.05 0.05%2c1.58c0%2c1.05 -0.07%2c2.07 -0.18%2c3.09c-0.18%2c1.68 -0.54%2c3.3 -1.04%2c4.84z' class='st0'/%3e %3cg id='svg_2'%3e %3cg id='svg_3'%3e %3crect id='svg_4' height='6.34' width='94.12' class='st0' y='20.46' x='163.29'/%3e %3c/g%3e %3cg id='svg_5'%3e %3cpath id='svg_6' d='m169.31%2c113.72l0%2c-6.34c6.49%2c0 11.77%2c-5.28 11.77%2c-11.77l0%2c-71.98l6.34%2c0l0%2c71.98c0%2c9.98 -8.12%2c18.11 -18.11%2c18.11z' class='st0'/%3e %3c/g%3e %3cg id='svg_7'%3e %3cpath id='svg_8' d='m255.49%2c91.27l-6.34%2c0l0%2c-38.2c0%2c-5.06 -4.12%2c-9.18 -9.18%2c-9.18l-19.37%2c0c-5.06%2c0 -9.18%2c4.12 -9.18%2c9.18l0%2c38.2l-6.34%2c0l0%2c-38.2c0%2c-8.55 6.96%2c-15.51 15.51%2c-15.51l19.38%2c0c8.55%2c0 15.51%2c6.96 15.51%2c15.51l0%2c38.2l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_9'%3e %3crect id='svg_10' height='17.09' width='6.34' class='st0' y='23.63' x='227.12'/%3e %3c/g%3e %3cg id='svg_11'%3e %3cpath id='svg_12' d='m206.43%2c113.84l-3.34%2c0l0%2c-6.34l3.34%2c0c6.3%2c0 12.9%2c-3.56 15.35%2c-8.29c3.49%2c-6.71 5.33%2c-14.25 5.33%2c-21.81l0%2c-26.13l6.34%2c0l0%2c26.13c0%2c8.58 -2.09%2c17.13 -6.05%2c24.74c-3.98%2c7.68 -13.57%2c11.7 -20.97%2c11.7z' class='st0'/%3e %3c/g%3e %3cg id='svg_13'%3e %3cpath id='svg_14' d='m257.48%2c113.84l-3.34%2c0c-7.4%2c0 -16.98%2c-4.02 -20.98%2c-11.7c-3.96%2c-7.61 -6.05%2c-16.16 -6.05%2c-24.74l6.34%2c0c0%2c7.56 1.84%2c15.1 5.33%2c21.81c2.46%2c4.73 9.06%2c8.29 15.35%2c8.29l3.34%2c0l0%2c6.34l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_15'%3e %3crect id='svg_16' height='6.34' width='42.87' class='st0' y='27.89' x='274.07'/%3e %3c/g%3e %3cg id='svg_17'%3e %3crect id='svg_18' height='61.38' width='6.34' class='st0' y='14.89' x='293.05'/%3e %3c/g%3e %3cg id='svg_19'%3e %3crect id='svg_20' height='6.34' width='33.26' class='st0' transform='matrix(0.11%2c-0.9939%2c0.9939%2c0.11%2c194.7608%2c392.0006) ' y='46.985071' x='325.728637'/%3e %3c/g%3e %3cg id='svg_21'%3e %3crect id='svg_22' height='33.26' width='6.34' class='st0' transform='matrix(0.9939%2c-0.11%2c0.11%2c0.9939%2c-7.5075%2c38.3801) ' y='37.060893' x='310.495485'/%3e %3c/g%3e %3cg id='svg_23'%3e %3cpath id='svg_24' d='m352.9%2c77.14l-15.15%2c0c-7.52%2c0 -13.64%2c-6.12 -13.64%2c-13.63l0%2c-29.61c0%2c-7.52 6.12%2c-13.64 13.64%2c-13.64l15.15%2c0c7.52%2c0 13.64%2c6.12 13.64%2c13.64l0%2c29.61c0%2c7.52 -6.12%2c13.63 -13.64%2c13.63zm-15.15%2c-50.54c-4.02%2c0 -7.3%2c3.27 -7.3%2c7.3l0%2c29.61c0%2c4.02 3.27%2c7.3 7.3%2c7.3l15.15%2c0c4.02%2c0 7.3%2c-3.27 7.3%2c-7.3l0%2c-29.61c0%2c-4.02 -3.27%2c-7.3 -7.3%2c-7.3l-15.15%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_25'%3e %3cg id='svg_26'%3e %3crect id='svg_27' height='6.34' width='17.8' class='st0' y='37.2' x='336.43'/%3e %3c/g%3e %3cg id='svg_28'%3e %3crect id='svg_29' height='6.34' width='17.8' class='st0' y='53.87' x='336.43'/%3e %3c/g%3e %3c/g%3e %3cg id='svg_30'%3e %3cpath id='svg_31' d='m352.7%2c113.84l-37.98%2c0c-8%2c0 -14.5%2c-6.51 -14.5%2c-14.5l0%2c-16.14l6.34%2c0l0%2c16.13c0%2c4.5 3.66%2c8.17 8.17%2c8.17l37.98%2c0l0%2c6.34l-0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_32'%3e %3crect id='svg_33' height='6.34' width='23.57' class='st0' transform='matrix(0.2529%2c-0.9675%2c0.9675%2c0.2529%2c114.4986%2c402.9877) ' y='83.698593' x='326.836101'/%3e %3c/g%3e %3cg id='svg_34'%3e %3crect id='svg_35' height='6.34' width='20.52' class='st0' y='86.2' x='321.58'/%3e %3c/g%3e %3cg id='svg_36'%3e %3crect id='svg_37' height='24.75' width='6.34' class='st0' transform='matrix(0.9556%2c-0.2946%2c0.2946%2c0.9556%2c-19.7967%2c122.424) ' y='75.874073' x='369.686666'/%3e %3c/g%3e %3cg id='svg_38'%3e %3crect id='svg_39' height='6.34' width='71.83' class='st0' y='20.46' x='395.51'/%3e %3c/g%3e %3cg id='svg_40'%3e %3crect id='svg_41' height='6.34' width='90.81' class='st0' y='57.44' x='386.02'/%3e %3c/g%3e %3cg id='svg_42'%3e %3cpath id='svg_43' d='m463.12%2c113.64l-56%2c0c-4.5%2c0 -8.59%2c-2.29 -10.94%2c-6.14c-2.35%2c-3.84 -2.52%2c-8.53 -0.46%2c-12.53l17.68%2c-35.81l5.64%2c2.89l-17.68%2c35.81c-1.04%2c2.02 -0.95%2c4.39 0.23%2c6.33c1.19%2c1.94 3.25%2c3.1 5.53%2c3.1l56%2c0c1.51%2c0 2.88%2c-0.71 3.74%2c-1.95c0.81%2c-1.16 1.03%2c-2.57 0.63%2c-3.91l-7.8%2c-12.34l5.36%2c-3.39l8.18%2c12.94l0.12%2c0.31c1.24%2c3.34 0.76%2c7.08 -1.28%2c10.01c-2.04%2c2.94 -5.39%2c4.68 -8.95%2c4.68z' class='st0'/%3e %3c/g%3e %3c/g%3e %3c/g%3e%3c/svg%3e\";\n export default img;","import styled from 'styled-components';\r\n\r\nexport const Dimmable = styled.div`\r\n position: relative;\r\n`;\r\n\r\ninterface DimmerProps {\r\n active?: boolean\r\n inverted?: boolean\r\n}\r\n\r\nconst Dimmer = styled.div<DimmerProps>`\r\n display: ${props => props.active ? 'flex' : 'none'};\r\n position: absolute;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n vertical-align: middle;\r\n padding: 1em;\r\n background-color: ${props => props.inverted ? 'rgba(255, 255, 255, .85)' : 'rgba(0, 0, 0, .85)'};\r\n opacity: ${props => props.active ? 1 : 0};\r\n line-height: 1;\r\n animation-fill-mode: both;\r\n animation-duration: .5s;\r\n transition: background-color .5s linear;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n user-select: none;\r\n will-change: opacity;\r\n z-index: 990;\r\n`;\r\n\r\nexport default Dimmer;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Spinner, SpinnerProps } from 'react-bootstrap';\r\nimport Dimmer from './dimmer';\r\nimport styled from 'styled-components';\r\n\r\ninterface LoaderProps {\r\n loading?: boolean;\r\n animation?: SpinnerProps['animation'];\r\n wrap?: boolean;\r\n}\r\n\r\nexport default function Loader({\r\n loading = true,\r\n children,\r\n variant = 'success',\r\n animation = 'border',\r\n wrap,\r\n ...props\r\n}: PropsWithChildren<LoaderProps & Omit<SpinnerProps, 'animation'>>): JSX.Element | null {\r\n if (!loading) {\r\n return null;\r\n }\r\n\r\n if (children) {\r\n children = <p className='mt-3 text-secondary'>{children}</p>;\r\n }\r\n\r\n children = <Dimmer inverted active>\r\n <Spinner animation={animation} variant={variant} {...props} />\r\n {children}\r\n </Dimmer>;\r\n\r\n if (wrap) {\r\n return <Wrap height={typeof wrap === 'number' ? wrap : 150}>\r\n {children}\r\n </Wrap>;\r\n }\r\n\r\n return children as JSX.Element;\r\n}\r\n\r\nconst Wrap = styled.div<{ height: number }>`\r\n position: relative;\r\n height: ${props => `${props.height}px`};\r\n`;\r\n","export default class Unauthorized extends Error {\r\n\r\n url: string;\r\n\r\n constructor(url: string) {\r\n super('Unauthorized');\r\n this.url = url;\r\n }\r\n}\r\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import { useAsync } from 'react-async-hook';\r\nimport { Navigate } from 'react-router-dom';\r\nimport Loader from '../components/loader';\r\n\r\ninterface LoginProps {\r\n onLogin: () => void | Promise<void>;\r\n}\r\n\r\nexport default function Login({ onLogin }: LoginProps) {\r\n const { result } = useAsync(async () => {\r\n await onLogin();\r\n\r\n const redirectUri = sessionStorage.getItem('redirect_uri');\r\n if (redirectUri) {\r\n sessionStorage.removeItem('redirect_uri');\r\n }\r\n return redirectUri || '/';\r\n }, []);\r\n\r\n if (result) {\r\n return <Navigate to={result} replace />;\r\n }\r\n\r\n return <Loader />;\r\n}\r\n","import { useAsync } from 'react-async-hook';\r\nimport Loader from '../components/loader';\r\n\r\ninterface LogoutProps {\r\n onLogout: () => void | Promise<void>;\r\n}\r\n\r\nexport default function Logout({ onLogout }: LogoutProps) {\r\n useAsync(async () => {\r\n await onLogout();\r\n }, []);\r\n\r\n return <Loader />;\r\n}\r\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\r\nimport queryString from 'query-string';\r\nimport * as rax from 'retry-axios';\r\nimport { RetryConfig } from 'retry-axios';\r\nimport Unauthorized from './errors/unauthorized';\r\nimport Toast from './utils/toast';\r\n\r\nexport type Errors = string | {\r\n [key: string]: string\r\n}\r\n\r\ndeclare module 'axios' {\r\n interface AxiosError {\r\n errors: Errors;\r\n }\r\n\r\n interface AxiosRequestConfig {\r\n raxConfig?: RetryConfig;\r\n }\r\n}\r\n\r\nrax.attach();\r\naxios.defaults.raxConfig = {\r\n retryDelay: 2000,\r\n backoffType: 'static',\r\n shouldRetry: (err) => {\r\n return (\r\n err.config.method?.toUpperCase() === 'GET'\r\n && err.response?.status === 449\r\n );\r\n }\r\n};\r\naxios.defaults.maxContentLength = Infinity;\r\naxios.defaults.maxBodyLength = Infinity;\r\naxios.defaults.baseURL = '/api';\r\naxios.interceptors.request.use(\r\n config => {\r\n const token = sessionStorage.getItem('authorization');\r\n\r\n if (token) {\r\n config.headers = {\r\n ...config.headers,\r\n Authorization: `Bearer ${token}`\r\n };\r\n }\r\n return config;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nconst isRecord = (data: any): data is Record<string, string> => {\r\n return data && (typeof data === 'object');\r\n};\r\n\r\naxios.interceptors.response.use(\r\n response => {\r\n if (response.status === 201 && response.data.location) {\r\n window.location.href = response.data.location;\r\n response.data = undefined; //防止多次跳转\r\n }\r\n\r\n return response;\r\n },\r\n e => {\r\n if (axios.isAxiosError(e)) {\r\n if (e.response) {\r\n const { data, status } = e.response;\r\n if (status === 401) {\r\n e.errors = 'Unauthorized';\r\n if (isRecord(data) && data.url) {\r\n e = new Unauthorized(data.url);\r\n }\r\n Toast.error('Unauthorized');\r\n } else {\r\n if (isRecord(data)) {\r\n if (status === 422) {\r\n e.errors = data;\r\n } else if ('message' in data) {\r\n e.errors = data['message'];\r\n }\r\n } else {\r\n e.errors = data as string;\r\n }\r\n }\r\n }\r\n }\r\n return Promise.reject(e);\r\n }\r\n);\r\n\r\nexport type RequestConfig = AxiosRequestConfig | string\r\nexport type RequestInstance = AxiosInstance\r\nexport const isRequestError = axios.isAxiosError;\r\n\r\nconst request = async function <T = any>(config: RequestConfig) {\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n const { data } = await axios.request<T>({\r\n paramsSerializer: function(params) {\r\n return queryString.stringify(params, {\r\n sort: false,\r\n skipNull: true,\r\n skipEmptyString: true\r\n });\r\n },\r\n ...config\r\n });\r\n\r\n return data;\r\n};\r\n\r\nrequest.defaults = axios.defaults;\r\nrequest.interceptors = axios.interceptors;\r\n\r\nexport default request;\r\n","import Unauthorized from '../errors/unauthorized';\r\nimport { BrowserRouter, Route, Routes } from 'react-router-dom';\r\nimport React, { PropsWithChildren } from 'react';\r\nimport Login from '../pages/login';\r\nimport Logout from '../pages/logout';\r\nimport queryString from 'query-string';\r\nimport request from '../request';\r\nimport { User } from './types';\r\nimport * as path from 'path';\r\n\r\ntype UserResolver = () => User | Promise<User>\r\n\r\nexport const AppContext = React.createContext<{ userResolver?: UserResolver, onUnauthorized?: (error: Unauthorized) => void }>({});\r\n\r\nfunction stripBasename(pathname: string, basename: string) {\r\n if (basename === '/') return pathname;\r\n\r\n return pathname.slice(basename.length);\r\n}\r\n\r\ninterface Options {\r\n baseURL?: string;\r\n basename?: string;\r\n authentication?: 'cookie' | 'token';\r\n onLogout?: () => void | Promise<void>;\r\n onLogin?: () => (void | string) | Promise<void | string>;\r\n userResolver?: UserResolver;\r\n}\r\n\r\nexport default function createApplication(options: Options) {\r\n const { basename = '/', onLogin, onLogout, authentication, baseURL, userResolver } = options;\r\n\r\n if (baseURL) {\r\n request.defaults.baseURL = baseURL;\r\n }\r\n\r\n if (authentication === 'token') {\r\n request.interceptors.request.use(\r\n config => {\r\n const token = sessionStorage.getItem('authorization');\r\n\r\n if (token) {\r\n config.headers = {\r\n ...config.headers,\r\n Authorization: `Bearer ${token}`\r\n };\r\n }\r\n return config;\r\n }\r\n );\r\n }\r\n\r\n const onUnauthorized = (error: Unauthorized) => {\r\n if (window.location.pathname !== path.join(basename, '/logout')) {\r\n sessionStorage.setItem('redirect_uri', stripBasename(window.location.pathname + window.location.search, basename));\r\n }\r\n const redirectUri = window.location.origin + path.join(basename, '/login');\r\n\r\n window.location.href = queryString.stringifyUrl({\r\n url: error.url,\r\n query: { redirect_uri: redirectUri }\r\n });\r\n };\r\n\r\n const handleLogin = async () => {\r\n let token: string | void;\r\n if (onLogin) {\r\n token = await onLogin();\r\n } else {\r\n const parsed = queryString.parse(window.location.hash.substr(1));\r\n if (parsed.access_token) {\r\n token = parsed.access_token as string;\r\n }\r\n }\r\n\r\n if (authentication === 'token' && token) {\r\n sessionStorage.setItem('authorization', token);\r\n }\r\n };\r\n\r\n const handleLogout = async () => {\r\n if (onLogout) {\r\n try {\r\n await onLogout();\r\n } catch (e) {\r\n if (e instanceof Unauthorized) {\r\n onUnauthorized(e);\r\n }\r\n }\r\n }\r\n\r\n if (authentication === 'token') {\r\n sessionStorage.removeItem('authorization');\r\n }\r\n };\r\n\r\n return function({ children }: PropsWithChildren<any>) {\r\n return <AppContext.Provider value={{ userResolver, onUnauthorized }}>\r\n <BrowserRouter basename={basename}>\r\n <Routes>\r\n <Route path='*' element={children} />\r\n <Route path='login' element={<Login onLogin={handleLogin} />} />\r\n <Route path='logout' element={<Logout onLogout={handleLogout} />} />\r\n </Routes>\r\n </BrowserRouter>\r\n </AppContext.Provider>;\r\n };\r\n}\r\n","import React, { PropsWithChildren, useContext, useState } from 'react';\r\nimport Loader from './loader';\r\nimport { User } from '../utils/types';\r\nimport { AppContext } from '../utils/create-application';\r\nimport { useAsync } from 'react-async-hook';\r\nimport Unauthorized from '../errors/unauthorized';\r\n\r\nexport const UserContext = React.createContext<[User, ((user: User) => void)] | null>(null);\r\n\r\nconst UserProvider = function({ children }: PropsWithChildren<any>) {\r\n const [state, setState] = useState<User | null>(null);\r\n\r\n const { userResolver, onUnauthorized } = useContext(AppContext);\r\n\r\n useAsync(async () => {\r\n if (userResolver) {\r\n return userResolver();\r\n }\r\n }, [], {\r\n onError(e) {\r\n if (e instanceof Unauthorized && onUnauthorized) {\r\n onUnauthorized(e);\r\n }\r\n },\r\n onSuccess(user) {\r\n if (user) {\r\n setState(user);\r\n }\r\n }\r\n });\r\n\r\n if (!state) {\r\n return <Loader />;\r\n }\r\n\r\n return <UserContext.Provider value={[state, setState]}>\r\n {children}\r\n </UserContext.Provider>;\r\n};\r\n\r\nexport function useUser() {\r\n const context = useContext(UserContext);\r\n if (!context) {\r\n throw new Error('please use `useUser` in UserContext');\r\n }\r\n\r\n return context;\r\n}\r\n\r\nexport default UserProvider;\r\n","import logoSrc from '../images/logo.svg';\r\nimport { Dropdown } from 'react-bootstrap';\r\nimport styled from 'styled-components';\r\nimport { PropsWithChildren, ReactNode } from 'react';\r\nimport { useUser } from './user-provider';\r\nimport classNames from 'classnames';\r\n\r\nconst Avatar = styled.a`\r\n cursor: pointer;\r\n`;\r\n\r\ninterface Props {\r\n menus: ReactNode;\r\n className?: string;\r\n logo?: boolean;\r\n}\r\n\r\nexport default function Header({ children, menus, className, logo = true }: PropsWithChildren<Props>) {\r\n const [user] = useUser();\r\n\r\n return <Container\r\n className={classNames('navbar navbar-expand-lg navbar-light bg-white border-bottom sticky-top', className)}>\r\n <div className='container-fluid'>\r\n {logo && <a className='navbar-brand' href='https://www.topthink.com'>\r\n <img src={logoSrc} height='30' />\r\n </a>}\r\n {children}\r\n <Dropdown navbar>\r\n <Dropdown.Toggle as={Avatar} className='nav-link'>\r\n <img className='rounded-circle' width='25' height='25' src={user.avatar} />\r\n </Dropdown.Toggle>\r\n <Dropdown.Menu className={'shadow'}>\r\n {menus}\r\n </Dropdown.Menu>\r\n </Dropdown>\r\n </div>\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.header`\r\n height: 54px;\r\n`;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Card as BsCard, CardProps as BsCardProps } from 'react-bootstrap';\r\nimport classNames from 'classnames';\r\n\r\ninterface CardProps extends BsCardProps {\r\n title?: string;\r\n}\r\n\r\nexport default function Card({ children, title, className, ...props }: PropsWithChildren<CardProps>) {\r\n\r\n return <BsCard className={classNames('border-0 shadow-sm mb-3', className)} {...props}>\r\n <div className='card-body'>\r\n {title && <>\r\n <h5>{title}</h5>\r\n <hr />\r\n </>}\r\n {children}\r\n </div>\r\n </BsCard>;\r\n}\r\n","import { Alert } from 'react-bootstrap';\r\nimport { Errors } from '../request';\r\n\r\nexport default function Error({ errors }: { errors?: Errors }) {\r\n if (!errors) {\r\n return null;\r\n }\r\n return <Alert variant='danger'>\r\n <ul className='mb-0'>\r\n {typeof errors === 'string'\r\n ? <li>{errors}</li>\r\n : Object.entries(errors).map(([name, error]) => <li key={name}>{error}</li>)\r\n }\r\n </ul>\r\n </Alert>;\r\n}\r\n","import { ReactNode } from 'react';\r\nimport { intersection } from 'lodash';\r\nimport { useUser } from './user-provider';\r\nimport { User } from '../utils/types';\r\n\r\nexport interface AccessProps {\r\n require?: string | string[] | ((user: User) => boolean);\r\n fallback?: ReactNode;\r\n children: ReactNode;\r\n}\r\n\r\nexport default function Access({\r\n require,\r\n children,\r\n fallback\r\n}: AccessProps) {\r\n const [user,] = useUser();\r\n let passed = false;\r\n if (typeof require === 'function') {\r\n passed = require(user);\r\n } else {\r\n if (typeof require === 'string') {\r\n require = [require];\r\n }\r\n passed = intersection(user.roles, require).length > 0;\r\n }\r\n if (!passed) {\r\n children = fallback;\r\n }\r\n\r\n return <>{children}</>;\r\n}\r\n","import { Children, ReactNode } from 'react';\r\nimport styled from 'styled-components';\r\n\r\ninterface SpaceProps {\r\n children: ReactNode;\r\n size?: 'small' | 'middle' | 'large' | number;\r\n}\r\n\r\n\r\nexport default function Space({ children, size = 'small' }: SpaceProps) {\r\n\r\n if (typeof size === 'string') {\r\n size = {\r\n small: 8,\r\n middle: 16,\r\n large: 24\r\n }[size];\r\n }\r\n\r\n const items = Children.map(children, (child) => {\r\n if (child) {\r\n return <Item>{child}</Item>;\r\n }\r\n });\r\n\r\n return <Container size={size}>\r\n {items}\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div<{ size: number }>`\r\n display: inline-flex;\r\n align-items: center;\r\n gap: ${props => props.size}px;\r\n`;\r\n\r\nconst Item = styled.div`\r\n\r\n`;\r\n","var img = \"data:image/svg+xml,%3csvg t='1651217947509' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2548' width='16px' height='16px' fill='currentColor'%3e %3cpath d='M887.904 298.208c-12.864-12.064-33.152-11.488-45.216 1.408L415.936 753.984l-233.12-229.696C170.208 511.872 149.952 512 137.536 524.608c-12.416 12.576-12.256 32.864 0.352 45.248l256.48 252.672c0.096 0.096 0.224 0.128 0.32 0.224 0.096 0.096 0.128 0.224 0.224 0.32 2.016 1.92 4.448 3.008 6.784 4.288 1.152 0.672 2.144 1.664 3.36 2.144 3.776 1.472 7.776 2.24 11.744 2.24 4.192 0 8.384-0.832 12.288-2.496 1.312-0.544 2.336-1.664 3.552-2.368 2.4-1.408 4.896-2.592 6.944-4.672 0.096-0.096 0.128-0.256 0.224-0.352 0.064-0.096 0.192-0.128 0.288-0.224l449.184-478.208C901.44 330.592 900.768 310.336 887.904 298.208z' p-id='2549'%3e%3c/path%3e%3c/svg%3e\";\n export default img;","import RcSteps from 'rc-steps';\r\nimport 'rc-steps/assets/index.css';\r\nimport styled from 'styled-components';\r\nimport { ComponentProps } from 'react';\r\nimport { ReactComponent as CheckIcon } from '../images/step_check.svg';\r\n\r\nexport default function Steps(props: ComponentProps<typeof RcSteps>) {\r\n return <CustomRcSteps\r\n icons={{\r\n finish: <CheckIcon />,\r\n error: <></>\r\n }}\r\n {...props}\r\n />;\r\n}\r\n\r\nSteps.Step = RcSteps.Step;\r\n\r\nconst CustomRcSteps = styled(RcSteps)`\r\n .rc-steps-item-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n\r\n & > .rc-steps-icon {\r\n top: 0;\r\n }\r\n }\r\n\r\n .rc-steps-item-process {\r\n .rc-steps-item-icon {\r\n background: var(--bs-primary);\r\n border-color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-steps-item-finish {\r\n .rc-steps-item-icon {\r\n border-color: var(--bs-primary);\r\n\r\n & > .rc-steps-icon {\r\n color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-steps-item-title:after {\r\n background-color: var(--bs-primary);\r\n }\r\n }\r\n\r\n`;\r\n","import { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { Pagination as BsPagination } from 'react-bootstrap';\r\n\r\nfunction noop() {\r\n}\r\n\r\n\r\nfunction isInteger(value: any): value is number {\r\n return (\r\n typeof value === 'number' && isFinite(value) && Math.floor(value) === value\r\n );\r\n}\r\n\r\nexport interface PaginationProps {\r\n className?: string\r\n total: number\r\n current?: number\r\n defaultCurrent?: number\r\n pageSize?: number\r\n defaultPageSize?: number,\r\n onChange?: (current: number, pageSize: number) => void\r\n}\r\n\r\nexport default function Pagination({\r\n total = 0,\r\n onChange = noop,\r\n defaultCurrent = 1,\r\n defaultPageSize = 10,\r\n className,\r\n ...props\r\n}: PaginationProps) {\r\n\r\n const [current, setCurrent] = useState(defaultCurrent);\r\n const [pageSize, setPageSize] = useState(defaultPageSize);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.current)) {\r\n setCurrent(props.current);\r\n }\r\n }, [props.current]);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.pageSize)) {\r\n setPageSize(props.pageSize);\r\n }\r\n }, [props.pageSize]);\r\n\r\n const allPages = useMemo(() => {\r\n return Math.floor((total - 1) / pageSize) + 1;\r\n }, [total, pageSize]);\r\n\r\n const handleChange = useCallback((p: number) => {\r\n return () => {\r\n if (p !== current) {\r\n setCurrent(p);\r\n onChange(p, pageSize);\r\n }\r\n };\r\n }, [onChange, current, pageSize]);\r\n\r\n const pageBufferSize = 2;\r\n const prevPage = current - 1 > 0 ? current - 1 : 0;\r\n const nextPage = current + 1 < allPages ? current + 1 : allPages;\r\n\r\n const pagerList = [];\r\n let jumpPrev = null;\r\n let jumpNext = null;\r\n let firstPager = null;\r\n let lastPager = null;\r\n\r\n if (allPages <= 3 + pageBufferSize * 2) {\r\n for (let i = 1; i <= allPages; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n } else {\r\n lastPager = <BsPagination.Last key='last' onClick={handleChange(allPages)} />;\r\n firstPager = <BsPagination.First key='first' onClick={handleChange(1)} />;\r\n jumpPrev = <BsPagination.Prev key='prev' onClick={handleChange(prevPage)} />;\r\n jumpNext = <BsPagination.Next key='next' onClick={handleChange(nextPage)} />;\r\n\r\n let left = Math.max(1, current - pageBufferSize);\r\n let right = Math.min(current + pageBufferSize, allPages);\r\n\r\n if (current - 1 <= pageBufferSize) {\r\n right = 1 + pageBufferSize * 2;\r\n }\r\n\r\n if (allPages - current <= pageBufferSize) {\r\n left = allPages - pageBufferSize * 2;\r\n }\r\n\r\n for (let i = left; i <= right; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n\r\n if (current - 1 >= pageBufferSize * 2 && current !== 1 + 2) {\r\n pagerList.unshift(jumpPrev);\r\n }\r\n if (\r\n allPages - current >= pageBufferSize * 2 &&\r\n current !== allPages - 2\r\n ) {\r\n pagerList.push(jumpNext);\r\n }\r\n\r\n if (left !== 1) {\r\n pagerList.unshift(firstPager);\r\n }\r\n if (right !== allPages) {\r\n pagerList.push(lastPager);\r\n }\r\n }\r\n\r\n return <BsPagination className={className}>\r\n {pagerList}\r\n </BsPagination>;\r\n\r\n}\r\n","import { useMemo } from 'react';\r\n\r\ninterface Props {\r\n value: number;\r\n currency?: boolean;\r\n locale?: string;\r\n className?: string;\r\n}\r\n\r\nexport default function NumberFormat({ className, value, locale = 'zh-CN', currency = true }: Props) {\r\n\r\n const formatter = useMemo(() => {\r\n\r\n let options = {};\r\n\r\n if (currency) {\r\n options = {\r\n style: 'currency',\r\n currency: 'CNY',\r\n ...options\r\n };\r\n } else {\r\n options = {\r\n minimumFractionDigits: 2,\r\n };\r\n }\r\n\r\n return new Intl.NumberFormat(locale, options);\r\n }, [currency, locale]);\r\n\r\n if (className) {\r\n return <span className={className}>{formatter.format(value)}</span>;\r\n }\r\n\r\n return <>{formatter.format(value)}</>;\r\n}\r\n","import { Button, ButtonProps } from 'react-bootstrap';\r\n\r\ninterface CustomButtonProps extends ButtonProps {\r\n loading: boolean\r\n}\r\n\r\nexport default function LoadingButton({ loading, children, ...props }: CustomButtonProps) {\r\n\r\n return <Button {...props} disabled={loading}>\r\n {loading ? 'Loading…' : children}\r\n </Button>;\r\n}\r\n","import { Button, ButtonProps } from 'react-bootstrap';\r\nimport request, { RequestConfig } from '../request';\r\nimport { createElement, ElementType, MouseEvent, useCallback, useState } from 'react';\r\nimport Message from '../utils/message';\r\nimport axios, { AxiosRequestConfig } from 'axios';\r\n\r\ninterface Props extends Omit<ButtonProps, 'as'> {\r\n url: RequestConfig;\r\n method?: AxiosRequestConfig['method'];\r\n confirm?: string;\r\n onSuccess?: (result: any) => void;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport default function RequestButton({\r\n url,\r\n method,\r\n confirm,\r\n onSuccess,\r\n children,\r\n disabled,\r\n as = Button,\r\n ...props\r\n}: Props) {\r\n\r\n const [fetching, setFetching] = useState(false);\r\n\r\n const handleClick = useCallback(async (e: MouseEvent) => {\r\n e.preventDefault();\r\n try {\r\n setFetching(true);\r\n if (confirm) {\r\n if (!await Message.confirm({ text: confirm })) {\r\n return;\r\n }\r\n }\r\n\r\n const config = typeof url === 'string' ? { url, method } : { method, ...url };\r\n\r\n const result = await request(config);\r\n\r\n if (onSuccess) {\r\n onSuccess(result);\r\n }\r\n } catch (e) {\r\n if (axios.isAxiosError(e)) {\r\n let errors = e.errors;\r\n if (typeof e.errors !== 'string') {\r\n errors = Object.values(e.errors).join('<br />');\r\n }\r\n Message.error({ text: errors as string });\r\n } else {\r\n throw e;\r\n }\r\n } finally {\r\n setFetching(false);\r\n }\r\n }, [url, method, setFetching]);\r\n\r\n return createElement(as, {\r\n ...props,\r\n disabled: disabled || fetching,\r\n onClick: handleClick\r\n }, children);\r\n}\r\n","import { Button, ButtonProps } from 'react-bootstrap';\r\nimport { LinkProps, useNavigate } from 'react-router-dom';\r\n\r\ninterface Props extends ButtonProps, Pick<LinkProps, 'to' | 'replace'> {\r\n\r\n}\r\n\r\nexport default function LinkButton({ to, replace, ...props }: Props) {\r\n let navigate = useNavigate();\r\n\r\n return <Button {...props} onClick={(e) => {\r\n e.preventDefault();\r\n navigate(to, { replace });\r\n }} />;\r\n}\r\n","import JsonForm, { JsonFormProps, JsonFormType, getRegistry } from '@topthink/json-form';\r\nimport * as React from 'react';\r\nimport {\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useCallback,\r\n useState\r\n} from 'react';\r\nimport axios, { AxiosError, Method } from 'axios';\r\nimport LoadingButton from './loading-button';\r\nimport request from '../request';\r\nimport { mapValues } from 'lodash';\r\nimport { AjvError, ISubmitEvent, WidgetProps } from '@rjsf/core';\r\n\r\nconst localize = require('ajv-i18n/localize/zh');\r\n\r\nexport interface FormProps<T = any> extends JsonFormProps<T> {\r\n onSuccess?: (data: any) => void;\r\n method?: Method;\r\n children?: ReactNode | ((props: { submit: ReactNode, loading: boolean }) => ReactNode);\r\n submitText?: string;\r\n}\r\n\r\ntype Error = {\r\n __errors: string[]\r\n}\r\n\r\ntype Errors = Error | {\r\n [key: string]: Error\r\n}\r\n\r\nconst toExtraErrors = (error: AxiosError): Errors => {\r\n const errors = error.errors;\r\n if (typeof errors === 'string') {\r\n return {\r\n __errors: [errors]\r\n };\r\n }\r\n return mapValues(errors, (e) => {\r\n return {\r\n __errors: [e]\r\n };\r\n });\r\n};\r\n\r\nconst widgets = {\r\n upload: function(props: WidgetProps) {\r\n const { widgets } = getRegistry();\r\n\r\n const options = {\r\n ...props.options,\r\n async onUpload(file: File) {\r\n if (props.options.onUpload instanceof Function) {\r\n return await props.options.onUpload.call(file);\r\n }\r\n if (props.options.endpoint) {\r\n const data = new FormData();\r\n\r\n data.set('file', file);\r\n\r\n const { url } = await request({\r\n url: props.options.endpoint as string,\r\n method: 'post',\r\n data\r\n });\r\n\r\n return url;\r\n }\r\n }\r\n };\r\n\r\n return <widgets.upload {...props} options={options} />;\r\n }\r\n};\r\n\r\nexport interface FormType extends JsonFormType {\r\n\r\n}\r\n\r\ntype Form<T = any> = ForwardRefExoticComponent<PropsWithoutRef<FormProps<T>> & RefAttributes<FormType>>\r\n\r\nconst Form: Form = forwardRef(({\r\n action,\r\n method = 'post',\r\n onSuccess,\r\n formData,\r\n onSubmit,\r\n onChange,\r\n submitText = '提交',\r\n children,\r\n ...props\r\n}, ref) => {\r\n\r\n const [extraErrors, setExtraErrors] = useState<Errors>();\r\n const [loading, setLoading] = useState(false);\r\n const [data, setData] = useState(formData);\r\n\r\n const handleSubmit = useCallback(async (e: ISubmitEvent<any>, nativeEvent: React.FormEvent<HTMLFormElement>) => {\r\n try {\r\n setLoading(true);\r\n if (action) {\r\n const { formData } = e;\r\n //todo 包含File对象需转FormData\r\n try {\r\n const result = await request({\r\n url: action,\r\n method,\r\n data: formData\r\n });\r\n setExtraErrors(undefined);\r\n if (onSuccess) {\r\n await onSuccess(result);\r\n }\r\n } catch (e) {\r\n if (axios.isAxiosError(e)) {\r\n setExtraErrors(toExtraErrors(e));\r\n }\r\n\r\n throw e;\r\n }\r\n } else if (onSubmit) {\r\n await onSubmit(e, nativeEvent);\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [action, method, onSubmit]);\r\n\r\n const handleChange = useCallback((e: ISubmitEvent<any>) => {\r\n const { formData } = e;\r\n setData(formData);\r\n if (onChange) {\r\n onChange(e);\r\n }\r\n }, [setData, onChange]);\r\n\r\n const transformErrors = useCallback((errors: AjvError[]) => {\r\n errors = errors.map(error => ({\r\n keyword: error.name,\r\n dataPath: error.property,\r\n ...error\r\n }));\r\n\r\n localize(errors);\r\n\r\n return errors;\r\n }, []);\r\n\r\n const submit = <LoadingButton loading={loading} type='submit' variant='primary'>{submitText}</LoadingButton>;\r\n\r\n if (typeof children === 'function') {\r\n children = children({ submit, loading });\r\n }\r\n\r\n return <JsonForm\r\n ref={ref}\r\n extraErrors={extraErrors}\r\n onSubmit={handleSubmit}\r\n transformErrors={transformErrors}\r\n noHtml5Validate\r\n noValidate\r\n {...props}\r\n formData={data}\r\n onChange={handleChange}\r\n widgets={widgets}\r\n >\r\n {children || <div className='col-12'>\r\n {submit}\r\n </div>}\r\n </JsonForm>;\r\n});\r\n\r\nexport default Form;\r\n","import styled from 'styled-components';\r\nimport { PropsWithChildren, ReactNode } from 'react';\r\n\r\ninterface ContentProps {\r\n title: string;\r\n extra?: ReactNode;\r\n}\r\n\r\nexport default function Content({ title, children, extra }: PropsWithChildren<ContentProps>) {\r\n\r\n\r\n return <Container>\r\n <Header>\r\n <div className='container'>\r\n <Title>\r\n {title}\r\n </Title>\r\n <Extra>{extra}</Extra>\r\n </div>\r\n </Header>\r\n <Body className='container'>\r\n {children}\r\n </Body>\r\n </Container>;\r\n};\r\n\r\nconst Container = styled.div`\r\n width: 100%;\r\n`;\r\n\r\nconst Header = styled.div`\r\n background-color: #fff;\r\n display: flex;\r\n\r\n .container {\r\n padding: 0 24px;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n }\r\n`;\r\n\r\nconst Body = styled.div`\r\n margin-top: 24px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n font-size: 22px;\r\n line-height: 64px;\r\n height: 64px;\r\n`;\r\n\r\nconst Extra = styled.div`\r\n\r\n`;\r\n","import { Columns, TableProps, TableRowSelection } from './index';\r\nimport { InputHTMLAttributes, Key, useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nconst Checkbox = function({\r\n indeterminate = false,\r\n ...props\r\n}: InputHTMLAttributes<HTMLInputElement> & { indeterminate?: boolean }) {\r\n\r\n const ref = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n if (ref.current) {\r\n ref.current.indeterminate = indeterminate;\r\n }\r\n }, [indeterminate]);\r\n\r\n return <input\r\n ref={ref}\r\n {...props}\r\n className='form-check-input'\r\n type='checkbox'\r\n />;\r\n};\r\n\r\nexport default function useSelection<T = any>(\r\n rowSelection: TableRowSelection<T> | undefined,\r\n rowKey: Required<TableProps<T>>['rowKey'],\r\n data: T[]\r\n) {\r\n const [keys, setKeys] = useState(() => new Set(rowSelection?.selectedRowKeys || []));\r\n\r\n const getRowKey = (record: T) => {\r\n if (typeof rowKey === 'string') {\r\n // @ts-ignore\r\n return record[rowKey];\r\n } else {\r\n return rowKey(record);\r\n }\r\n };\r\n\r\n const getRecordByKey = (key: Key) => {\r\n return data.find((record) => {\r\n return getRowKey(record) === key;\r\n })!;\r\n };\r\n\r\n const setSelectedKeys = useCallback((keys: Set<Key>) => {\r\n setKeys(keys);\r\n const changedKeys = Array.from(keys);\r\n\r\n const records = changedKeys.map(function(key) {\r\n return getRecordByKey(key);\r\n });\r\n\r\n if (rowSelection?.onChange) {\r\n rowSelection?.onChange(changedKeys, records);\r\n }\r\n }, [getRecordByKey]);\r\n\r\n const transformColumns = useCallback((columns: Columns): Columns => {\r\n if (!rowSelection) {\r\n return columns;\r\n }\r\n\r\n const recordKeys = data.map(getRowKey);\r\n\r\n const checkedCurrentAll = recordKeys.every(function(key) {\r\n return keys.has(key);\r\n });\r\n const checkedCurrentSome = recordKeys.some(function(key) {\r\n return keys.has(key);\r\n });\r\n\r\n return [{\r\n key: 'selection',\r\n title: <Checkbox\r\n checked={checkedCurrentAll}\r\n indeterminate={!checkedCurrentAll && checkedCurrentSome}\r\n onChange={() => {\r\n if (checkedCurrentAll) {\r\n recordKeys.forEach(function(key) {\r\n keys.delete(key);\r\n });\r\n } else {\r\n recordKeys.forEach(function(key) {\r\n keys.add(key);\r\n });\r\n }\r\n setSelectedKeys(new Set(keys));\r\n }}\r\n />,\r\n width: 30,\r\n align: 'center',\r\n render({ record }) {\r\n const key = getRowKey(record);\r\n const checked = keys.has(key);\r\n return <Checkbox\r\n checked={checked}\r\n onChange={() => {\r\n if (checked) {\r\n keys.delete(key);\r\n } else {\r\n keys.add(key);\r\n }\r\n setSelectedKeys(new Set(keys));\r\n }}\r\n />;\r\n }\r\n }, ...columns];\r\n }, [data, rowSelection, keys]);\r\n\r\n return [transformColumns];\r\n}\r\n","import RcTable from 'rc-table';\r\nimport { TableProps as RcTableProps } from 'rc-table/lib/Table';\r\nimport { ColumnGroupType, ColumnsType, ColumnType as BsColumnType, RenderedCell } from 'rc-table/lib/interface';\r\nimport { Form, Table as BsTable, TableProps as BsTableProps } from 'react-bootstrap';\r\nimport {\r\n ChangeEvent,\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n Key,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useCallback,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState\r\n} from 'react';\r\nimport Pagination from '../pagination';\r\nimport styled from 'styled-components';\r\nimport request from '../../request';\r\nimport Card from '../card';\r\nimport Loader from '../loader';\r\nimport Space from '../space';\r\nimport useDebounce from '../../hooks/use-debounce';\r\nimport useSelection from './use-selection';\r\nimport { PaginationType } from '../../utils/types';\r\n\r\nexport interface TableType {\r\n reload: () => void;\r\n}\r\n\r\ninterface ColumnType<RecordType> extends Omit<BsColumnType<RecordType>, 'render'> {\r\n render?: (data: { value: any, record: RecordType, index: number, action: TableType }) => ReactNode | RenderedCell<RecordType>;\r\n}\r\n\r\nexport type Columns<RecordType = any> = (ColumnGroupType<RecordType> | ColumnType<RecordType>)[]\r\n\r\nconst CustomTable = styled(BsTable)`\r\n .rc-table-thead {\r\n border-top: none;\r\n }\r\n`;\r\n\r\nconst components: RcTableProps['components'] = {\r\n table: (props: BsTableProps) => {\r\n return <CustomTable {...props} className='align-middle table-hover' />;\r\n },\r\n};\r\n\r\n\r\nconst CustomPagination = styled(Pagination)`\r\n margin-bottom: 0;\r\n justify-content: flex-end;\r\n`;\r\n\r\nfunction isPagination<T>(data: any): data is PaginationType<T> {\r\n return 'current_page' in data;\r\n}\r\n\r\nexport interface TableRowSelection<RecordType = any> {\r\n selectedRowKeys?: Key[];\r\n onChange?: (selectedRowKeys: Key[], selectedRows: RecordType[]) => void;\r\n}\r\n\r\nexport interface TableProps<RecordType = any> extends Omit<RcTableProps<RecordType>, 'children' | 'columns'> {\r\n source: string | (() => Promise<any>);\r\n paginate?: boolean;\r\n columns: Columns<RecordType>;\r\n toolBarRender?: ((action: TableType) => ReactNode) | false;\r\n search?: boolean | string;\r\n rowSelection?: TableRowSelection<RecordType>;\r\n card?: boolean;\r\n}\r\n\r\ntype Params = {\r\n page?: number;\r\n sortField?: string;\r\n sortOrder?: number;\r\n q?: string;\r\n [key: string]: any;\r\n};\r\n\r\ntype CustomTableType<T = any> = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<TableProps<T>>>\r\n & RefAttributes<TableType>>\r\n\r\nconst Table: CustomTableType = forwardRef((\r\n {\r\n source,\r\n rowKey = 'id',\r\n paginate = true,\r\n toolBarRender,\r\n columns = [],\r\n search,\r\n rowSelection,\r\n card = true,\r\n ...props\r\n },\r\n ref\r\n) => {\r\n const [data, setData] = useState<any[]>([]);\r\n const [pagination, setPagination] = useState(paginate ? { total: 0, current: 1, pageSize: 10 } : null);\r\n const [loading, setLoading] = useState(true);\r\n const [keyword, setKeyword] = useState('');\r\n\r\n const fetchData = useCallback(async (options: Params = {}) => {\r\n setLoading(true);\r\n try {\r\n let result;\r\n if (typeof source === 'string') {\r\n const params: Params = {\r\n q: keyword\r\n };\r\n if (pagination) {\r\n params.page = options.page || pagination.current;\r\n }\r\n result = await request({\r\n url: source,\r\n params,\r\n });\r\n } else {\r\n result = await source();\r\n }\r\n\r\n if (paginate && isPagination<any>(result)) {\r\n setPagination({\r\n total: result.total,\r\n current: result.current_page,\r\n pageSize: result.per_page\r\n });\r\n result = result.data;\r\n }\r\n setData(result);\r\n } catch (e) {\r\n\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [source, setData, pagination, keyword]);\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [keyword]);\r\n\r\n const action = useRef<TableType>({\r\n reload: fetchData\r\n });\r\n\r\n useEffect(() => {\r\n action.current = {\r\n reload: fetchData\r\n };\r\n }, [fetchData]);\r\n\r\n useImperativeHandle(ref, () => action.current);\r\n\r\n //多选\r\n const [transformColumns] = useSelection(rowSelection, rowKey, data);\r\n\r\n const customColumns = useMemo(() => {\r\n return transformColumns(columns).map((column) => {\r\n const customColumn: BsColumnType<any> = { ...column, render: undefined };\r\n\r\n if ('render' in column && column.render) {\r\n const defaultRender = column.render;\r\n customColumn.render = (value, record, index) => {\r\n return defaultRender({ value, record, index, action: action.current });\r\n };\r\n }\r\n return customColumn;\r\n }) as ColumnsType<any>;\r\n }, [columns, transformColumns, action]);\r\n\r\n const handlePageChange = (current: number) => {\r\n fetchData({\r\n page: current\r\n });\r\n };\r\n\r\n const handleSearch = useDebounce((e: ChangeEvent<HTMLInputElement>) => {\r\n setKeyword(e.target.value);\r\n }, 500);\r\n\r\n const children = <>\r\n <Loader loading={loading} />\r\n {toolBarRender !== false && <Header>\r\n <LeftTools size={12}>\r\n {toolBarRender && toolBarRender(action.current)}\r\n </LeftTools>\r\n <RightTools size={12}>\r\n {search &&\r\n <Form.Control onChange={handleSearch} type={'search'} placeholder={'Search...'} />}\r\n <Action onClick={action.current.reload}><i className='bi bi-arrow-repeat' /></Action>\r\n </RightTools>\r\n </Header>}\r\n <RcTable {...props} rowKey={rowKey} columns={customColumns} components={components} data={data} />\r\n {pagination && <CustomPagination {...pagination} onChange={handlePageChange} />}\r\n </>;\r\n\r\n if (card) {\r\n return <Card>\r\n {children}\r\n </Card>;\r\n }\r\n return children;\r\n});\r\n\r\nexport default Table;\r\n\r\nconst Header = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n padding-bottom: 1rem;\r\n height: 48px;\r\n border-bottom: 2px solid #212529;\r\n`;\r\n\r\nconst RightTools = styled(Space)`\r\n\r\n`;\r\nconst LeftTools = styled(Space)`\r\n\r\n`;\r\n\r\nconst Action = styled.span`\r\n cursor: pointer;\r\n font-size: 20px;\r\n line-height: 1;\r\n\r\n &:hover {\r\n color: var(--bs-primary);\r\n }\r\n`;\r\n","import { debounce, DebouncedFunc } from 'lodash';\r\nimport { useEffect, useRef } from 'react';\r\n\r\nexport default function useDebounce<T extends (...args: any) => any>(callback: T, wait: number, options?: {}): DebouncedFunc<T> {\r\n const callbackRef = useRef<T>(callback);\r\n const debouncedCallbackRef = useRef<DebouncedFunc<T>>(\r\n debounce(callback, wait, options)\r\n );\r\n\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n useEffect(() => {\r\n debouncedCallbackRef.current = debounce((...args: any) => {\r\n callbackRef.current(...args);\r\n }, wait, options);\r\n }, [wait, options]);\r\n\r\n return debouncedCallbackRef.current;\r\n}\r\n","import {\r\n createElement,\r\n ElementType,\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useImperativeHandle,\r\n useState\r\n} from 'react';\r\nimport { Button, ButtonProps, Modal, ModalProps } from 'react-bootstrap';\r\nimport LoadingButton from './loading-button';\r\n\r\nexport interface ModalButtonProps extends ModalProps {\r\n text: ReactNode;\r\n variant?: ButtonProps['variant'];\r\n header?: string;\r\n onOk?: () => any;\r\n okText?: ReactNode;\r\n footer?: boolean;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport interface ModalType {\r\n close: () => void;\r\n}\r\n\r\ntype ModalButtonType = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<ModalButtonProps>>\r\n & RefAttributes<ModalType>>\r\n\r\nconst ModalButton: ModalButtonType = forwardRef(({\r\n text,\r\n variant,\r\n header = text,\r\n footer = true,\r\n onOk,\r\n size,\r\n okText = '确定',\r\n onShow,\r\n children,\r\n as = Button\r\n}, ref) => {\r\n\r\n const [show, setShow] = useState(false);\r\n const [loading, setLoading] = useState(false);\r\n const handleClose = () => setShow(false);\r\n const handleShow = () => setShow(true);\r\n\r\n useImperativeHandle(ref, () => ({\r\n close: handleClose\r\n }));\r\n\r\n const handleOk = async () => {\r\n if (onOk) {\r\n setLoading(true);\r\n const result = await onOk();\r\n setLoading(false);\r\n if (result === false) {\r\n return;\r\n }\r\n }\r\n handleClose();\r\n };\r\n\r\n const button = createElement(as, {\r\n variant,\r\n onClick: handleShow\r\n }, text);\r\n\r\n return <>\r\n {button}\r\n <Modal size={size} show={show} onHide={handleClose} onShow={onShow}>\r\n {header && <Modal.Header closeButton>\r\n <Modal.Title as='h5'>{header}</Modal.Title>\r\n </Modal.Header>}\r\n <Modal.Body>{children}</Modal.Body>\r\n {footer && <Modal.Footer>\r\n <Button variant='secondary' onClick={handleClose}>\r\n 取消\r\n </Button>\r\n <LoadingButton loading={loading} variant='primary' onClick={handleOk}>\r\n {okText}\r\n </LoadingButton>\r\n </Modal.Footer>}\r\n </Modal>\r\n </>;\r\n});\r\n\r\nexport default ModalButton;\r\n","import ModalButton, { ModalButtonProps } from './modal-button';\r\nimport { Fragment, useCallback, useRef } from 'react';\r\nimport Form, { FormProps, FormType } from './form';\r\n\r\nexport type ModalFormProps<T = any> =\r\n Pick<ModalButtonProps, 'text' | 'variant' | 'header' | 'size' | 'as'> &\r\n Pick<FormProps<T>, 'schema' | 'formData' | 'uiSchema' | 'action' | 'method' | 'onSuccess' | 'onChange' | 'fields' | 'formContext'>\r\n\r\nexport default function ModalForm<T = any>({\r\n text,\r\n header,\r\n schema,\r\n uiSchema,\r\n action,\r\n method,\r\n formData,\r\n variant,\r\n onSuccess,\r\n onChange,\r\n fields,\r\n size,\r\n as\r\n}: ModalFormProps<T>) {\r\n\r\n const form = useRef<FormType>(null);\r\n\r\n const handleOk = useCallback(async () => {\r\n try {\r\n await form.current?.submit();\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }, []);\r\n\r\n return <ModalButton as={as} text={text} onOk={handleOk} header={header} variant={variant} size={size}>\r\n <Form\r\n ref={form}\r\n schema={schema}\r\n uiSchema={uiSchema}\r\n action={action}\r\n method={method}\r\n formData={formData}\r\n fields={fields}\r\n onChange={onChange}\r\n onSuccess={onSuccess}\r\n >\r\n {/*TODO 支持回车提交并同步按钮loading状态*/}\r\n <Fragment />\r\n </Form>\r\n </ModalButton>;\r\n}\r\n","import { useAsyncCallback, UseAsyncCallbackOptions } from 'react-async-hook';\r\nimport request, { isRequestError, RequestConfig } from '../request';\r\nimport { DependencyList, useCallback, useEffect } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\r\nimport { values } from 'lodash';\r\n\r\ntype UseRequestOptions<T> = {\r\n manual?: boolean\r\n refreshDeps?: DependencyList;\r\n} & UseAsyncCallbackOptions<T>;\r\n\r\nexport default function useRequest<T = any>(config: RequestConfig, {\r\n manual,\r\n refreshDeps,\r\n ...options\r\n}: UseRequestOptions<T> = {}) {\r\n let { execute, currentParams, error, ...others } = useAsyncCallback(async (params?: AxiosRequestConfig) => {\r\n\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n return await request<T>({\r\n ...config,\r\n ...params\r\n });\r\n }, options);\r\n\r\n useEffect(() => {\r\n if (!manual && !refreshDeps) {\r\n execute();\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (refreshDeps) {\r\n refresh();\r\n }\r\n }, refreshDeps);\r\n\r\n const refresh = useCallback(() => {\r\n if (currentParams) {\r\n execute(...currentParams);\r\n } else {\r\n execute();\r\n }\r\n }, [execute, currentParams]);\r\n\r\n if (error && isRequestError(error)) {\r\n const errors = error.errors;\r\n error = new Error(typeof errors === 'string' ? errors : values(errors).join(''));\r\n }\r\n\r\n return {\r\n refresh,\r\n execute,\r\n error,\r\n ...others\r\n };\r\n}\r\n","import { useCallback, useState } from 'react';\r\n\r\ninterface Options {\r\n onHide?: () => void;\r\n onShow?: () => void;\r\n}\r\n\r\nlet id = 0;\r\n\r\nexport default function useOverlayState({ onHide, onShow }: Options = {}) {\r\n const [visible, setVisible] = useState(false);\r\n\r\n const [key, setKey] = useState(`visible-${id}`);\r\n\r\n const hide = useCallback(() => {\r\n setVisible(false);\r\n if (onHide) {\r\n onHide();\r\n }\r\n }, [setVisible, onHide]);\r\n\r\n const exit = useCallback(() => {\r\n setKey(`visible-${++id}`);\r\n }, [setKey, id]);\r\n\r\n const show = useCallback(() => {\r\n setVisible(true);\r\n if (onShow) {\r\n onShow();\r\n }\r\n }, [setVisible, onShow]);\r\n\r\n const state = {\r\n show: visible,\r\n onHide: hide,\r\n onExited: exit,\r\n key\r\n };\r\n\r\n return {\r\n visible,\r\n show,\r\n hide,\r\n state\r\n };\r\n}\r\n","import { OverlayTrigger, OverlayTriggerProps, Tooltip as BsTooltip } from 'react-bootstrap';\r\nimport { uniqueId } from 'lodash';\r\n\r\ninterface TooltipProps {\r\n tooltip: string;\r\n children: OverlayTriggerProps['children'];\r\n placement?: OverlayTriggerProps['placement'];\r\n}\r\n\r\nexport default function Tooltip({ tooltip, children, placement = 'bottom' }: TooltipProps) {\r\n\r\n return <OverlayTrigger\r\n placement={placement}\r\n overlay={\r\n <BsTooltip id={uniqueId()}>\r\n {tooltip}\r\n </BsTooltip>\r\n }\r\n >\r\n {children}\r\n </OverlayTrigger>;\r\n}\r\n"],"names":["_taggedTemplateLiteral","strings","raw","slice","Object","freeze","defineProperties","value","FooterWrapper","styled","footer","Footer","_jsx","className","formatRelativePath","routes","parent","menus","route","meta","_route$meta","hideInMenu","title","_route$meta2","path","replace","menu","icon","_route$meta3","children","_route$meta4","hideChildrenInMenu","length","push","renderMenuItems","items","map","item","_jsxs","SubMenu","MenuItem","Link","to","collapseNode","height","expandNode","node","scrollHeight","motion","motionName","motionAppear","onAppearStart","onAppearActive","onEnterStart","onEnterActive","onLeaveStart","onLeaveActive","SiderLayout","basename","useRoutes","useMemo","getMenuData","pathname","useLocation","selectedKeys","keys","split","reduce","pre","curr","join","openKeys","setOpenKeys","useState","useEffect","Container","Sidebar","Header","Menu","mode","onOpenChange","currentKey","filter","key","startsWith","Content","Main","div","nav","main","RcMenu","CustomSwal","withReactContent","Swal","defaultOptions","confirmButtonText","cancelButtonText","Message","confirm","async","isConfirmed","fire","showCancelButton","options","error","toast","position","timer","showConfirmButton","noticeInstance","notice","_ref","type","callback","Notification","newInstance","prefixCls","maxCount","style","top","right","instance","getNoticeInstance","duration","variant","closable","content","Alert","Toast","forEach","Icon","Title","Extra","IconMap","success","info","warning","Result","status","extra","Dimmer","props","active","inverted","Loader","loading","animation","wrap","Spinner","Wrap","Unauthorized","Error","constructor","url","obj","defineProperty","enumerable","configurable","writable","Login","onLogin","result","useAsync","redirectUri","sessionStorage","getItem","removeItem","Navigate","Logout","onLogout","rax","attach","axios","defaults","raxConfig","retryDelay","backoffType","shouldRetry","err","config","method","toUpperCase","response","maxContentLength","Infinity","maxBodyLength","baseURL","interceptors","request","use","token","headers","Authorization","Promise","reject","isRecord","data","location","window","href","undefined","e","isAxiosError","errors","isRequestError","paramsSerializer","params","queryString","stringify","sort","skipNull","skipEmptyString","AppContext","React","createContext","createApplication","authentication","userResolver","onUnauthorized","setItem","stripBasename","search","origin","stringifyUrl","query","redirect_uri","handleLogin","parsed","parse","hash","substr","access_token","handleLogout","Provider","BrowserRouter","Routes","Route","element","UserContext","UserProvider","state","setState","useContext","onError","onSuccess","user","useUser","context","Avatar","a","logo","classNames","src","Dropdown","navbar","Toggle","as","width","avatar","header","Card","BsCard","entries","_ref2","name","Access","require","fallback","passed","intersection","roles","Space","size","small","middle","large","Children","child","Item","_path","_extends","assign","target","i","arguments","source","prototype","hasOwnProperty","call","apply","this","SvgStepCheck","createElement","viewBox","xmlns","fill","d","Steps","CustomRcSteps","icons","finish","CheckIcon","Step","RcSteps","noop","isInteger","isFinite","Math","floor","Pagination","total","onChange","defaultCurrent","defaultPageSize","current","setCurrent","pageSize","setPageSize","allPages","handleChange","useCallback","p","prevPage","nextPage","pagerList","jumpPrev","jumpNext","firstPager","lastPager","BsPagination","onClick","Last","First","Prev","Next","left","max","min","pageBufferSize","unshift","NumberFormat","locale","currency","formatter","minimumFractionDigits","Intl","format","LoadingButton","Button","disabled","RequestButton","fetching","setFetching","handleClick","preventDefault","text","values","LinkButton","navigate","useNavigate","localize","widgets","upload","getRegistry","file","onUpload","Function","endpoint","FormData","set","Form","forwardRef","ref","action","formData","onSubmit","submitText","extraErrors","setExtraErrors","setLoading","setData","handleSubmit","nativeEvent","__errors","mapValues","toExtraErrors","transformErrors","keyword","dataPath","property","submit","JsonForm","noHtml5Validate","noValidate","Body","Checkbox","indeterminate","useRef","CustomTable","BsTable","components","table","CustomPagination","isPagination","Table","rowKey","paginate","toolBarRender","columns","rowSelection","card","pagination","setPagination","setKeyword","fetchData","q","page","current_page","per_page","reload","useImperativeHandle","transformColumns","setKeys","Set","selectedRowKeys","getRowKey","record","getRecordByKey","find","setSelectedKeys","changedKeys","Array","from","records","recordKeys","checkedCurrentAll","every","has","checkedCurrentSome","some","checked","delete","add","align","render","useSelection","customColumns","column","customColumn","defaultRender","index","handleSearch","wait","callbackRef","debouncedCallbackRef","debounce","useDebounce","LeftTools","RightTools","Control","placeholder","Action","RcTable","span","ModalButton","onOk","okText","onShow","show","setShow","handleClose","close","button","Modal","onHide","closeButton","ModalForm","schema","uiSchema","fields","form","handleOk","_form$current","Fragment","useRequest","manual","refreshDeps","execute","currentParams","others","useAsyncCallback","refresh","id","useOverlayState","visible","setVisible","setKey","hide","exit","onExited","Tooltip","tooltip","placement","OverlayTrigger","overlay","BsTooltip","uniqueId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../src/components/footer.tsx","../src/utils/get-menu-data.ts","../src/layout/sider.tsx","../src/utils/message.ts","../src/utils/toast.tsx","../src/components/result.tsx","../src/images/logo.svg","../src/components/dimmer.tsx","../src/components/loader.tsx","../src/errors/unauthorized.ts","../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../src/pages/login.tsx","../src/pages/logout.tsx","../src/request.ts","../src/utils/create-application.tsx","../src/components/user-provider.tsx","../src/components/header.tsx","../src/components/card.tsx","../src/components/error.tsx","../src/components/access.tsx","../src/components/space.tsx","../src/images/step_check.svg","../src/components/steps.tsx","../src/components/pagination.tsx","../src/components/number-format.tsx","../src/components/loading-button.tsx","../src/components/request-button.tsx","../src/components/link-button.tsx","../src/components/form.tsx","../src/components/content.tsx","../src/components/table/use-selection.tsx","../src/components/table/index.tsx","../src/hooks/use-debounce.ts","../src/components/modal-button.tsx","../src/components/modal-form.tsx","../src/hooks/use-request.ts","../src/hooks/use-overlay-state.ts","../src/components/tooltip.tsx"],"sourcesContent":["export default function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}","import styled from 'styled-components';\r\n\r\nconst FooterWrapper = styled.footer`\r\n\r\n`;\r\n\r\n\r\nexport default function Footer() {\r\n return <FooterWrapper>\r\n <div className='container'>\r\n\r\n </div>\r\n </FooterWrapper>;\r\n}\r\n","import type { RouteObject } from 'react-router';\r\n\r\nexport interface MenuData {\r\n path: string;\r\n title: string;\r\n icon?: string;\r\n children: MenuData[];\r\n}\r\n\r\nconst formatRelativePath = (\r\n routes: RouteObject[],\r\n parent: string = '/',\r\n): MenuData[] => {\r\n\r\n const menus: MenuData[] = [];\r\n\r\n for (const route of routes) {\r\n\r\n if (route.meta?.hideInMenu) {\r\n continue;\r\n }\r\n\r\n const title = route.meta?.title;\r\n if (!title) {\r\n continue;\r\n }\r\n\r\n let path = route.path || '';\r\n\r\n path = `${parent}/${path}`;\r\n\r\n path = path.replace(/\\/+/, '/').replace(/\\/$/, '');\r\n\r\n const icon = route.meta?.icon;\r\n\r\n const menu: MenuData = {\r\n title,\r\n icon,\r\n path,\r\n children: []\r\n };\r\n\r\n if (!route.meta?.hideChildrenInMenu) {\r\n if (route.children && route.children.length > 0) {\r\n menu.children = formatRelativePath(route.children, path);\r\n }\r\n }\r\n\r\n menus.push(menu);\r\n }\r\n\r\n return menus;\r\n};\r\n\r\nexport default function getMenuData(routes: RouteObject[], base: string = '/'): MenuData[] {\r\n return formatRelativePath(routes, base);\r\n}\r\n","import RcMenu, { MenuItem, SubMenu } from 'rc-menu';\r\nimport Footer from '../components/footer';\r\nimport { Link, useLocation, useRoutes } from 'react-router-dom';\r\nimport { useEffect, useMemo, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport type { RouteObject } from 'react-router';\r\nimport getMenuData, { MenuData } from '../utils/get-menu-data';\r\nimport type { CSSMotionProps } from 'rc-motion';\r\n\r\ninterface Props {\r\n title: string;\r\n routes: RouteObject[];\r\n basename: string;\r\n}\r\n\r\nconst renderMenuItems = (items: MenuData[]) => {\r\n return items.map((item) => {\r\n\r\n const title = <>\r\n {item.icon && <i className={`bi bi-${item.icon}`} />}\r\n {item.title}\r\n </>;\r\n\r\n if (item.children.length > 0) {\r\n return <SubMenu title={title} key={item.path}>\r\n {renderMenuItems(item.children)}\r\n </SubMenu>;\r\n } else {\r\n return <MenuItem key={item.path}>\r\n <Link to={item.path}>\r\n {title}\r\n </Link>\r\n </MenuItem>;\r\n }\r\n });\r\n};\r\n\r\nconst collapseNode = () => {\r\n return { height: 0 };\r\n};\r\nconst expandNode = (node: HTMLElement) => {\r\n return { height: node.scrollHeight };\r\n};\r\n\r\nconst motion: CSSMotionProps = {\r\n motionName: 'rc-menu-collapse',\r\n motionAppear: true,\r\n onAppearStart: collapseNode,\r\n onAppearActive: expandNode,\r\n onEnterStart: collapseNode,\r\n onEnterActive: expandNode,\r\n onLeaveStart: expandNode,\r\n onLeaveActive: collapseNode,\r\n};\r\n\r\n\r\nexport default function SiderLayout({ routes, basename, title }: Props) {\r\n\r\n const children = useRoutes(routes);\r\n\r\n const menu = useMemo(() => getMenuData(routes, basename), [routes, basename]);\r\n\r\n const { pathname } = useLocation();\r\n\r\n const selectedKeys = useMemo(() => {\r\n const keys: string[] = [];\r\n const parts = pathname.split('/');\r\n parts.reduce<string[]>((pre, curr) => {\r\n if (pre.length > 1) {\r\n keys.push(pre.join('/'));\r\n }\r\n return [...pre, curr];\r\n }, []);\r\n keys.push(pathname);\r\n return keys;\r\n }, [pathname]);\r\n\r\n const [openKeys, setOpenKeys] = useState<string[]>([]);\r\n\r\n useEffect(() => {\r\n setOpenKeys(selectedKeys.slice(0, -1));\r\n }, [selectedKeys]);\r\n\r\n const onOpenChange = (openKeys: string[]) => {\r\n const currentKey = openKeys[openKeys.length - 1];\r\n setOpenKeys(openKeys.filter(key => currentKey.startsWith(key)));\r\n };\r\n\r\n return <Container>\r\n <Sidebar>\r\n <Header>{title}</Header>\r\n <Menu\r\n mode='inline'\r\n motion={motion}\r\n openKeys={openKeys}\r\n onOpenChange={onOpenChange}\r\n selectedKeys={selectedKeys}\r\n >\r\n {renderMenuItems(menu)}\r\n </Menu>\r\n </Sidebar>\r\n <Content>\r\n <Main>{children}</Main>\r\n <Footer />\r\n </Content>\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex-wrap: nowrap;\r\n width: 100%;\r\n`;\r\n\r\nconst Sidebar = styled.nav`\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n z-index: 100;\r\n padding: 54px 0 0;\r\n border-right: 1px solid #e3e3e3;\r\n width: 230px;\r\n background-color: #f5f5f5;\r\n`;\r\n\r\nconst Header = styled.div`\r\n padding: 10px 0;\r\n height: 64px;\r\n line-height: 44px;\r\n text-indent: 24px;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n font-size: 16px;\r\n`;\r\n\r\nconst Content = styled.div`\r\n margin-left: 230px;\r\n flex: 1;\r\n`;\r\n\r\nconst Main = styled.main`\r\n min-height: calc(100vh - 54px);\r\n position: relative;\r\n`;\r\n\r\nconst Menu = styled(RcMenu)`\r\n border: none;\r\n box-shadow: none;\r\n padding: 0;\r\n\r\n .rc-menu-item {\r\n display: flex;\r\n\r\n &:hover {\r\n background-color: #f0f0f0;\r\n }\r\n\r\n a {\r\n flex: 1;\r\n text-decoration: none;\r\n color: dimgray;\r\n\r\n .bi {\r\n font-size: 16px;\r\n line-height: 18px;\r\n margin-right: 9px;\r\n min-width: 19px;\r\n text-align: center;\r\n vertical-align: text-bottom;\r\n }\r\n }\r\n }\r\n\r\n .rc-menu-sub {\r\n background-color: #eee;\r\n border-top: 1px solid #eee;\r\n border-bottom: 1px solid #eee;\r\n\r\n & > li {\r\n &:first-child {\r\n margin-top: 4px;\r\n }\r\n\r\n &:last-child {\r\n margin-bottom: 4px;\r\n }\r\n }\r\n\r\n .rc-menu-item-selected {\r\n background-color: #eee;\r\n color: var(--bs-primary);\r\n\r\n & > a {\r\n color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-menu-item-active {\r\n background-color: #eee;\r\n }\r\n\r\n .rc-menu-item {\r\n &:hover {\r\n background-color: #e7e7e7;\r\n }\r\n }\r\n }\r\n\r\n .rc-menu-submenu {\r\n & > .rc-menu-submenu-title {\r\n &:hover {\r\n background-color: #e7e7e7;\r\n }\r\n\r\n .bi {\r\n font-size: 16px;\r\n line-height: 18px;\r\n margin-right: 9px;\r\n min-width: 19px;\r\n text-align: center;\r\n vertical-align: text-bottom;\r\n }\r\n }\r\n }\r\n\r\n .rc-menu-submenu-active > .rc-menu-submenu-title {\r\n background-color: #eee;\r\n }\r\n\r\n .rc-menu-item,\r\n .rc-menu-submenu > .rc-menu-submenu-title {\r\n padding: 0 8px 0 24px;\r\n font-size: 14px;\r\n line-height: 36px;\r\n cursor: pointer;\r\n }\r\n\r\n .rc-menu-sub > .rc-menu-item,\r\n .rc-menu-sub > .rc-menu-submenu > .rc-menu-submenu-title {\r\n padding-top: 0;\r\n padding-bottom: 0;\r\n padding-right: 0;\r\n }\r\n\r\n .rc-menu-submenu-arrow {\r\n line-height: 38px;\r\n }\r\n\r\n .rc-menu-item-selected {\r\n background-color: #f5f5f5;\r\n color: var(--bs-primary);\r\n\r\n & > a {\r\n color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-menu-submenu-selected {\r\n background-color: #eee;\r\n\r\n & > .rc-menu-submenu-title {\r\n color: var(--bs-primary);\r\n font-weight: 500;\r\n }\r\n }\r\n\r\n & > .rc-menu-item {\r\n line-height: 38px;\r\n }\r\n\r\n & > .rc-menu-submenu {\r\n &.rc-menu-submenu-selected {\r\n background-color: #f5f5f5;\r\n }\r\n\r\n & > .rc-menu-submenu-title {\r\n line-height: 38px;\r\n\r\n &:hover {\r\n background-color: #f0f0f0;\r\n }\r\n }\r\n\r\n &.rc-menu-submenu-active > .rc-menu-submenu-title {\r\n background-color: #f5f5f5;\r\n }\r\n\r\n & > .rc-menu-sub {\r\n border-top: 1px solid #e6e6e6;\r\n border-bottom: 1px solid #e6e6e6;\r\n\r\n & > li {\r\n &:first-child {\r\n margin-top: 9px;\r\n }\r\n\r\n &:last-child {\r\n margin-bottom: 9px;\r\n }\r\n }\r\n }\r\n }\r\n\r\n`;\r\n","import Swal from 'sweetalert2/dist/sweetalert2.js';\r\nimport withReactContent from 'sweetalert2-react-content';\r\n\r\nconst CustomSwal = withReactContent(Swal);\r\n\r\ninterface MessageOptions {\r\n title?: string;\r\n text?: string;\r\n}\r\n\r\nconst defaultOptions = {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消'\r\n};\r\n\r\nconst Message = {\r\n confirm: async (options: MessageOptions) => {\r\n const { isConfirmed } = await CustomSwal.fire({\r\n ...defaultOptions,\r\n icon: 'warning',\r\n showCancelButton: true,\r\n ...options\r\n });\r\n\r\n return isConfirmed;\r\n },\r\n error: (options: MessageOptions) => {\r\n CustomSwal.fire({\r\n ...defaultOptions,\r\n toast: true,\r\n position: 'top',\r\n icon: 'error',\r\n timer: 3000,\r\n showConfirmButton: false,\r\n ...options\r\n });\r\n }\r\n};\r\n\r\nexport default Message;\r\n","import { Alert } from 'react-bootstrap';\r\nimport { NoticeContent, NotificationInstance } from 'rc-notification/lib/Notification';\r\nimport Notification from 'rc-notification';\r\n\r\nlet noticeInstance: NotificationInstance | null;\r\n\r\nfunction getNoticeInstance(callback: (instance: NotificationInstance) => void) {\r\n if (noticeInstance) {\r\n return callback(noticeInstance);\r\n }\r\n\r\n Notification.newInstance({\r\n prefixCls: 'notification',\r\n maxCount: 5,\r\n style: {\r\n top: 20,\r\n right: 20\r\n }\r\n }, (instance) => {\r\n if (noticeInstance) {\r\n callback(noticeInstance);\r\n return;\r\n }\r\n noticeInstance = instance;\r\n callback(instance);\r\n });\r\n}\r\n\r\nconst types = ['error', 'success', 'info'];\r\n\r\nconst notice = ({ type, ...options }: { type: string } & NoticeContent) => {\r\n getNoticeInstance((instance) => {\r\n options.duration = 3;\r\n let variant = type;\r\n switch (type) {\r\n case 'error':\r\n variant = 'danger';\r\n options.duration = options.closable ? 0 : 5;\r\n break;\r\n }\r\n\r\n options.content = <Alert variant={variant}>{options.content}</Alert>;\r\n\r\n instance.notice(options);\r\n });\r\n};\r\n\r\n\r\nlet Toast: {\r\n [index in typeof types[number]]: (content: string, options?: NoticeContent) => void\r\n} = {};\r\n\r\ntypes.forEach((type) => {\r\n Toast[type] = (content, options) => {\r\n notice({\r\n ...options,\r\n type,\r\n content\r\n });\r\n };\r\n});\r\n\r\nexport default Toast;\r\n","import { ReactNode } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst Container = styled.div`\r\n padding: 48px 32px;\r\n`;\r\n\r\nconst Icon = styled.div`\r\n margin-bottom: 24px;\r\n text-align: center;\r\n font-size: 72px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n color: rgba(0, 0, 0, .85);\r\n font-size: 24px;\r\n line-height: 1.8;\r\n text-align: center;\r\n`;\r\n\r\nconst Extra = styled.div`\r\n margin-top: 32px;\r\n text-align: center;\r\n`;\r\n\r\nconst IconMap = {\r\n success: <i className='bi bi-check-circle-fill text-success' />,\r\n error: <i className='bi bi-exclamation-circle-fill text-danger' />,\r\n info: <i className='bi bi-info-circle-fill text-info' />,\r\n warning: <i className='bi bi-exclamation-triangle-fill text-warning' />,\r\n};\r\n\r\ninterface ResultProps {\r\n status?: keyof typeof IconMap\r\n icon?: ReactNode\r\n title?: string\r\n extra?: ReactNode;\r\n}\r\n\r\nexport default function Result({ status, title, icon, extra }: ResultProps) {\r\n\r\n if (!icon && status) {\r\n icon = IconMap[status];\r\n }\r\n\r\n return <Container>\r\n {icon && <Icon>{icon}</Icon>}\r\n {title && <Title>{title}</Title>}\r\n {extra && <Extra>{extra}</Extra>}\r\n </Container>;\r\n}\r\n","var img = \"data:image/svg+xml,%3csvg width='485' height='132' xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='enable-background:new 0 0 531.69 198.43%3b' version='1.1'%3e %3cstyle type='text/css'%3e.st0%7bfill:%233C60FF%3b%7d%3c/style%3e %3cg%3e %3ctitle%3ebackground%3c/title%3e %3crect fill='none' id='canvas_background' height='134' width='487' y='-1' x='-1'/%3e %3c/g%3e %3cg%3e %3ctitle%3eLayer 1%3c/title%3e %3cpath id='svg_1' d='m132.29%2c62.34c-1.19%2c-18.77 -10.34%2c-35.36 -24.11%2c-46.46c-11.15%2c-8.99 -25.34%2c-14.38 -40.79%2c-14.38c-0.55%2c0 -1.09%2c0.01 -1.63%2c0.02c-3.32%2c0.08 -6.57%2c0.41 -9.75%2c0.98c-30.49%2c5.38 -53.65%2c32 -53.65%2c64.04c0%2c1.87 0.08%2c3.73 0.24%2c5.57c2.5%2c29.51 24.7%2c53.4 53.41%2c58.47c2.38%2c0.42 4.8%2c0.72 7.26%2c0.86c0.83%2c0.05 1.66%2c0.09 2.5%2c0.11c0.54%2c0.01 1.08%2c0.02 1.63%2c0.02c34.04%2c0 61.97%2c-26.16 64.79%2c-59.46c0.16%2c-1.83 0.24%2c-3.69 0.24%2c-5.57c0%2c-1.42 -0.05%2c-2.82 -0.14%2c-4.2zm-76.27%2c32.5c-0.26%2c0.01 -0.53%2c0.01 -0.79%2c0.01c-14.56%2c0 -26.88%2c-9.57 -31.03%2c-22.76c-0.97%2c-3.08 -1.49%2c-6.35 -1.49%2c-9.75c0%2c-17.95 14.56%2c-32.52 32.51%2c-32.52c0.26%2c0 0.53%2c0 0.79%2c0.01c3.41%2c0.08 6.69%2c0.68 9.75%2c1.74c6.5%2c2.22 12.06%2c6.45 15.97%2c11.94c1.98%2c2.78 3.54%2c5.9 4.57%2c9.25c0.94%2c3.03 1.44%2c6.24 1.44%2c9.58l-9.75%2c0c0%2c-2.18 -0.31%2c-4.29 -0.88%2c-6.28c-0.92%2c-3.23 -2.55%2c-6.17 -4.69%2c-8.64c-1.86%2c-2.14 -4.12%2c-3.93 -6.65%2c-5.25c-2.93%2c-1.54 -6.24%2c-2.46 -9.75%2c-2.58c-0.26%2c-0.01 -0.52%2c-0.01 -0.79%2c-0.01c-12.57%2c0 -22.76%2c10.19 -22.76%2c22.76c0%2c3.49 0.79%2c6.8 2.19%2c9.75c3.65%2c7.69 11.49%2c13.01 20.57%2c13.01c0.27%2c0 0.53%2c-0.01 0.79%2c-0.01l0%2c9.75zm55.7%2c-17.92c-3.35%2c10.5 -13.18%2c18.09 -24.78%2c18.09c-3.13%2c0 -6.13%2c-0.55 -8.91%2c-1.57c-2.18%2c-0.8 -4.24%2c-1.88 -6.11%2c-3.21c-2.38%2c-1.68 -4.47%2c-3.76 -6.16%2c-6.13c-0.28%2c-0.39 -0.55%2c-0.79 -0.81%2c-1.2c-2.03%2c-3.2 -3.38%2c-6.87 -3.85%2c-10.82l9.87%2c0c0.33%2c1.71 0.92%2c3.32 1.74%2c4.8c1.61%2c2.91 4.09%2c5.26 7.09%2c6.72c0.57%2c0.28 1.15%2c0.53 1.76%2c0.73c1.68%2c0.6 3.49%2c0.92 5.37%2c0.92c7.92%2c0 14.52%2c-5.67 15.96%2c-13.17c0.2%2c-1 0.3%2c-2.04 0.3%2c-3.09c0%2c-2.37 -0.51%2c-4.63 -1.43%2c-6.67c-1.66%2c-3.71 -4.68%2c-6.68 -8.43%2c-8.28l3.54%2c-9.1c7.43%2c3.08 13.13%2c9.49 15.21%2c17.38c0.44%2c1.64 0.72%2c3.34 0.81%2c5.09c0.04%2c0.52 0.05%2c1.05 0.05%2c1.58c0%2c1.05 -0.07%2c2.07 -0.18%2c3.09c-0.18%2c1.68 -0.54%2c3.3 -1.04%2c4.84z' class='st0'/%3e %3cg id='svg_2'%3e %3cg id='svg_3'%3e %3crect id='svg_4' height='6.34' width='94.12' class='st0' y='20.46' x='163.29'/%3e %3c/g%3e %3cg id='svg_5'%3e %3cpath id='svg_6' d='m169.31%2c113.72l0%2c-6.34c6.49%2c0 11.77%2c-5.28 11.77%2c-11.77l0%2c-71.98l6.34%2c0l0%2c71.98c0%2c9.98 -8.12%2c18.11 -18.11%2c18.11z' class='st0'/%3e %3c/g%3e %3cg id='svg_7'%3e %3cpath id='svg_8' d='m255.49%2c91.27l-6.34%2c0l0%2c-38.2c0%2c-5.06 -4.12%2c-9.18 -9.18%2c-9.18l-19.37%2c0c-5.06%2c0 -9.18%2c4.12 -9.18%2c9.18l0%2c38.2l-6.34%2c0l0%2c-38.2c0%2c-8.55 6.96%2c-15.51 15.51%2c-15.51l19.38%2c0c8.55%2c0 15.51%2c6.96 15.51%2c15.51l0%2c38.2l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_9'%3e %3crect id='svg_10' height='17.09' width='6.34' class='st0' y='23.63' x='227.12'/%3e %3c/g%3e %3cg id='svg_11'%3e %3cpath id='svg_12' d='m206.43%2c113.84l-3.34%2c0l0%2c-6.34l3.34%2c0c6.3%2c0 12.9%2c-3.56 15.35%2c-8.29c3.49%2c-6.71 5.33%2c-14.25 5.33%2c-21.81l0%2c-26.13l6.34%2c0l0%2c26.13c0%2c8.58 -2.09%2c17.13 -6.05%2c24.74c-3.98%2c7.68 -13.57%2c11.7 -20.97%2c11.7z' class='st0'/%3e %3c/g%3e %3cg id='svg_13'%3e %3cpath id='svg_14' d='m257.48%2c113.84l-3.34%2c0c-7.4%2c0 -16.98%2c-4.02 -20.98%2c-11.7c-3.96%2c-7.61 -6.05%2c-16.16 -6.05%2c-24.74l6.34%2c0c0%2c7.56 1.84%2c15.1 5.33%2c21.81c2.46%2c4.73 9.06%2c8.29 15.35%2c8.29l3.34%2c0l0%2c6.34l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_15'%3e %3crect id='svg_16' height='6.34' width='42.87' class='st0' y='27.89' x='274.07'/%3e %3c/g%3e %3cg id='svg_17'%3e %3crect id='svg_18' height='61.38' width='6.34' class='st0' y='14.89' x='293.05'/%3e %3c/g%3e %3cg id='svg_19'%3e %3crect id='svg_20' height='6.34' width='33.26' class='st0' transform='matrix(0.11%2c-0.9939%2c0.9939%2c0.11%2c194.7608%2c392.0006) ' y='46.985071' x='325.728637'/%3e %3c/g%3e %3cg id='svg_21'%3e %3crect id='svg_22' height='33.26' width='6.34' class='st0' transform='matrix(0.9939%2c-0.11%2c0.11%2c0.9939%2c-7.5075%2c38.3801) ' y='37.060893' x='310.495485'/%3e %3c/g%3e %3cg id='svg_23'%3e %3cpath id='svg_24' d='m352.9%2c77.14l-15.15%2c0c-7.52%2c0 -13.64%2c-6.12 -13.64%2c-13.63l0%2c-29.61c0%2c-7.52 6.12%2c-13.64 13.64%2c-13.64l15.15%2c0c7.52%2c0 13.64%2c6.12 13.64%2c13.64l0%2c29.61c0%2c7.52 -6.12%2c13.63 -13.64%2c13.63zm-15.15%2c-50.54c-4.02%2c0 -7.3%2c3.27 -7.3%2c7.3l0%2c29.61c0%2c4.02 3.27%2c7.3 7.3%2c7.3l15.15%2c0c4.02%2c0 7.3%2c-3.27 7.3%2c-7.3l0%2c-29.61c0%2c-4.02 -3.27%2c-7.3 -7.3%2c-7.3l-15.15%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_25'%3e %3cg id='svg_26'%3e %3crect id='svg_27' height='6.34' width='17.8' class='st0' y='37.2' x='336.43'/%3e %3c/g%3e %3cg id='svg_28'%3e %3crect id='svg_29' height='6.34' width='17.8' class='st0' y='53.87' x='336.43'/%3e %3c/g%3e %3c/g%3e %3cg id='svg_30'%3e %3cpath id='svg_31' d='m352.7%2c113.84l-37.98%2c0c-8%2c0 -14.5%2c-6.51 -14.5%2c-14.5l0%2c-16.14l6.34%2c0l0%2c16.13c0%2c4.5 3.66%2c8.17 8.17%2c8.17l37.98%2c0l0%2c6.34l-0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_32'%3e %3crect id='svg_33' height='6.34' width='23.57' class='st0' transform='matrix(0.2529%2c-0.9675%2c0.9675%2c0.2529%2c114.4986%2c402.9877) ' y='83.698593' x='326.836101'/%3e %3c/g%3e %3cg id='svg_34'%3e %3crect id='svg_35' height='6.34' width='20.52' class='st0' y='86.2' x='321.58'/%3e %3c/g%3e %3cg id='svg_36'%3e %3crect id='svg_37' height='24.75' width='6.34' class='st0' transform='matrix(0.9556%2c-0.2946%2c0.2946%2c0.9556%2c-19.7967%2c122.424) ' y='75.874073' x='369.686666'/%3e %3c/g%3e %3cg id='svg_38'%3e %3crect id='svg_39' height='6.34' width='71.83' class='st0' y='20.46' x='395.51'/%3e %3c/g%3e %3cg id='svg_40'%3e %3crect id='svg_41' height='6.34' width='90.81' class='st0' y='57.44' x='386.02'/%3e %3c/g%3e %3cg id='svg_42'%3e %3cpath id='svg_43' d='m463.12%2c113.64l-56%2c0c-4.5%2c0 -8.59%2c-2.29 -10.94%2c-6.14c-2.35%2c-3.84 -2.52%2c-8.53 -0.46%2c-12.53l17.68%2c-35.81l5.64%2c2.89l-17.68%2c35.81c-1.04%2c2.02 -0.95%2c4.39 0.23%2c6.33c1.19%2c1.94 3.25%2c3.1 5.53%2c3.1l56%2c0c1.51%2c0 2.88%2c-0.71 3.74%2c-1.95c0.81%2c-1.16 1.03%2c-2.57 0.63%2c-3.91l-7.8%2c-12.34l5.36%2c-3.39l8.18%2c12.94l0.12%2c0.31c1.24%2c3.34 0.76%2c7.08 -1.28%2c10.01c-2.04%2c2.94 -5.39%2c4.68 -8.95%2c4.68z' class='st0'/%3e %3c/g%3e %3c/g%3e %3c/g%3e%3c/svg%3e\";\n export default img;","import styled from 'styled-components';\r\n\r\nexport const Dimmable = styled.div`\r\n position: relative;\r\n`;\r\n\r\ninterface DimmerProps {\r\n active?: boolean\r\n inverted?: boolean\r\n}\r\n\r\nconst Dimmer = styled.div<DimmerProps>`\r\n display: ${props => props.active ? 'flex' : 'none'};\r\n position: absolute;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n vertical-align: middle;\r\n padding: 1em;\r\n background-color: ${props => props.inverted ? 'rgba(255, 255, 255, .85)' : 'rgba(0, 0, 0, .85)'};\r\n opacity: ${props => props.active ? 1 : 0};\r\n line-height: 1;\r\n animation-fill-mode: both;\r\n animation-duration: .5s;\r\n transition: background-color .5s linear;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n user-select: none;\r\n will-change: opacity;\r\n z-index: 990;\r\n`;\r\n\r\nexport default Dimmer;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Spinner, SpinnerProps } from 'react-bootstrap';\r\nimport Dimmer from './dimmer';\r\nimport styled from 'styled-components';\r\n\r\ninterface LoaderProps {\r\n loading?: boolean;\r\n animation?: SpinnerProps['animation'];\r\n wrap?: boolean;\r\n}\r\n\r\nexport default function Loader({\r\n loading = true,\r\n children,\r\n variant = 'success',\r\n animation = 'border',\r\n wrap,\r\n ...props\r\n}: PropsWithChildren<LoaderProps & Omit<SpinnerProps, 'animation'>>): JSX.Element | null {\r\n if (!loading) {\r\n return null;\r\n }\r\n\r\n if (children) {\r\n children = <p className='mt-3 text-secondary'>{children}</p>;\r\n }\r\n\r\n children = <Dimmer inverted active>\r\n <Spinner animation={animation} variant={variant} {...props} />\r\n {children}\r\n </Dimmer>;\r\n\r\n if (wrap) {\r\n return <Wrap height={typeof wrap === 'number' ? wrap : 150}>\r\n {children}\r\n </Wrap>;\r\n }\r\n\r\n return children as JSX.Element;\r\n}\r\n\r\nconst Wrap = styled.div<{ height: number }>`\r\n position: relative;\r\n height: ${props => `${props.height}px`};\r\n`;\r\n","export default class Unauthorized extends Error {\r\n\r\n url: string;\r\n\r\n constructor(url: string) {\r\n super('Unauthorized');\r\n this.url = url;\r\n }\r\n}\r\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import { useAsync } from 'react-async-hook';\r\nimport { Navigate } from 'react-router-dom';\r\nimport Loader from '../components/loader';\r\n\r\ninterface LoginProps {\r\n onLogin: () => void | Promise<void>;\r\n}\r\n\r\nexport default function Login({ onLogin }: LoginProps) {\r\n const { result } = useAsync(async () => {\r\n await onLogin();\r\n\r\n const redirectUri = sessionStorage.getItem('redirect_uri');\r\n if (redirectUri) {\r\n sessionStorage.removeItem('redirect_uri');\r\n }\r\n return redirectUri || '/';\r\n }, []);\r\n\r\n if (result) {\r\n return <Navigate to={result} replace />;\r\n }\r\n\r\n return <Loader />;\r\n}\r\n","import { useAsync } from 'react-async-hook';\r\nimport Loader from '../components/loader';\r\n\r\ninterface LogoutProps {\r\n onLogout: () => void | Promise<void>;\r\n}\r\n\r\nexport default function Logout({ onLogout }: LogoutProps) {\r\n useAsync(async () => {\r\n await onLogout();\r\n }, []);\r\n\r\n return <Loader />;\r\n}\r\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\r\nimport queryString from 'query-string';\r\nimport * as rax from 'retry-axios';\r\nimport { RetryConfig } from 'retry-axios';\r\nimport Unauthorized from './errors/unauthorized';\r\nimport Toast from './utils/toast';\r\n\r\nexport type Errors = string | {\r\n [key: string]: string\r\n}\r\n\r\ndeclare module 'axios' {\r\n interface AxiosError {\r\n errors: Errors;\r\n }\r\n\r\n interface AxiosRequestConfig {\r\n raxConfig?: RetryConfig;\r\n }\r\n}\r\n\r\nrax.attach();\r\naxios.defaults.raxConfig = {\r\n retryDelay: 2000,\r\n backoffType: 'static',\r\n shouldRetry: (err) => {\r\n return (\r\n err.config.method?.toUpperCase() === 'GET'\r\n && err.response?.status === 449\r\n );\r\n }\r\n};\r\naxios.defaults.maxContentLength = Infinity;\r\naxios.defaults.maxBodyLength = Infinity;\r\naxios.defaults.baseURL = '/api';\r\naxios.interceptors.request.use(\r\n config => {\r\n const token = sessionStorage.getItem('authorization');\r\n\r\n if (token) {\r\n config.headers = {\r\n ...config.headers,\r\n Authorization: `Bearer ${token}`\r\n };\r\n }\r\n return config;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nconst isRecord = (data: any): data is Record<string, string> => {\r\n return data && (typeof data === 'object');\r\n};\r\n\r\naxios.interceptors.response.use(\r\n response => {\r\n if (response.status === 201 && response.data.location) {\r\n window.location.href = response.data.location;\r\n response.data = undefined; //防止多次跳转\r\n }\r\n\r\n return response;\r\n },\r\n e => {\r\n if (axios.isAxiosError(e)) {\r\n if (e.response) {\r\n const { data, status } = e.response;\r\n if (status === 401) {\r\n e.errors = 'Unauthorized';\r\n if (isRecord(data) && data.url) {\r\n e = new Unauthorized(data.url);\r\n }\r\n Toast.error('Unauthorized');\r\n } else {\r\n if (isRecord(data)) {\r\n if (status === 422) {\r\n e.errors = data;\r\n } else if ('message' in data) {\r\n e.errors = data['message'];\r\n }\r\n } else {\r\n e.errors = data as string;\r\n }\r\n }\r\n }\r\n }\r\n return Promise.reject(e);\r\n }\r\n);\r\n\r\nexport type RequestConfig = AxiosRequestConfig | string\r\nexport type RequestInstance = AxiosInstance\r\nexport const isRequestError = axios.isAxiosError;\r\n\r\nconst request = async function <T = any>(config: RequestConfig) {\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n const { data } = await axios.request<T>({\r\n paramsSerializer: function(params) {\r\n return queryString.stringify(params, {\r\n sort: false,\r\n skipNull: true,\r\n skipEmptyString: true\r\n });\r\n },\r\n ...config\r\n });\r\n\r\n return data;\r\n};\r\n\r\nrequest.defaults = axios.defaults;\r\nrequest.interceptors = axios.interceptors;\r\n\r\nexport default request;\r\n","import Unauthorized from '../errors/unauthorized';\r\nimport { BrowserRouter, Route, Routes } from 'react-router-dom';\r\nimport React, { PropsWithChildren } from 'react';\r\nimport Login from '../pages/login';\r\nimport Logout from '../pages/logout';\r\nimport queryString from 'query-string';\r\nimport request from '../request';\r\nimport { User } from './types';\r\nimport * as path from 'path';\r\n\r\ntype UserResolver = () => User | Promise<User>\r\n\r\nexport const AppContext = React.createContext<{ userResolver?: UserResolver, onUnauthorized?: (error: Unauthorized) => void }>({});\r\n\r\nfunction stripBasename(pathname: string, basename: string) {\r\n if (basename === '/') return pathname;\r\n\r\n return pathname.slice(basename.length);\r\n}\r\n\r\ninterface Options {\r\n baseURL?: string;\r\n basename?: string;\r\n authentication?: 'cookie' | 'token';\r\n onLogout?: () => void | Promise<void>;\r\n onLogin?: () => (void | string) | Promise<void | string>;\r\n userResolver?: UserResolver;\r\n}\r\n\r\nexport default function createApplication(options: Options) {\r\n const { basename = '/', onLogin, onLogout, authentication, baseURL, userResolver } = options;\r\n\r\n if (baseURL) {\r\n request.defaults.baseURL = baseURL;\r\n }\r\n\r\n if (authentication === 'token') {\r\n request.interceptors.request.use(\r\n config => {\r\n const token = sessionStorage.getItem('authorization');\r\n\r\n if (token) {\r\n config.headers = {\r\n ...config.headers,\r\n Authorization: `Bearer ${token}`\r\n };\r\n }\r\n return config;\r\n }\r\n );\r\n }\r\n\r\n const onUnauthorized = (error: Unauthorized) => {\r\n if (window.location.pathname !== path.join(basename, '/logout')) {\r\n sessionStorage.setItem('redirect_uri', stripBasename(window.location.pathname + window.location.search, basename));\r\n }\r\n const redirectUri = window.location.origin + path.join(basename, '/login');\r\n\r\n window.location.href = queryString.stringifyUrl({\r\n url: error.url,\r\n query: { redirect_uri: redirectUri }\r\n });\r\n };\r\n\r\n const handleLogin = async () => {\r\n let token: string | void;\r\n if (onLogin) {\r\n token = await onLogin();\r\n } else {\r\n const parsed = queryString.parse(window.location.hash.substr(1));\r\n if (parsed.access_token) {\r\n token = parsed.access_token as string;\r\n }\r\n }\r\n\r\n if (authentication === 'token' && token) {\r\n sessionStorage.setItem('authorization', token);\r\n }\r\n };\r\n\r\n const handleLogout = async () => {\r\n if (onLogout) {\r\n try {\r\n await onLogout();\r\n } catch (e) {\r\n if (e instanceof Unauthorized) {\r\n onUnauthorized(e);\r\n }\r\n }\r\n }\r\n\r\n if (authentication === 'token') {\r\n sessionStorage.removeItem('authorization');\r\n }\r\n };\r\n\r\n return function({ children }: PropsWithChildren<any>) {\r\n return <AppContext.Provider value={{ userResolver, onUnauthorized }}>\r\n <BrowserRouter basename={basename}>\r\n <Routes>\r\n <Route path='*' element={children} />\r\n <Route path='login' element={<Login onLogin={handleLogin} />} />\r\n <Route path='logout' element={<Logout onLogout={handleLogout} />} />\r\n </Routes>\r\n </BrowserRouter>\r\n </AppContext.Provider>;\r\n };\r\n}\r\n","import React, { PropsWithChildren, useContext, useState } from 'react';\r\nimport Loader from './loader';\r\nimport { User } from '../utils/types';\r\nimport { AppContext } from '../utils/create-application';\r\nimport { useAsync } from 'react-async-hook';\r\nimport Unauthorized from '../errors/unauthorized';\r\n\r\nexport const UserContext = React.createContext<[User, ((user: User) => void)] | null>(null);\r\n\r\nconst UserProvider = function({ children }: PropsWithChildren<any>) {\r\n const [state, setState] = useState<User | null>(null);\r\n\r\n const { userResolver, onUnauthorized } = useContext(AppContext);\r\n\r\n useAsync(async () => {\r\n if (userResolver) {\r\n return userResolver();\r\n }\r\n }, [], {\r\n onError(e) {\r\n if (e instanceof Unauthorized && onUnauthorized) {\r\n onUnauthorized(e);\r\n }\r\n },\r\n onSuccess(user) {\r\n if (user) {\r\n setState(user);\r\n }\r\n }\r\n });\r\n\r\n if (!state) {\r\n return <Loader />;\r\n }\r\n\r\n return <UserContext.Provider value={[state, setState]}>\r\n {children}\r\n </UserContext.Provider>;\r\n};\r\n\r\nexport function useUser() {\r\n const context = useContext(UserContext);\r\n if (!context) {\r\n throw new Error('please use `useUser` in UserContext');\r\n }\r\n\r\n return context;\r\n}\r\n\r\nexport default UserProvider;\r\n","import logoSrc from '../images/logo.svg';\r\nimport { Dropdown } from 'react-bootstrap';\r\nimport styled from 'styled-components';\r\nimport { PropsWithChildren, ReactNode } from 'react';\r\nimport { useUser } from './user-provider';\r\nimport classNames from 'classnames';\r\n\r\nconst Avatar = styled.a`\r\n cursor: pointer;\r\n`;\r\n\r\ninterface Props {\r\n menus: ReactNode;\r\n className?: string;\r\n logo?: boolean;\r\n}\r\n\r\nexport default function Header({ children, menus, className, logo = true }: PropsWithChildren<Props>) {\r\n const [user] = useUser();\r\n\r\n return <Container\r\n className={classNames('navbar navbar-expand-lg navbar-light bg-white border-bottom sticky-top', className)}>\r\n <div className='container-fluid'>\r\n {logo && <a className='navbar-brand' href='https://www.topthink.com'>\r\n <img src={logoSrc} height='30' />\r\n </a>}\r\n {children}\r\n <Dropdown navbar>\r\n <Dropdown.Toggle as={Avatar} className='nav-link'>\r\n <img className='rounded-circle' width='25' height='25' src={user.avatar} />\r\n </Dropdown.Toggle>\r\n <Dropdown.Menu className={'shadow'}>\r\n {menus}\r\n </Dropdown.Menu>\r\n </Dropdown>\r\n </div>\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.header`\r\n height: 54px;\r\n`;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Card as BsCard, CardProps as BsCardProps } from 'react-bootstrap';\r\nimport classNames from 'classnames';\r\n\r\ninterface CardProps extends BsCardProps {\r\n title?: string;\r\n}\r\n\r\nexport default function Card({ children, title, className, ...props }: PropsWithChildren<CardProps>) {\r\n\r\n return <BsCard className={classNames('border-0 shadow-sm mb-3', className)} {...props}>\r\n <div className='card-body'>\r\n {title && <>\r\n <h5>{title}</h5>\r\n <hr />\r\n </>}\r\n {children}\r\n </div>\r\n </BsCard>;\r\n}\r\n","import { Alert } from 'react-bootstrap';\r\nimport { Errors } from '../request';\r\n\r\nexport default function Error({ errors }: { errors?: Errors }) {\r\n if (!errors) {\r\n return null;\r\n }\r\n return <Alert variant='danger'>\r\n <ul className='mb-0'>\r\n {typeof errors === 'string'\r\n ? <li>{errors}</li>\r\n : Object.entries(errors).map(([name, error]) => <li key={name}>{error}</li>)\r\n }\r\n </ul>\r\n </Alert>;\r\n}\r\n","import { ReactNode } from 'react';\r\nimport { intersection } from 'lodash';\r\nimport { useUser } from './user-provider';\r\nimport { User } from '../utils/types';\r\n\r\nexport interface AccessProps {\r\n require?: string | string[] | ((user: User) => boolean);\r\n fallback?: ReactNode;\r\n children: ReactNode;\r\n}\r\n\r\nexport default function Access({\r\n require,\r\n children,\r\n fallback\r\n}: AccessProps) {\r\n const [user,] = useUser();\r\n let passed = false;\r\n if (typeof require === 'function') {\r\n passed = require(user);\r\n } else {\r\n if (typeof require === 'string') {\r\n require = [require];\r\n }\r\n passed = intersection(user.roles, require).length > 0;\r\n }\r\n if (!passed) {\r\n children = fallback;\r\n }\r\n\r\n return <>{children}</>;\r\n}\r\n","import { Children, ReactNode } from 'react';\r\nimport styled from 'styled-components';\r\n\r\ninterface SpaceProps {\r\n children: ReactNode;\r\n size?: 'small' | 'middle' | 'large' | number;\r\n}\r\n\r\n\r\nexport default function Space({ children, size = 'small' }: SpaceProps) {\r\n\r\n if (typeof size === 'string') {\r\n size = {\r\n small: 8,\r\n middle: 16,\r\n large: 24\r\n }[size];\r\n }\r\n\r\n const items = Children.map(children, (child) => {\r\n if (child) {\r\n return <Item>{child}</Item>;\r\n }\r\n });\r\n\r\n return <Container size={size}>\r\n {items}\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div<{ size: number }>`\r\n display: inline-flex;\r\n align-items: center;\r\n gap: ${props => props.size}px;\r\n`;\r\n\r\nconst Item = styled.div`\r\n\r\n`;\r\n","var img = \"data:image/svg+xml,%3csvg t='1651217947509' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2548' width='16px' height='16px' fill='currentColor'%3e %3cpath d='M887.904 298.208c-12.864-12.064-33.152-11.488-45.216 1.408L415.936 753.984l-233.12-229.696C170.208 511.872 149.952 512 137.536 524.608c-12.416 12.576-12.256 32.864 0.352 45.248l256.48 252.672c0.096 0.096 0.224 0.128 0.32 0.224 0.096 0.096 0.128 0.224 0.224 0.32 2.016 1.92 4.448 3.008 6.784 4.288 1.152 0.672 2.144 1.664 3.36 2.144 3.776 1.472 7.776 2.24 11.744 2.24 4.192 0 8.384-0.832 12.288-2.496 1.312-0.544 2.336-1.664 3.552-2.368 2.4-1.408 4.896-2.592 6.944-4.672 0.096-0.096 0.128-0.256 0.224-0.352 0.064-0.096 0.192-0.128 0.288-0.224l449.184-478.208C901.44 330.592 900.768 310.336 887.904 298.208z' p-id='2549'%3e%3c/path%3e%3c/svg%3e\";\n export default img;","import RcSteps from 'rc-steps';\r\nimport 'rc-steps/assets/index.css';\r\nimport styled from 'styled-components';\r\nimport { ComponentProps } from 'react';\r\nimport { ReactComponent as CheckIcon } from '../images/step_check.svg';\r\n\r\nexport default function Steps(props: ComponentProps<typeof RcSteps>) {\r\n return <CustomRcSteps\r\n icons={{\r\n finish: <CheckIcon />,\r\n error: <></>\r\n }}\r\n {...props}\r\n />;\r\n}\r\n\r\nSteps.Step = RcSteps.Step;\r\n\r\nconst CustomRcSteps = styled(RcSteps)`\r\n .rc-steps-item-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n\r\n & > .rc-steps-icon {\r\n top: 0;\r\n }\r\n }\r\n\r\n .rc-steps-item-process {\r\n .rc-steps-item-icon {\r\n background: var(--bs-primary);\r\n border-color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-steps-item-finish {\r\n .rc-steps-item-icon {\r\n border-color: var(--bs-primary);\r\n\r\n & > .rc-steps-icon {\r\n color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-steps-item-title:after {\r\n background-color: var(--bs-primary);\r\n }\r\n }\r\n\r\n`;\r\n","import { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { Pagination as BsPagination } from 'react-bootstrap';\r\n\r\nfunction noop() {\r\n}\r\n\r\n\r\nfunction isInteger(value: any): value is number {\r\n return (\r\n typeof value === 'number' && isFinite(value) && Math.floor(value) === value\r\n );\r\n}\r\n\r\nexport interface PaginationProps {\r\n className?: string\r\n total: number\r\n current?: number\r\n defaultCurrent?: number\r\n pageSize?: number\r\n defaultPageSize?: number,\r\n onChange?: (current: number, pageSize: number) => void\r\n}\r\n\r\nexport default function Pagination({\r\n total = 0,\r\n onChange = noop,\r\n defaultCurrent = 1,\r\n defaultPageSize = 10,\r\n className,\r\n ...props\r\n}: PaginationProps) {\r\n\r\n const [current, setCurrent] = useState(defaultCurrent);\r\n const [pageSize, setPageSize] = useState(defaultPageSize);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.current)) {\r\n setCurrent(props.current);\r\n }\r\n }, [props.current]);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.pageSize)) {\r\n setPageSize(props.pageSize);\r\n }\r\n }, [props.pageSize]);\r\n\r\n const allPages = useMemo(() => {\r\n return Math.floor((total - 1) / pageSize) + 1;\r\n }, [total, pageSize]);\r\n\r\n const handleChange = useCallback((p: number) => {\r\n return () => {\r\n if (p !== current) {\r\n setCurrent(p);\r\n onChange(p, pageSize);\r\n }\r\n };\r\n }, [onChange, current, pageSize]);\r\n\r\n const pageBufferSize = 2;\r\n const prevPage = current - 1 > 0 ? current - 1 : 0;\r\n const nextPage = current + 1 < allPages ? current + 1 : allPages;\r\n\r\n const pagerList = [];\r\n let jumpPrev = null;\r\n let jumpNext = null;\r\n let firstPager = null;\r\n let lastPager = null;\r\n\r\n if (allPages <= 3 + pageBufferSize * 2) {\r\n for (let i = 1; i <= allPages; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n } else {\r\n lastPager = <BsPagination.Last key='last' onClick={handleChange(allPages)} />;\r\n firstPager = <BsPagination.First key='first' onClick={handleChange(1)} />;\r\n jumpPrev = <BsPagination.Prev key='prev' onClick={handleChange(prevPage)} />;\r\n jumpNext = <BsPagination.Next key='next' onClick={handleChange(nextPage)} />;\r\n\r\n let left = Math.max(1, current - pageBufferSize);\r\n let right = Math.min(current + pageBufferSize, allPages);\r\n\r\n if (current - 1 <= pageBufferSize) {\r\n right = 1 + pageBufferSize * 2;\r\n }\r\n\r\n if (allPages - current <= pageBufferSize) {\r\n left = allPages - pageBufferSize * 2;\r\n }\r\n\r\n for (let i = left; i <= right; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n\r\n if (current - 1 >= pageBufferSize * 2 && current !== 1 + 2) {\r\n pagerList.unshift(jumpPrev);\r\n }\r\n if (\r\n allPages - current >= pageBufferSize * 2 &&\r\n current !== allPages - 2\r\n ) {\r\n pagerList.push(jumpNext);\r\n }\r\n\r\n if (left !== 1) {\r\n pagerList.unshift(firstPager);\r\n }\r\n if (right !== allPages) {\r\n pagerList.push(lastPager);\r\n }\r\n }\r\n\r\n return <BsPagination className={className}>\r\n {pagerList}\r\n </BsPagination>;\r\n\r\n}\r\n","import { useMemo } from 'react';\r\n\r\ninterface Props {\r\n value: number;\r\n currency?: boolean;\r\n locale?: string;\r\n className?: string;\r\n}\r\n\r\nexport default function NumberFormat({ className, value, locale = 'zh-CN', currency = true }: Props) {\r\n\r\n const formatter = useMemo(() => {\r\n\r\n let options = {};\r\n\r\n if (currency) {\r\n options = {\r\n style: 'currency',\r\n currency: 'CNY',\r\n ...options\r\n };\r\n } else {\r\n options = {\r\n minimumFractionDigits: 2,\r\n };\r\n }\r\n\r\n return new Intl.NumberFormat(locale, options);\r\n }, [currency, locale]);\r\n\r\n if (className) {\r\n return <span className={className}>{formatter.format(value)}</span>;\r\n }\r\n\r\n return <>{formatter.format(value)}</>;\r\n}\r\n","import { Button, ButtonProps } from 'react-bootstrap';\r\n\r\ninterface CustomButtonProps extends ButtonProps {\r\n loading: boolean\r\n}\r\n\r\nexport default function LoadingButton({ loading, children, ...props }: CustomButtonProps) {\r\n\r\n return <Button {...props} disabled={loading}>\r\n {loading ? 'Loading…' : children}\r\n </Button>;\r\n}\r\n","import { Button, ButtonProps } from 'react-bootstrap';\r\nimport request, { RequestConfig } from '../request';\r\nimport { createElement, ElementType, MouseEvent, useCallback, useState } from 'react';\r\nimport Message from '../utils/message';\r\nimport axios, { AxiosRequestConfig } from 'axios';\r\n\r\ninterface Props extends Omit<ButtonProps, 'as'> {\r\n url: RequestConfig;\r\n method?: AxiosRequestConfig['method'];\r\n confirm?: string;\r\n onSuccess?: (result: any) => void;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport default function RequestButton({\r\n url,\r\n method,\r\n confirm,\r\n onSuccess,\r\n children,\r\n disabled,\r\n as = Button,\r\n ...props\r\n}: Props) {\r\n\r\n const [fetching, setFetching] = useState(false);\r\n\r\n const handleClick = useCallback(async (e: MouseEvent) => {\r\n e.preventDefault();\r\n try {\r\n setFetching(true);\r\n if (confirm) {\r\n if (!await Message.confirm({ text: confirm })) {\r\n return;\r\n }\r\n }\r\n\r\n const config = typeof url === 'string' ? { url, method } : { method, ...url };\r\n\r\n const result = await request(config);\r\n\r\n if (onSuccess) {\r\n onSuccess(result);\r\n }\r\n } catch (e) {\r\n if (axios.isAxiosError(e)) {\r\n let errors = e.errors;\r\n if (typeof e.errors !== 'string') {\r\n errors = Object.values(e.errors).join('<br />');\r\n }\r\n Message.error({ text: errors as string });\r\n } else {\r\n throw e;\r\n }\r\n } finally {\r\n setFetching(false);\r\n }\r\n }, [url, method, setFetching]);\r\n\r\n return createElement(as, {\r\n ...props,\r\n disabled: disabled || fetching,\r\n onClick: handleClick\r\n }, children);\r\n}\r\n","import { Button, ButtonProps } from 'react-bootstrap';\r\nimport { LinkProps, useNavigate } from 'react-router-dom';\r\n\r\ninterface Props extends ButtonProps, Pick<LinkProps, 'to' | 'replace'> {\r\n\r\n}\r\n\r\nexport default function LinkButton({ to, replace, ...props }: Props) {\r\n let navigate = useNavigate();\r\n\r\n return <Button {...props} onClick={(e) => {\r\n e.preventDefault();\r\n navigate(to, { replace });\r\n }} />;\r\n}\r\n","import JsonForm, { JsonFormProps, JsonFormType, getRegistry } from '@topthink/json-form';\r\nimport * as React from 'react';\r\nimport {\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useCallback,\r\n useState\r\n} from 'react';\r\nimport axios, { AxiosError, Method } from 'axios';\r\nimport LoadingButton from './loading-button';\r\nimport request from '../request';\r\nimport { mapValues } from 'lodash';\r\nimport { AjvError, ISubmitEvent, WidgetProps } from '@rjsf/core';\r\n\r\nconst localize = require('ajv-i18n/localize/zh');\r\n\r\nexport interface FormProps<T = any> extends JsonFormProps<T> {\r\n onSuccess?: (data: any) => void;\r\n method?: Method;\r\n children?: ReactNode | ((props: { submit: ReactNode, loading: boolean }) => ReactNode);\r\n submitText?: string;\r\n}\r\n\r\ntype Error = {\r\n __errors: string[]\r\n}\r\n\r\ntype Errors = Error | {\r\n [key: string]: Error\r\n}\r\n\r\nconst toExtraErrors = (error: AxiosError): Errors => {\r\n const errors = error.errors;\r\n if (typeof errors === 'string') {\r\n return {\r\n __errors: [errors]\r\n };\r\n }\r\n return mapValues(errors, (e) => {\r\n return {\r\n __errors: [e]\r\n };\r\n });\r\n};\r\n\r\nconst widgets = {\r\n upload: function(props: WidgetProps) {\r\n const { widgets } = getRegistry();\r\n\r\n const options = {\r\n ...props.options,\r\n async onUpload(file: File) {\r\n if (props.options.onUpload instanceof Function) {\r\n return await props.options.onUpload.call(file);\r\n }\r\n if (props.options.endpoint) {\r\n const data = new FormData();\r\n\r\n data.set('file', file);\r\n\r\n const { url } = await request({\r\n url: props.options.endpoint as string,\r\n method: 'post',\r\n data\r\n });\r\n\r\n return url;\r\n }\r\n }\r\n };\r\n\r\n return <widgets.upload {...props} options={options} />;\r\n }\r\n};\r\n\r\nexport interface FormType extends JsonFormType {\r\n\r\n}\r\n\r\ntype Form<T = any> = ForwardRefExoticComponent<PropsWithoutRef<FormProps<T>> & RefAttributes<FormType>>\r\n\r\nconst Form: Form = forwardRef(({\r\n action,\r\n method = 'post',\r\n onSuccess,\r\n formData,\r\n onSubmit,\r\n onChange,\r\n submitText = '提交',\r\n children,\r\n ...props\r\n}, ref) => {\r\n\r\n const [extraErrors, setExtraErrors] = useState<Errors>();\r\n const [loading, setLoading] = useState(false);\r\n const [data, setData] = useState(formData);\r\n\r\n const handleSubmit = useCallback(async (e: ISubmitEvent<any>, nativeEvent: React.FormEvent<HTMLFormElement>) => {\r\n try {\r\n setLoading(true);\r\n if (action) {\r\n const { formData } = e;\r\n //todo 包含File对象需转FormData\r\n try {\r\n const result = await request({\r\n url: action,\r\n method,\r\n data: formData\r\n });\r\n setExtraErrors(undefined);\r\n if (onSuccess) {\r\n await onSuccess(result);\r\n }\r\n return result;\r\n } catch (e) {\r\n if (axios.isAxiosError(e)) {\r\n setExtraErrors(toExtraErrors(e));\r\n }\r\n\r\n throw e;\r\n }\r\n } else if (onSubmit) {\r\n return await onSubmit(e, nativeEvent);\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [action, method, onSubmit]);\r\n\r\n const handleChange = useCallback((e: ISubmitEvent<any>) => {\r\n const { formData } = e;\r\n setData(formData);\r\n if (onChange) {\r\n onChange(e);\r\n }\r\n }, [setData, onChange]);\r\n\r\n const transformErrors = useCallback((errors: AjvError[]) => {\r\n errors = errors.map(error => ({\r\n keyword: error.name,\r\n dataPath: error.property,\r\n ...error\r\n }));\r\n\r\n localize(errors);\r\n\r\n return errors;\r\n }, []);\r\n\r\n const submit = <LoadingButton loading={loading} type='submit' variant='primary'>{submitText}</LoadingButton>;\r\n\r\n if (typeof children === 'function') {\r\n children = children({ submit, loading });\r\n }\r\n\r\n return <JsonForm\r\n ref={ref}\r\n extraErrors={extraErrors}\r\n onSubmit={handleSubmit}\r\n transformErrors={transformErrors}\r\n noHtml5Validate\r\n noValidate\r\n {...props}\r\n formData={data}\r\n onChange={handleChange}\r\n widgets={widgets}\r\n >\r\n {children || <div className='col-12'>\r\n {submit}\r\n </div>}\r\n </JsonForm>;\r\n});\r\n\r\nexport default Form;\r\n","import styled from 'styled-components';\r\nimport { PropsWithChildren, ReactNode } from 'react';\r\n\r\ninterface ContentProps {\r\n title: string;\r\n extra?: ReactNode;\r\n}\r\n\r\nexport default function Content({ title, children, extra }: PropsWithChildren<ContentProps>) {\r\n\r\n\r\n return <Container>\r\n <Header>\r\n <div className='container'>\r\n <Title>\r\n {title}\r\n </Title>\r\n <Extra>{extra}</Extra>\r\n </div>\r\n </Header>\r\n <Body className='container'>\r\n {children}\r\n </Body>\r\n </Container>;\r\n};\r\n\r\nconst Container = styled.div`\r\n width: 100%;\r\n`;\r\n\r\nconst Header = styled.div`\r\n background-color: #fff;\r\n display: flex;\r\n\r\n .container {\r\n padding: 0 24px;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n }\r\n`;\r\n\r\nconst Body = styled.div`\r\n margin-top: 24px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n font-size: 22px;\r\n line-height: 64px;\r\n height: 64px;\r\n`;\r\n\r\nconst Extra = styled.div`\r\n\r\n`;\r\n","import { Columns, TableProps, TableRowSelection } from './index';\r\nimport { InputHTMLAttributes, Key, useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nconst Checkbox = function({\r\n indeterminate = false,\r\n ...props\r\n}: InputHTMLAttributes<HTMLInputElement> & { indeterminate?: boolean }) {\r\n\r\n const ref = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n if (ref.current) {\r\n ref.current.indeterminate = indeterminate;\r\n }\r\n }, [indeterminate]);\r\n\r\n return <input\r\n ref={ref}\r\n {...props}\r\n className='form-check-input'\r\n type='checkbox'\r\n />;\r\n};\r\n\r\nexport default function useSelection<T = any>(\r\n rowSelection: TableRowSelection<T> | undefined,\r\n rowKey: Required<TableProps<T>>['rowKey'],\r\n data: T[]\r\n) {\r\n const [keys, setKeys] = useState(() => new Set(rowSelection?.selectedRowKeys || []));\r\n\r\n const getRowKey = (record: T) => {\r\n if (typeof rowKey === 'string') {\r\n // @ts-ignore\r\n return record[rowKey];\r\n } else {\r\n return rowKey(record);\r\n }\r\n };\r\n\r\n const getRecordByKey = (key: Key) => {\r\n return data.find((record) => {\r\n return getRowKey(record) === key;\r\n })!;\r\n };\r\n\r\n const setSelectedKeys = useCallback((keys: Set<Key>) => {\r\n setKeys(keys);\r\n const changedKeys = Array.from(keys);\r\n\r\n const records = changedKeys.map(function(key) {\r\n return getRecordByKey(key);\r\n });\r\n\r\n if (rowSelection?.onChange) {\r\n rowSelection?.onChange(changedKeys, records);\r\n }\r\n }, [getRecordByKey]);\r\n\r\n const transformColumns = useCallback((columns: Columns): Columns => {\r\n if (!rowSelection) {\r\n return columns;\r\n }\r\n\r\n const recordKeys = data.map(getRowKey);\r\n\r\n const checkedCurrentAll = recordKeys.every(function(key) {\r\n return keys.has(key);\r\n });\r\n const checkedCurrentSome = recordKeys.some(function(key) {\r\n return keys.has(key);\r\n });\r\n\r\n return [{\r\n key: 'selection',\r\n title: <Checkbox\r\n checked={checkedCurrentAll}\r\n indeterminate={!checkedCurrentAll && checkedCurrentSome}\r\n onChange={() => {\r\n if (checkedCurrentAll) {\r\n recordKeys.forEach(function(key) {\r\n keys.delete(key);\r\n });\r\n } else {\r\n recordKeys.forEach(function(key) {\r\n keys.add(key);\r\n });\r\n }\r\n setSelectedKeys(new Set(keys));\r\n }}\r\n />,\r\n width: 30,\r\n align: 'center',\r\n render({ record }) {\r\n const key = getRowKey(record);\r\n const checked = keys.has(key);\r\n return <Checkbox\r\n checked={checked}\r\n onChange={() => {\r\n if (checked) {\r\n keys.delete(key);\r\n } else {\r\n keys.add(key);\r\n }\r\n setSelectedKeys(new Set(keys));\r\n }}\r\n />;\r\n }\r\n }, ...columns];\r\n }, [data, rowSelection, keys]);\r\n\r\n return [transformColumns];\r\n}\r\n","import RcTable from 'rc-table';\r\nimport { TableProps as RcTableProps } from 'rc-table/lib/Table';\r\nimport { ColumnGroupType, ColumnsType, ColumnType as BsColumnType, RenderedCell } from 'rc-table/lib/interface';\r\nimport { Form, Table as BsTable, TableProps as BsTableProps } from 'react-bootstrap';\r\nimport {\r\n ChangeEvent,\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n Key,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useCallback,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState\r\n} from 'react';\r\nimport Pagination from '../pagination';\r\nimport styled from 'styled-components';\r\nimport request from '../../request';\r\nimport Card from '../card';\r\nimport Loader from '../loader';\r\nimport Space from '../space';\r\nimport useDebounce from '../../hooks/use-debounce';\r\nimport useSelection from './use-selection';\r\nimport { PaginationType } from '../../utils/types';\r\n\r\nexport interface TableType {\r\n reload: () => void;\r\n}\r\n\r\ninterface ColumnType<RecordType> extends Omit<BsColumnType<RecordType>, 'render'> {\r\n render?: (data: { value: any, record: RecordType, index: number, action: TableType }) => ReactNode | RenderedCell<RecordType>;\r\n}\r\n\r\nexport type Columns<RecordType = any> = (ColumnGroupType<RecordType> | ColumnType<RecordType>)[]\r\n\r\nconst CustomTable = styled(BsTable)`\r\n .rc-table-thead {\r\n border-top: none;\r\n }\r\n`;\r\n\r\nconst components: RcTableProps['components'] = {\r\n table: (props: BsTableProps) => {\r\n return <CustomTable {...props} className='align-middle table-hover' />;\r\n },\r\n};\r\n\r\n\r\nconst CustomPagination = styled(Pagination)`\r\n margin-bottom: 0;\r\n justify-content: flex-end;\r\n`;\r\n\r\nfunction isPagination<T>(data: any): data is PaginationType<T> {\r\n return 'current_page' in data;\r\n}\r\n\r\nexport interface TableRowSelection<RecordType = any> {\r\n selectedRowKeys?: Key[];\r\n onChange?: (selectedRowKeys: Key[], selectedRows: RecordType[]) => void;\r\n}\r\n\r\nexport interface TableProps<RecordType = any> extends Omit<RcTableProps<RecordType>, 'children' | 'columns'> {\r\n source: string | (() => Promise<any>);\r\n paginate?: boolean;\r\n columns: Columns<RecordType>;\r\n toolBarRender?: ((action: TableType) => ReactNode) | false;\r\n search?: boolean | string;\r\n rowSelection?: TableRowSelection<RecordType>;\r\n card?: boolean;\r\n}\r\n\r\ntype Params = {\r\n page?: number;\r\n sortField?: string;\r\n sortOrder?: number;\r\n q?: string;\r\n [key: string]: any;\r\n};\r\n\r\ntype CustomTableType<T = any> = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<TableProps<T>>>\r\n & RefAttributes<TableType>>\r\n\r\nconst Table: CustomTableType = forwardRef((\r\n {\r\n source,\r\n rowKey = 'id',\r\n paginate = true,\r\n toolBarRender,\r\n columns = [],\r\n search,\r\n rowSelection,\r\n card = true,\r\n ...props\r\n },\r\n ref\r\n) => {\r\n const [data, setData] = useState<any[]>([]);\r\n const [pagination, setPagination] = useState(paginate ? { total: 0, current: 1, pageSize: 10 } : null);\r\n const [loading, setLoading] = useState(true);\r\n const [keyword, setKeyword] = useState('');\r\n\r\n const fetchData = useCallback(async (options: Params = {}) => {\r\n setLoading(true);\r\n try {\r\n let result;\r\n if (typeof source === 'string') {\r\n const params: Params = {\r\n q: keyword\r\n };\r\n if (pagination) {\r\n params.page = options.page || pagination.current;\r\n }\r\n result = await request({\r\n url: source,\r\n params,\r\n });\r\n } else {\r\n result = await source();\r\n }\r\n\r\n if (paginate && isPagination<any>(result)) {\r\n setPagination({\r\n total: result.total,\r\n current: result.current_page,\r\n pageSize: result.per_page\r\n });\r\n result = result.data;\r\n }\r\n setData(result);\r\n } catch (e) {\r\n\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [source, setData, pagination, keyword]);\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [keyword]);\r\n\r\n const action = useRef<TableType>({\r\n reload: fetchData\r\n });\r\n\r\n useEffect(() => {\r\n action.current = {\r\n reload: fetchData\r\n };\r\n }, [fetchData]);\r\n\r\n useImperativeHandle(ref, () => action.current);\r\n\r\n //多选\r\n const [transformColumns] = useSelection(rowSelection, rowKey, data);\r\n\r\n const customColumns = useMemo(() => {\r\n return transformColumns(columns).map((column) => {\r\n const customColumn: BsColumnType<any> = { ...column, render: undefined };\r\n\r\n if ('render' in column && column.render) {\r\n const defaultRender = column.render;\r\n customColumn.render = (value, record, index) => {\r\n return defaultRender({ value, record, index, action: action.current });\r\n };\r\n }\r\n return customColumn;\r\n }) as ColumnsType<any>;\r\n }, [columns, transformColumns, action]);\r\n\r\n const handlePageChange = (current: number) => {\r\n fetchData({\r\n page: current\r\n });\r\n };\r\n\r\n const handleSearch = useDebounce((e: ChangeEvent<HTMLInputElement>) => {\r\n setKeyword(e.target.value);\r\n }, 500);\r\n\r\n const children = <>\r\n <Loader loading={loading} />\r\n {toolBarRender !== false && <Header>\r\n <LeftTools size={12}>\r\n {toolBarRender && toolBarRender(action.current)}\r\n </LeftTools>\r\n <RightTools size={12}>\r\n {search &&\r\n <Form.Control onChange={handleSearch} type={'search'} placeholder={'Search...'} />}\r\n <Action onClick={action.current.reload}><i className='bi bi-arrow-repeat' /></Action>\r\n </RightTools>\r\n </Header>}\r\n <RcTable {...props} rowKey={rowKey} columns={customColumns} components={components} data={data} />\r\n {pagination && <CustomPagination {...pagination} onChange={handlePageChange} />}\r\n </>;\r\n\r\n if (card) {\r\n return <Card>\r\n {children}\r\n </Card>;\r\n }\r\n return children;\r\n});\r\n\r\nexport default Table;\r\n\r\nconst Header = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n padding-bottom: 1rem;\r\n height: 48px;\r\n border-bottom: 2px solid #212529;\r\n`;\r\n\r\nconst RightTools = styled(Space)`\r\n\r\n`;\r\nconst LeftTools = styled(Space)`\r\n\r\n`;\r\n\r\nconst Action = styled.span`\r\n cursor: pointer;\r\n font-size: 20px;\r\n line-height: 1;\r\n\r\n &:hover {\r\n color: var(--bs-primary);\r\n }\r\n`;\r\n","import { debounce, DebouncedFunc } from 'lodash';\r\nimport { useEffect, useRef } from 'react';\r\n\r\nexport default function useDebounce<T extends (...args: any) => any>(callback: T, wait: number, options?: {}): DebouncedFunc<T> {\r\n const callbackRef = useRef<T>(callback);\r\n const debouncedCallbackRef = useRef<DebouncedFunc<T>>(\r\n debounce(callback, wait, options)\r\n );\r\n\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n useEffect(() => {\r\n debouncedCallbackRef.current = debounce((...args: any) => {\r\n callbackRef.current(...args);\r\n }, wait, options);\r\n }, [wait, options]);\r\n\r\n return debouncedCallbackRef.current;\r\n}\r\n","import {\r\n createElement,\r\n ElementType,\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useImperativeHandle,\r\n useState\r\n} from 'react';\r\nimport { Button, ButtonProps, Modal, ModalProps } from 'react-bootstrap';\r\nimport LoadingButton from './loading-button';\r\n\r\nexport interface ModalButtonProps extends ModalProps {\r\n text: ReactNode;\r\n variant?: ButtonProps['variant'];\r\n header?: string;\r\n onOk?: () => any;\r\n okText?: ReactNode;\r\n footer?: boolean;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport interface ModalType {\r\n close: () => void;\r\n}\r\n\r\ntype ModalButtonType = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<ModalButtonProps>>\r\n & RefAttributes<ModalType>>\r\n\r\nconst ModalButton: ModalButtonType = forwardRef(({\r\n text,\r\n variant,\r\n header = text,\r\n footer = true,\r\n onOk,\r\n size,\r\n okText = '确定',\r\n onShow,\r\n children,\r\n as = Button\r\n}, ref) => {\r\n\r\n const [show, setShow] = useState(false);\r\n const [loading, setLoading] = useState(false);\r\n const handleClose = () => setShow(false);\r\n const handleShow = () => setShow(true);\r\n\r\n useImperativeHandle(ref, () => ({\r\n close: handleClose\r\n }));\r\n\r\n const handleOk = async () => {\r\n if (onOk) {\r\n setLoading(true);\r\n const result = await onOk();\r\n setLoading(false);\r\n if (result === false) {\r\n return;\r\n }\r\n }\r\n handleClose();\r\n };\r\n\r\n const button = createElement(as, {\r\n variant,\r\n onClick: handleShow\r\n }, text);\r\n\r\n return <>\r\n {button}\r\n <Modal size={size} show={show} onHide={handleClose} onShow={onShow}>\r\n {header && <Modal.Header closeButton>\r\n <Modal.Title as='h5'>{header}</Modal.Title>\r\n </Modal.Header>}\r\n <Modal.Body>{children}</Modal.Body>\r\n {footer && <Modal.Footer>\r\n <Button variant='secondary' onClick={handleClose}>\r\n 取消\r\n </Button>\r\n <LoadingButton loading={loading} variant='primary' onClick={handleOk}>\r\n {okText}\r\n </LoadingButton>\r\n </Modal.Footer>}\r\n </Modal>\r\n </>;\r\n});\r\n\r\nexport default ModalButton;\r\n","import ModalButton, { ModalButtonProps } from './modal-button';\r\nimport { Fragment, useCallback, useRef } from 'react';\r\nimport Form, { FormProps, FormType } from './form';\r\n\r\nexport type ModalFormProps<T = any> =\r\n Pick<ModalButtonProps, 'text' | 'variant' | 'header' | 'size' | 'as'> &\r\n Pick<FormProps<T>, 'schema' | 'formData' | 'uiSchema' | 'action' | 'method' | 'onSuccess' | 'onChange' | 'fields' | 'formContext'>\r\n\r\nexport default function ModalForm<T = any>({\r\n text,\r\n header,\r\n schema,\r\n uiSchema,\r\n action,\r\n method,\r\n formData,\r\n variant,\r\n onSuccess,\r\n onChange,\r\n fields,\r\n size,\r\n as\r\n}: ModalFormProps<T>) {\r\n\r\n const form = useRef<FormType>(null);\r\n\r\n const handleOk = useCallback(async () => {\r\n try {\r\n await form.current?.submit();\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }, []);\r\n\r\n return <ModalButton as={as} text={text} onOk={handleOk} header={header} variant={variant} size={size}>\r\n <Form\r\n ref={form}\r\n schema={schema}\r\n uiSchema={uiSchema}\r\n action={action}\r\n method={method}\r\n formData={formData}\r\n fields={fields}\r\n onChange={onChange}\r\n onSuccess={onSuccess}\r\n >\r\n {/*TODO 支持回车提交并同步按钮loading状态*/}\r\n <Fragment />\r\n </Form>\r\n </ModalButton>;\r\n}\r\n","import { useAsyncCallback, UseAsyncCallbackOptions } from 'react-async-hook';\r\nimport request, { isRequestError, RequestConfig } from '../request';\r\nimport { DependencyList, useCallback, useEffect } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\r\nimport { values } from 'lodash';\r\n\r\ntype UseRequestOptions<T> = {\r\n manual?: boolean\r\n refreshDeps?: DependencyList;\r\n} & UseAsyncCallbackOptions<T>;\r\n\r\nexport default function useRequest<T = any>(config: RequestConfig, {\r\n manual,\r\n refreshDeps,\r\n ...options\r\n}: UseRequestOptions<T> = {}) {\r\n let { execute, currentParams, error, ...others } = useAsyncCallback(async (params?: AxiosRequestConfig) => {\r\n\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n return await request<T>({\r\n ...config,\r\n ...params\r\n });\r\n }, options);\r\n\r\n useEffect(() => {\r\n if (!manual && !refreshDeps) {\r\n execute();\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (refreshDeps) {\r\n refresh();\r\n }\r\n }, refreshDeps);\r\n\r\n const refresh = useCallback(() => {\r\n if (currentParams) {\r\n execute(...currentParams);\r\n } else {\r\n execute();\r\n }\r\n }, [execute, currentParams]);\r\n\r\n if (error && isRequestError(error)) {\r\n const errors = error.errors;\r\n error = new Error(typeof errors === 'string' ? errors : values(errors).join(''));\r\n }\r\n\r\n return {\r\n refresh,\r\n execute,\r\n error,\r\n ...others\r\n };\r\n}\r\n","import { useCallback, useState } from 'react';\r\n\r\ninterface Options {\r\n onHide?: () => void;\r\n onShow?: () => void;\r\n}\r\n\r\nlet id = 0;\r\n\r\nexport default function useOverlayState({ onHide, onShow }: Options = {}) {\r\n const [visible, setVisible] = useState(false);\r\n\r\n const [key, setKey] = useState(`visible-${id}`);\r\n\r\n const hide = useCallback(() => {\r\n setVisible(false);\r\n if (onHide) {\r\n onHide();\r\n }\r\n }, [setVisible, onHide]);\r\n\r\n const exit = useCallback(() => {\r\n setKey(`visible-${++id}`);\r\n }, [setKey, id]);\r\n\r\n const show = useCallback(() => {\r\n setVisible(true);\r\n if (onShow) {\r\n onShow();\r\n }\r\n }, [setVisible, onShow]);\r\n\r\n const state = {\r\n show: visible,\r\n onHide: hide,\r\n onExited: exit,\r\n key\r\n };\r\n\r\n return {\r\n visible,\r\n show,\r\n hide,\r\n state\r\n };\r\n}\r\n","import { OverlayTrigger, OverlayTriggerProps, Tooltip as BsTooltip } from 'react-bootstrap';\r\nimport { uniqueId } from 'lodash';\r\n\r\ninterface TooltipProps {\r\n tooltip: string;\r\n children: OverlayTriggerProps['children'];\r\n placement?: OverlayTriggerProps['placement'];\r\n}\r\n\r\nexport default function Tooltip({ tooltip, children, placement = 'bottom' }: TooltipProps) {\r\n\r\n return <OverlayTrigger\r\n placement={placement}\r\n overlay={\r\n <BsTooltip id={uniqueId()}>\r\n {tooltip}\r\n </BsTooltip>\r\n }\r\n >\r\n {children}\r\n </OverlayTrigger>;\r\n}\r\n"],"names":["_taggedTemplateLiteral","strings","raw","slice","Object","freeze","defineProperties","value","FooterWrapper","styled","footer","Footer","_jsx","className","formatRelativePath","routes","parent","menus","route","meta","_route$meta","hideInMenu","title","_route$meta2","path","replace","menu","icon","_route$meta3","children","_route$meta4","hideChildrenInMenu","length","push","renderMenuItems","items","map","item","_jsxs","SubMenu","MenuItem","Link","to","collapseNode","height","expandNode","node","scrollHeight","motion","motionName","motionAppear","onAppearStart","onAppearActive","onEnterStart","onEnterActive","onLeaveStart","onLeaveActive","SiderLayout","basename","useRoutes","useMemo","getMenuData","pathname","useLocation","selectedKeys","keys","split","reduce","pre","curr","join","openKeys","setOpenKeys","useState","useEffect","Container","Sidebar","Header","Menu","mode","onOpenChange","currentKey","filter","key","startsWith","Content","Main","div","nav","main","RcMenu","CustomSwal","withReactContent","Swal","defaultOptions","confirmButtonText","cancelButtonText","Message","confirm","async","isConfirmed","fire","showCancelButton","options","error","toast","position","timer","showConfirmButton","noticeInstance","notice","_ref","type","callback","Notification","newInstance","prefixCls","maxCount","style","top","right","instance","getNoticeInstance","duration","variant","closable","content","Alert","Toast","forEach","Icon","Title","Extra","IconMap","success","info","warning","Result","status","extra","Dimmer","props","active","inverted","Loader","loading","animation","wrap","Spinner","Wrap","Unauthorized","Error","constructor","url","obj","defineProperty","enumerable","configurable","writable","Login","onLogin","result","useAsync","redirectUri","sessionStorage","getItem","removeItem","Navigate","Logout","onLogout","rax","attach","axios","defaults","raxConfig","retryDelay","backoffType","shouldRetry","err","config","method","toUpperCase","response","maxContentLength","Infinity","maxBodyLength","baseURL","interceptors","request","use","token","headers","Authorization","Promise","reject","isRecord","data","location","window","href","undefined","e","isAxiosError","errors","isRequestError","paramsSerializer","params","queryString","stringify","sort","skipNull","skipEmptyString","AppContext","React","createContext","createApplication","authentication","userResolver","onUnauthorized","setItem","stripBasename","search","origin","stringifyUrl","query","redirect_uri","handleLogin","parsed","parse","hash","substr","access_token","handleLogout","Provider","BrowserRouter","Routes","Route","element","UserContext","UserProvider","state","setState","useContext","onError","onSuccess","user","useUser","context","Avatar","a","logo","classNames","src","Dropdown","navbar","Toggle","as","width","avatar","header","Card","BsCard","entries","_ref2","name","Access","require","fallback","passed","intersection","roles","Space","size","small","middle","large","Children","child","Item","_path","_extends","assign","target","i","arguments","source","prototype","hasOwnProperty","call","apply","this","SvgStepCheck","createElement","viewBox","xmlns","fill","d","Steps","CustomRcSteps","icons","finish","CheckIcon","Step","RcSteps","noop","isInteger","isFinite","Math","floor","Pagination","total","onChange","defaultCurrent","defaultPageSize","current","setCurrent","pageSize","setPageSize","allPages","handleChange","useCallback","p","prevPage","nextPage","pagerList","jumpPrev","jumpNext","firstPager","lastPager","BsPagination","onClick","Last","First","Prev","Next","left","max","min","pageBufferSize","unshift","NumberFormat","locale","currency","formatter","minimumFractionDigits","Intl","format","LoadingButton","Button","disabled","RequestButton","fetching","setFetching","handleClick","preventDefault","text","values","LinkButton","navigate","useNavigate","localize","widgets","upload","getRegistry","file","onUpload","Function","endpoint","FormData","set","Form","forwardRef","ref","action","formData","onSubmit","submitText","extraErrors","setExtraErrors","setLoading","setData","handleSubmit","nativeEvent","__errors","mapValues","toExtraErrors","transformErrors","keyword","dataPath","property","submit","JsonForm","noHtml5Validate","noValidate","Body","Checkbox","indeterminate","useRef","CustomTable","BsTable","components","table","CustomPagination","isPagination","Table","rowKey","paginate","toolBarRender","columns","rowSelection","card","pagination","setPagination","setKeyword","fetchData","q","page","current_page","per_page","reload","useImperativeHandle","transformColumns","setKeys","Set","selectedRowKeys","getRowKey","record","getRecordByKey","find","setSelectedKeys","changedKeys","Array","from","records","recordKeys","checkedCurrentAll","every","has","checkedCurrentSome","some","checked","delete","add","align","render","useSelection","customColumns","column","customColumn","defaultRender","index","handleSearch","wait","callbackRef","debouncedCallbackRef","debounce","useDebounce","LeftTools","RightTools","Control","placeholder","Action","RcTable","span","ModalButton","onOk","okText","onShow","show","setShow","handleClose","close","button","Modal","onHide","closeButton","ModalForm","schema","uiSchema","fields","form","handleOk","_form$current","Fragment","useRequest","manual","refreshDeps","execute","currentParams","others","useAsyncCallback","refresh","id","useOverlayState","visible","setVisible","setKey","hide","exit","onExited","Tooltip","tooltip","placement","OverlayTrigger","overlay","BsTooltip","uniqueId"],"mappings":"i6CAAe,SAASA,GAAuBC,EAASC,UACjDA,IACHA,EAAMD,EAAQE,MAAM,IAGfC,OAAOC,OAAOD,OAAOE,iBAAiBL,EAAS,CACpDC,IAAK,CACHK,MAAOH,OAAOC,OAAOH,cCL3B,MAAMM,GAAgBC,EAAOC,uCAKLC,YACbC,EAACJ,aACJI,SAAKC,UAAU,gBCAvB,MAAMC,GAAqB,SACvBC,OACAC,yDAAiB,UAGXC,EAAoB,OAErB,MAAMC,KAASH,EAAQ,0BAEpBG,EAAMC,mBAANC,EAAYC,0BAIVC,YAAQJ,EAAMC,yBAANI,EAAYD,UACrBA,eAIDE,EAAON,EAAMM,MAAQ,GAEzBA,YAAUR,cAAUQ,GAEpBA,EAAOA,EAAKC,QAAQ,MAAO,KAAKA,QAAQ,MAAO,UAIzCC,EAAiB,CACnBJ,MAAAA,EACAK,eAJST,EAAMC,yBAANS,EAAYD,KAKrBH,KAAAA,EACAK,SAAU,cAGTX,EAAMC,mBAANW,EAAYC,oBACTb,EAAMW,UAAYX,EAAMW,SAASG,OAAS,IAC1CN,EAAKG,SAAWf,GAAmBI,EAAMW,SAAUL,IAI3DP,EAAMgB,KAAKP,UAGRT,yBCpCX,MAAMiB,GAAmBC,GACdA,EAAMC,KAAKC,UAERf,EAAQgB,eACTD,EAAKV,MAAQf,OAAGC,0BAAoBwB,EAAKV,QACzCU,EAAKf,gBAGNe,EAAKR,SAASG,OAAS,EAChBpB,EAAC2B,GAAQjB,MAAOA,WAClBY,GAAgBG,EAAKR,WADSQ,EAAKb,MAIjCZ,EAAC4B,YACJ5B,EAAC6B,GAAKC,GAAIL,EAAKb,cACVF,KAFae,EAAKb,SASjCmB,GAAe,KACV,CAAEC,OAAQ,IAEfC,GAAcC,IACT,CAAEF,OAAQE,EAAKC,eAGpBC,GAAyB,CAC3BC,WAAY,mBACZC,cAAc,EACdC,cAAeR,GACfS,eAAgBP,GAChBQ,aAAcV,GACdW,cAAeT,GACfU,aAAcV,GACdW,cAAeb,aAIKc,UAAY1C,OAAEA,EAAF2C,SAAUA,EAAVpC,MAAoBA,WAE9CO,EAAW8B,EAAU5C,GAErBW,EAAOkC,GAAQ,aDNW7C,UACzBD,GAAmBC,yDAD4C,KCM3C8C,CAAY9C,EAAQ2C,IAAW,CAAC3C,EAAQ2C,KAE7DI,SAAEA,GAAaC,IAEfC,EAAeJ,GAAQ,WACnBK,EAAiB,UACTH,EAASI,MAAM,KACvBC,QAAiB,CAACC,EAAKC,KACrBD,EAAIpC,OAAS,GACbiC,EAAKhC,KAAKmC,EAAIE,KAAK,MAEhB,IAAIF,EAAKC,KACjB,IACHJ,EAAKhC,KAAK6B,GACHG,IACR,CAACH,KAEGS,EAAUC,GAAeC,EAAmB,IAEnDC,GAAU,KACNF,EAAYR,EAAa7D,MAAM,GAAI,MACpC,CAAC6D,WAOG1B,EAACqC,cACJrC,EAACsC,cACGhE,EAACiE,aAAQvD,IACTV,EAACkE,IACGC,KAAK,SACL/B,OAAQA,GACRuB,SAAUA,EACVS,aAZUT,UACZU,EAAaV,EAASA,EAASvC,OAAS,GAC9CwC,EAAYD,EAASW,QAAOC,GAAOF,EAAWG,WAAWD,OAWjDnB,aAAcA,WAEb9B,GAAgBR,QAGzBY,EAAC+C,cACGzE,EAAC0E,aAAMzD,IACPjB,EAACD,aAKb,MAAMgE,GAAYlE,EAAO8E,iFAMnBX,GAAUnE,EAAO+E,4MAYjBX,GAASpE,EAAO8E,uMAWhBF,GAAU5E,EAAO8E,4DAKjBD,GAAO7E,EAAOgF,oFAKdX,GAAOrE,EAAOiF,EAAPjF,8yFChJPkF,GAAaC,EAAiBC,GAO9BC,GAAiB,CACnBC,kBAAmB,KACnBC,iBAAkB,MAGhBC,GAAU,CACZC,QAASC,MAAAA,UACCC,YAAEA,SAAsBT,GAAWU,KAAK,IACvCP,GACHnE,KAAM,UACN2E,kBAAkB,KACfC,WAGAH,GAEXI,MAAQD,IACJZ,GAAWU,KAAK,IACTP,GACHW,OAAO,EACPC,SAAU,MACV/E,KAAM,QACNgF,MAAO,IACPC,mBAAmB,KAChBL,MC9Bf,IAAIM,GAwBJ,MAEMC,GAASC,QAACC,KAAEA,KAAST,MAxB3B,SAA2BU,MACnBJ,UACOI,EAASJ,IAGpBK,EAAaC,YAAY,CACrBC,UAAW,eACXC,SAAU,EACVC,MAAO,CACHC,IAAK,GACLC,MAAO,MAEXC,IACIZ,GACAI,EAASJ,KAGbA,GAAiBY,EACjBR,EAASQ,OAObC,EAAmBD,IACflB,EAAQoB,SAAW,MACfC,EAAUZ,KAEL,UADDA,EAEAY,EAAU,SACVrB,EAAQoB,SAAWpB,EAAQsB,SAAW,EAAI,EAIlDtB,EAAQuB,QAAUlH,EAACmH,GAAMH,QAASA,WAAUrB,EAAQuB,UAEpDL,EAASX,OAAOP,WAKpByB,GAEA,mBAtBU,CAAC,QAAS,UAAW,QAwB7BC,SAASjB,IACXgB,GAAMhB,GAAQ,CAACc,EAASvB,KACpBO,GAAO,IACAP,EACHS,KAAAA,EACAc,QAAAA,QCtDZ,MAAMnD,GAAYlE,EAAO8E,gDAInB2C,GAAOzH,EAAO8E,4FAMd4C,GAAQ1H,EAAO8E,uHAOf6C,GAAQ3H,EAAO8E,qEAKf8C,GAAU,CACZC,QAAS1H,OAAGC,UAAU,yCACtB2F,MAAO5F,OAAGC,UAAU,8CACpB0H,KAAM3H,OAAGC,UAAU,qCACnB2H,QAAS5H,OAAGC,UAAU,2DAUF4H,UAAOC,OAAEA,EAAFpH,MAAUA,EAAVK,KAAiBA,EAAjBgH,MAAuBA,YAE7ChH,GAAQ+G,IACT/G,EAAO0G,GAAQK,IAGZpG,EAACqC,cACHhD,GAAQf,EAACsH,aAAMvG,IACfL,GAASV,EAACuH,aAAO7G,IACjBqH,GAAS/H,EAACwH,aAAOO,OCyG1B,UCvJwBlI,EAAO8E,gDAS/B,MAAMqD,GAASnI,EAAO8E,qgBACTsD,GAASA,EAAMC,OAAS,OAAS,SASxBD,GAASA,EAAME,SAAW,2BAA6B,uBAChEF,GAASA,EAAMC,OAAS,EAAI,oBCXjBE,UAAOC,QAC3BA,GAAU,EADiBpH,SAE3BA,EAF2B+F,QAG3BA,EAAU,UAHiBsB,UAI3BA,EAAY,SAJeC,KAK3BA,KACGN,YAEEI,GAIDpH,IACAA,EAAWjB,OAAGC,UAAU,+BAAuBgB,KAGnDA,EAAWS,EAACsG,IAAOG,YAASD,oBACxBlI,EAACwI,GAAQF,UAAWA,EAAWtB,QAASA,KAAaiB,IACpDhH,KAGDsH,EACOvI,EAACyI,IAAKzG,OAAwB,iBAATuG,EAAoBA,EAAO,aAClDtH,IAIFA,GAlBI,KAqBf,MAAMwH,GAAO5I,EAAO8E,gEAERsD,aAAYA,EAAMjG,qBC3CT0G,WAAqBC,MAItCC,YAAYC,GCJD,IAAyBC,EAAKvE,EAAK5E,QDKpC,gBCLoCA,UAAL4E,WAALuE,QAEpCtJ,OAAOuJ,eAAeD,EAAKvE,EAAK,CAC9B5E,MAAOA,EACPqJ,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZJ,EAAIvE,GAAO5E,ODHFkJ,IAAMA,YEEKM,UAAMC,QAAEA,WACtBC,OAAEA,GAAWC,GAAS/D,gBAClB6D,UAEAG,EAAcC,eAAeC,QAAQ,uBACvCF,GACAC,eAAeE,WAAW,gBAEvBH,GAAe,MACvB,WAECF,EACOrJ,EAAC2J,GAAS7H,GAAIuH,EAAQxI,aAG1Bb,EAACoI,gBChBYwB,UAAOC,SAAEA,YAC7BP,GAAS/D,gBACCsE,MACP,IAEI7J,EAACoI,OCSZ0B,EAAIC,SACJC,EAAMC,SAASC,UAAY,CACvBC,WAAY,IACZC,YAAa,SACbC,YAAcC,kBAE+B,mBAArCA,EAAIC,OAAOC,6BAAQC,gBACS,iBAAzBH,EAAII,+BAAU5C,UAI7BkC,EAAMC,SAASU,iBAAmBC,EAAAA,EAClCZ,EAAMC,SAASY,cAAgBD,EAAAA,EAC/BZ,EAAMC,SAASa,QAAU,OACzBd,EAAMe,aAAaC,QAAQC,KACvBV,UACUW,EAAQ1B,eAAeC,QAAQ,wBAEjCyB,IACAX,EAAOY,QAAU,IACVZ,EAAOY,QACVC,+BAAyBF,KAG1BX,KAEX3E,GACWyF,QAAQC,OAAO1F,KAI9B,MAAM2F,GAAYC,GACPA,GAAyB,iBAATA,EAG3BxB,EAAMe,aAAaL,SAASO,KACxBP,IAC4B,MAApBA,EAAS5C,QAAkB4C,EAASc,KAAKC,WACzCC,OAAOD,SAASE,KAAOjB,EAASc,KAAKC,SACrCf,EAASc,UAAOI,GAGblB,KAEXmB,OACQ7B,EAAM8B,aAAaD,IACfA,EAAEnB,SAAU,OACNc,KAAEA,EAAF1D,OAAQA,GAAW+D,EAAEnB,SACZ,MAAX5C,GACA+D,EAAEE,OAAS,eACPR,GAASC,IAASA,EAAK3C,MACvBgD,EAAI,IAAInD,GAAa8C,EAAK3C,MAE9BzB,GAAMxB,MAAM,iBAER2F,GAASC,GACM,MAAX1D,EACA+D,EAAEE,OAASP,EACJ,YAAaA,IACpBK,EAAEE,OAASP,EAAI,SAGnBK,EAAEE,OAASP,SAKpBH,QAAQC,OAAOO,YAMjBG,GAAiBhC,EAAM8B,aAE9Bd,GAAUzF,eAAyBgF,GACrCA,EAA2B,iBAAXA,EAAsB,CAAE1B,IAAK0B,GAAWA,QAElDiB,KAAEA,SAAexB,EAAMgB,QAAW,CACpCiB,iBAAkB,SAASC,UAChBC,EAAYC,UAAUF,EAAQ,CACjCG,MAAM,EACNC,UAAU,EACVC,iBAAiB,QAGtBhC,WAGAiB,GAGXR,GAAQf,SAAWD,EAAMC,SACzBe,GAAQD,aAAef,EAAMe,aCtGtB,MAAMyB,GAAaC,EAAMC,cAA+F,aAiBvGC,GAAkBhH,SAChC7C,SAAEA,EAAW,IAAbsG,QAAkBA,EAAlBS,SAA2BA,EAA3B+C,eAAqCA,EAArC9B,QAAqDA,EAArD+B,aAA8DA,GAAiBlH,EAEjFmF,IACAE,GAAQf,SAASa,QAAUA,GAGR,UAAnB8B,GACA5B,GAAQD,aAAaC,QAAQC,KACzBV,UACUW,EAAQ1B,eAAeC,QAAQ,wBAEjCyB,IACAX,EAAOY,QAAU,IACVZ,EAAOY,QACVC,+BAAyBF,KAG1BX,WAKbuC,EAAkBlH,IAChB8F,OAAOD,SAASvI,WAAatC,EAAK8C,KAAKZ,EAAU,YACjD0G,eAAeuD,QAAQ,eAxCnC,SAAuB7J,EAAkBJ,SACpB,MAAbA,EAAyBI,EAEtBA,EAAS3D,MAAMuD,EAAS1B,QAqCgB4L,CAActB,OAAOD,SAASvI,SAAWwI,OAAOD,SAASwB,OAAQnK,UAEtGyG,EAAcmC,OAAOD,SAASyB,OAAStM,EAAK8C,KAAKZ,EAAU,UAEjE4I,OAAOD,SAASE,KAAOQ,EAAYgB,aAAa,CAC5CtE,IAAKjD,EAAMiD,IACXuE,MAAO,CAAEC,aAAc9D,MAIzB+D,EAAc/H,cACZ2F,KACA9B,EACA8B,QAAc9B,QACX,OACGmE,EAASpB,EAAYqB,MAAM9B,OAAOD,SAASgC,KAAKC,OAAO,IACzDH,EAAOI,eACPzC,EAAQqC,EAAOI,cAIA,UAAnBf,GAA8B1B,GAC9B1B,eAAeuD,QAAQ,gBAAiB7B,IAI1C0C,EAAerI,aACbsE,YAEUA,IACR,MAAOgC,GACDA,aAAanD,IACboE,EAAejB,GAKJ,UAAnBe,GACApD,eAAeE,WAAW,yBAI3B,gBAASzI,SAAEA,YACPjB,EAACwM,GAAWqB,UAASlO,MAAO,CAAEkN,aAAAA,EAAcC,eAAAA,YAC/C9M,EAAC8N,GAAchL,SAAUA,WACrBpB,EAACqM,aACG/N,EAACgO,GAAMpN,KAAK,IAAIqN,QAAShN,IACzBjB,EAACgO,GAAMpN,KAAK,QAAQqN,QAASjO,EAACmJ,IAAMC,QAASkE,MAC7CtN,EAACgO,GAAMpN,KAAK,SAASqN,QAASjO,EAAC4J,IAAOC,SAAU+D,cC/F7D,MAAMM,GAAczB,EAAMC,cAAqD,MAEhFyB,GAAe,gBAASlN,SAAEA,WACrBmN,EAAOC,GAAYxK,EAAsB,OAE1CgJ,aAAEA,EAAFC,eAAgBA,GAAmBwB,EAAW9B,WAEpDlD,GAAS/D,aACDsH,SACOA,MAEZ,GAAI,CACH0B,QAAQ1C,GACAA,aAAanD,IAAgBoE,GAC7BA,EAAejB,IAGvB2C,UAAUC,GACFA,GACAJ,EAASI,MAKhBL,EAIEpO,EAACkO,GAAYL,UAASlO,MAAO,CAACyO,EAAOC,YACvCpN,IAJMjB,EAACoI,iBAQAsG,WACNC,EAAUL,EAAWJ,QACtBS,QACK,IAAIhG,MAAM,8CAGbgG,YCvCX,MAAMC,GAAS/O,EAAOgP,oDAUE5K,UAAOhD,SAAEA,EAAFZ,MAAYA,EAAZJ,UAAmBA,EAAnB6O,KAA8BA,GAAO,WACzDL,GAAQC,YAER1O,EAAC+D,IACJ9D,UAAW8O,EAAW,yEAA0E9O,YAChGyB,SAAKzB,UAAU,4BACV6O,GAAQ9O,OAAGC,UAAU,eAAe0L,KAAK,oCACtC3L,SAAKgP,IViIX,4/MUjIyBhN,OAAO,SAE7Bf,EACDS,EAACuN,GAASC,oBACNlP,EAACiP,EAASE,QAAOC,GAAIR,GAAQ3O,UAAU,oBACnCD,SAAKC,UAAU,iBAAiBoP,MAAM,KAAKrN,OAAO,KAAKgN,IAAKP,EAAKa,WAErEtP,EAACiP,EAAS/K,MAAKjE,UAAW,kBACrBI,YAOrB,MAAM0D,GAAYlE,EAAO0P,sDC/BDC,UAAKvO,SAAEA,EAAFP,MAAYA,EAAZT,UAAmBA,KAAcgI,YAEnDjI,EAACyP,GAAOxP,UAAW8O,EAAW,0BAA2B9O,MAAgBgI,WAC5EvG,SAAKzB,UAAU,sBACVS,GAASgB,eACN1B,iBAAKU,IACLV,cAEHiB,gBCbW0H,UAAMoD,OAAEA,YACvBA,EAGE/L,EAACmH,GAAMH,QAAQ,kBAClBhH,QAAIC,UAAU,gBACS,iBAAX8L,EACF/L,iBAAK+L,IACLvM,OAAOkQ,QAAQ3D,GAAQvK,KAAImO,QAAEC,EAAMhK,YAAW5F,iBAAgB4F,GAAPgK,UAN1D,cCMSC,UAAOC,QAC3BA,EAD2B7O,SAE3BA,EAF2B8O,SAG3BA,WAEOtB,GAASC,SACZsB,GAAS,QACU,mBAAZF,EACPE,EAASF,EAAQrB,IAEM,iBAAZqB,IACPA,EAAU,CAACA,IAEfE,EAASC,EAAaxB,EAAKyB,MAAOJ,GAAS1O,OAAS,GAEnD4O,IACD/O,EAAW8O,GAGR/P,cAAGiB,uBCrBUkP,UAAMlP,SAAEA,EAAFmP,KAAYA,EAAO,WAEzB,iBAATA,IACPA,EAAO,CACHC,MAAO,EACPC,OAAQ,GACRC,MAAO,IACTH,UAGA7O,EAAQiP,EAAShP,IAAIP,GAAWwP,OAC9BA,SACOzQ,EAAC0Q,aAAMD,cAIfzQ,EAAC+D,IAAUqM,KAAMA,WACnB7O,IAIT,MAAMwC,GAAYlE,EAAO8E,yFAGhBsD,GAASA,EAAMmI,OAGlBM,GAAO7Q,EAAO8E,2BCpCpB,IAAIgM,GAEJ,SAASC,KAA2Q,OAA9PA,GAAWpR,OAAOqR,QAAU,SAAUC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU5P,OAAQ2P,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAIxM,KAAO0M,EAAczR,OAAO0R,UAAUC,eAAeC,KAAKH,EAAQ1M,KAAQuM,EAAOvM,GAAO0M,EAAO1M,IAAY,OAAOuM,GAAkBF,GAASS,MAAMC,KAAMN,WAIhT,MAAMO,GAAetJ,GAAsBwE,EAAM+E,cAAc,MAAOZ,GAAS,CAC7E3Q,UAAW,uBACXwR,QAAS,gBACTC,MAAO,6BACPrC,MAAO,GACPrN,OAAQ,GACR2P,KAAM,gBACL1J,GAAQ0I,KAAUA,GAAqBlE,EAAM+E,cAAc,OAAQ,CACpEI,EAAG,+iBCRmBC,GAAM5J,UACnBjI,EAAC8R,IACJC,MAAO,CACHC,OAAQhS,EAACiS,OACTrM,MAAO5F,YAEPiI,IAIZ4J,GAAMK,KAAOC,GAAQD,KAErB,MAAMJ,GAAgBjS,EAAOsS,GAAPtS,2lBCftB,SAASuS,MAIT,SAASC,GAAU1S,SAEM,iBAAVA,GAAsB2S,SAAS3S,IAAU4S,KAAKC,MAAM7S,KAAWA,WActD8S,UAAWC,MAC/BA,EAAQ,EADuBC,SAE/BA,EAAWP,GAFoBQ,eAG/BA,EAAiB,EAHcC,gBAI/BA,EAAkB,GAJa5S,UAK/BA,KACGgI,WAGI6K,EAASC,GAAclP,EAAS+O,IAChCI,EAAUC,GAAepP,EAASgP,GAEzC/O,GAAU,KACFuO,GAAUpK,EAAM6K,UAChBC,EAAW9K,EAAM6K,WAEtB,CAAC7K,EAAM6K,UAEVhP,GAAU,KACFuO,GAAUpK,EAAM+K,WAChBC,EAAYhL,EAAM+K,YAEvB,CAAC/K,EAAM+K,iBAEJE,EAAWlQ,GAAQ,IACduP,KAAKC,OAAOE,EAAQ,GAAKM,GAAY,GAC7C,CAACN,EAAOM,IAELG,EAAeC,GAAaC,GACvB,KACCA,IAAMP,IACNC,EAAWM,GACXV,EAASU,EAAGL,MAGrB,CAACL,EAAUG,EAASE,IAGjBM,EAAWR,EAAU,EAAI,EAAIA,EAAU,EAAI,EAC3CS,EAAWT,EAAU,EAAII,EAAWJ,EAAU,EAAII,EAElDM,EAAY,OACdC,EAAW,KACXC,EAAW,KACXC,EAAa,KACbC,EAAY,QAEZV,GAAY,MACP,IAAInC,EAAI,EAAGA,GAAKmC,EAAUnC,GAAK,EAAG,OAC7B7I,EAAS4K,IAAY/B,EAC3ByC,EAAUnS,KACNrB,EAAC6T,EAAanD,MAAaxI,OAAQA,EAAQ4L,QAASX,EAAapC,YAAKA,GAA9CA,QAG7B,CACH6C,EAAY5T,EAAC6T,EAAaE,MAAgBD,QAASX,EAAaD,IAA7B,QACnCS,EAAa3T,EAAC6T,EAAaG,OAAkBF,QAASX,EAAa,IAA9B,SACrCM,EAAWzT,EAAC6T,EAAaI,MAAgBH,QAASX,EAAaG,IAA7B,QAClCI,EAAW1T,EAAC6T,EAAaK,MAAgBJ,QAASX,EAAaI,IAA7B,YAE9BY,EAAO5B,KAAK6B,IAAI,EAAGtB,EAvBJ,GAwBflM,EAAQ2L,KAAK8B,IAAIvB,EAxBF,EAwB4BI,GAE3CJ,EAAU,GA1BK,IA2BflM,EAAQ,GAGRsM,EAAWJ,GA9BI,IA+BfqB,EAAOjB,EAAWoB,OAGjB,IAAIvD,EAAIoD,EAAMpD,GAAKnK,EAAOmK,GAAK,EAAG,OAC7B7I,EAAS4K,IAAY/B,EAC3ByC,EAAUnS,KACNrB,EAAC6T,EAAanD,MAAaxI,OAAQA,EAAQ4L,QAASX,EAAapC,YAAKA,GAA9CA,IAI5B+B,EAAU,GAAKwB,GAAkC,IAAZxB,GACrCU,EAAUe,QAAQd,GAGlBP,EAAWJ,GAAWwB,GACtBxB,IAAYI,EAAW,GAEvBM,EAAUnS,KAAKqS,GAGN,IAATS,GACAX,EAAUe,QAAQZ,GAElB/M,IAAUsM,GACVM,EAAUnS,KAAKuS,UAIhB5T,EAAC6T,GAAa5T,UAAWA,WAC3BuT,aC/GegB,UAAavU,UAAEA,EAAFN,MAAaA,EAAb8U,OAAoBA,EAAS,QAA7BC,SAAsCA,GAAW,WAE5EC,EAAY3R,GAAQ,SAElB2C,EAAU,UAGVA,EADA+O,EACU,CACNhO,MAAO,WACPgO,SAAU,SACP/O,GAGG,CACNiP,sBAAuB,GAIxB,IAAIC,KAAKL,aAAaC,EAAQ9O,KACtC,CAAC+O,EAAUD,WAEVxU,EACOD,UAAMC,UAAWA,WAAY0U,EAAUG,OAAOnV,KAGlDK,cAAG2U,EAAUG,OAAOnV,cC5BPoV,UAAc1M,QAAEA,EAAFpH,SAAWA,KAAagH,YAEnDjI,EAACgV,MAAW/M,EAAOgN,SAAU5M,WAC/BA,EAAU,WAAapH,aCKRiU,UAAcrM,IAClCA,EADkC2B,OAElCA,EAFkClF,QAGlCA,EAHkCkJ,UAIlCA,EAJkCvN,SAKlCA,EALkCgU,SAMlCA,EANkC7F,GAOlCA,EAAK4F,KACF/M,WAGIkN,EAAUC,GAAevR,GAAS,GAEnCwR,EAAcjC,GAAY7N,MAAAA,IAC5BsG,EAAEyJ,wBAEEF,GAAY,GACR9P,UACWD,GAAQC,QAAQ,CAAEiQ,KAAMjQ,iBAKjCiF,EAAwB,iBAAR1B,EAAmB,CAAEA,IAAAA,EAAK2B,OAAAA,GAAW,CAAEA,OAAAA,KAAW3B,GAElEQ,QAAe2B,GAAQT,GAEzBiE,GACAA,EAAUnF,GAEhB,MAAOwC,OACD7B,EAAM8B,aAAaD,SAObA,EAPiB,KACnBE,EAASF,EAAEE,OACS,iBAAbF,EAAEE,SACTA,EAASvM,OAAOgW,OAAO3J,EAAEE,QAAQrI,KAAK,WAE1C2B,GAAQO,MAAM,CAAE2P,KAAMxJ,aAK1BqJ,GAAY,MAEjB,CAACvM,EAAK2B,EAAQ4K,WAEV5D,EAAcpC,EAAI,IAClBnH,EACHgN,SAAUA,GAAYE,EACtBrB,QAASuB,GACVpU,YCxDiBwU,UAAW3T,GAAEA,EAAFjB,QAAMA,KAAYoH,KAC7CyN,EAAWC,WAER3V,EAACgV,MAAW/M,EAAO6L,QAAUjI,IAChCA,EAAEyJ,iBACFI,EAAS5T,EAAI,CAAEjB,QAAAA,OCKvB,MAAM+U,GAAW9F,QAAQ,wBA+BnB+F,GAAU,CACZC,OAAQ,SAAS7N,SACP4N,QAAEA,GAAYE,KAEdpQ,EAAU,IACTsC,EAAMtC,uBACMqQ,MACP/N,EAAMtC,QAAQsQ,oBAAoBC,sBACrBjO,EAAMtC,QAAQsQ,SAAS7E,KAAK4E,MAEzC/N,EAAMtC,QAAQwQ,SAAU,OAClB3K,EAAO,IAAI4K,SAEjB5K,EAAK6K,IAAI,OAAQL,SAEXnN,IAAEA,SAAcmC,GAAQ,CAC1BnC,IAAKZ,EAAMtC,QAAQwQ,SACnB3L,OAAQ,OACRgB,KAAAA,WAGG3C,YAKZ7I,EAAC6V,EAAQC,WAAW7N,EAAOtC,QAASA,MAU7C2Q,GAAaC,GAAW,GAU3BC,SAV4BC,OAC3BA,EAD2BjM,OAE3BA,EAAS,OAFkBgE,UAG3BA,EAH2BkI,SAI3BA,EAJ2BC,SAK3BA,EAL2BhE,SAM3BA,EAN2BiE,WAO3BA,EAAa,KAPc3V,SAQ3BA,KACGgH,WAGI4O,EAAaC,GAAkBjT,KAC/BwE,EAAS0O,GAAclT,GAAS,IAChC2H,EAAMwL,GAAWnT,EAAS6S,GAE3BO,EAAe7D,GAAY7N,MAAOsG,EAAsBqL,YAEtDH,GAAW,GACPN,EAAQ,OACFC,SAAEA,GAAa7K,YAGXxC,QAAe2B,GAAQ,CACzBnC,IAAK4N,EACLjM,OAAAA,EACAgB,KAAMkL,WAEVI,OAAelL,GACX4C,SACMA,EAAUnF,GAEbA,EACT,MAAOwC,SACD7B,EAAM8B,aAAaD,IACnBiL,EArFDlR,CAAAA,UACbmG,EAASnG,EAAMmG,aACC,iBAAXA,EACA,CACHoL,SAAU,CAACpL,IAGZqL,EAAUrL,GAASF,IACf,CACHsL,SAAU,CAACtL,QA4EgBwL,CAAcxL,IAG3BA,QAEP,GAAI8K,eACMA,EAAS9K,EAAGqL,WAG7BH,GAAW,MAEhB,CAACN,EAAQjM,EAAQmM,IAEdxD,EAAeC,GAAavH,UACxB6K,SAAEA,GAAa7K,EACrBmL,EAAQN,GACJ/D,GACAA,EAAS9G,KAEd,CAACmL,EAASrE,IAEP2E,EAAkBlE,GAAarH,IACjCA,EAASA,EAAOvK,KAAIoE,KAChB2R,QAAS3R,EAAMgK,KACf4H,SAAU5R,EAAM6R,YACb7R,MAGPgQ,GAAS7J,GAEFA,IACR,IAEG2L,EAAS1X,EAAC+U,IAAc1M,QAASA,EAASjC,KAAK,SAASY,QAAQ,mBAAW4P,UAEzD,mBAAb3V,IACPA,EAAWA,EAAS,CAAEyW,OAAAA,EAAQrP,QAAAA,KAG3BrI,EAAC2X,IACJnB,IAAKA,EACLK,YAAaA,EACbF,SAAUM,EACVK,gBAAiBA,EACjBM,mBACAC,iBACI5P,EACJyO,SAAUlL,EACVmH,SAAUQ,EACV0C,QAASA,YAER5U,GAAYjB,SAAKC,UAAU,kBACvByX,qCCnKWjT,UAAQ/D,MAAEA,EAAFO,SAASA,EAAT8G,MAAmBA,YAGxCrG,EAACqC,cACJ/D,EAACiE,aACGvC,SAAKzB,UAAU,sBACXD,EAACuH,aACI7G,IAELV,EAACwH,aAAOO,SAGhB/H,EAAC8X,IAAK7X,UAAU,qBACXgB,OAKb,MAAM8C,GAAYlE,EAAO8E,yCAInBV,GAASpE,EAAO8E,sMAYhBmT,GAAOjY,EAAO8E,8CAId4C,GAAQ1H,EAAO8E,oFAMf6C,GAAQ3H,EAAO8E,2BCjDrB,MAAMoT,GAAW,gBAASC,cACtBA,GAAgB,KACb/P,WAGGuO,EAAMyB,EAAyB,aAErCnU,GAAU,KACF0S,EAAI1D,UACJ0D,EAAI1D,QAAQkF,cAAgBA,KAEjC,CAACA,IAEGhY,WACHwW,IAAKA,KACDvO,EACJhI,UAAU,mBACVmG,KAAK,oCCoBb,MAAM8R,GAAcrY,EAAOsY,EAAPtY,uEAMduY,GAAyC,CAC3CC,MAAQpQ,GACGjI,EAACkY,OAAgBjQ,EAAOhI,UAAU,8BAK3CqY,GAAmBzY,EAAO4S,GAAP5S,yEAKzB,SAAS0Y,GAAgB/M,SACd,iBAAkBA,QA6BvBgN,GAAyBjC,GAAW,GAYtCC,SAXAvF,OACIA,EADJwH,OAEIA,EAAS,KAFbC,SAGIA,GAAW,EAHfC,cAIIA,EAJJC,QAKIA,EAAU,GALd3L,OAMIA,EANJ4L,aAOIA,EAPJC,KAQIA,GAAO,KACJ7Q,WAIAuD,EAAMwL,GAAWnT,EAAgB,KACjCkV,EAAYC,GAAiBnV,EAAS6U,EAAW,CAAEhG,MAAO,EAAGI,QAAS,EAAGE,SAAU,IAAO,OAC1F3K,EAAS0O,GAAclT,GAAS,IAChC0T,EAAS0B,GAAcpV,EAAS,IAEjCqV,EAAY9F,GAAY7N,qBAAOI,yDAAkB,GACnDoR,GAAW,WAEH1N,KACkB,iBAAX4H,EAAqB,OACtB/E,EAAiB,CACnBiN,EAAG5B,GAEHwB,IACA7M,EAAOkN,KAAOzT,EAAQyT,MAAQL,EAAWjG,SAE7CzJ,QAAe2B,GAAQ,CACnBnC,IAAKoI,EACL/E,OAAAA,SAGJ7C,QAAe4H,IAGfyH,GAAYH,GAAkBlP,KAC9B2P,EAAc,CACVtG,MAAOrJ,EAAOqJ,MACdI,QAASzJ,EAAOgQ,aAChBrG,SAAU3J,EAAOiQ,WAErBjQ,EAASA,EAAOmC,MAEpBwL,EAAQ3N,GACV,MAAOwC,YAGLkL,GAAW,MAEhB,CAAC9F,EAAQ+F,EAAS+B,EAAYxB,IAEjCzT,GAAU,KACNoV,MACD,CAAC3B,UAEEd,EAASwB,EAAkB,CAC7BsB,OAAQL,IAGZpV,GAAU,KACN2S,EAAO3D,QAAU,CACbyG,OAAQL,KAEb,CAACA,IAEJM,EAAoBhD,GAAK,IAAMC,EAAO3D,gBAG/B2G,YDtIPZ,EACAJ,EACAjN,SAEOnI,EAAMqW,GAAW7V,GAAS,IAAM,IAAI8V,KAAId,MAAAA,SAAAA,EAAce,kBAAmB,MAE1EC,EAAaC,GACO,iBAAXrB,EAEAqB,EAAOrB,GAEPA,EAAOqB,GAIhBC,EAAkBxV,GACbiH,EAAKwO,MAAMF,GACPD,EAAUC,KAAYvV,IAI/B0V,EAAkB7G,GAAa/P,IACjCqW,EAAQrW,SACF6W,EAAcC,MAAMC,KAAK/W,GAEzBgX,EAAUH,EAAY1Y,KAAI,SAAS+C,UAC9BwV,EAAexV,MAGtBsU,MAAAA,GAAAA,EAAclG,WACdkG,MAAAA,GAAAA,EAAclG,SAASuH,EAAaG,MAEzC,CAACN,UAsDG,CApDkB3G,GAAawF,QAC7BC,SACMD,QAGL0B,EAAa9O,EAAKhK,IAAIqY,GAEtBU,EAAoBD,EAAWE,OAAM,SAASjW,UACzClB,EAAKoX,IAAIlW,MAEdmW,EAAqBJ,EAAWK,MAAK,SAASpW,UACzClB,EAAKoX,IAAIlW,YAGb,CAAC,CACJA,IAAK,YACL7D,MAAOV,EAAC+X,IACJ6C,QAASL,EACTvC,eAAgBuC,GAAqBG,EACrC/H,SAAU,KACF4H,EACAD,EAAWjT,SAAQ,SAAS9C,GACxBlB,EAAKwX,OAAOtW,MAGhB+V,EAAWjT,SAAQ,SAAS9C,GACxBlB,EAAKyX,IAAIvW,MAGjB0V,EAAgB,IAAIN,IAAItW,OAGhCgM,MAAO,GACP0L,MAAO,SACPC,cAAOlB,OAAEA,WACCvV,EAAMsV,EAAUC,GAChBc,EAAUvX,EAAKoX,IAAIlW,UAClBvE,EAAC+X,IACJ6C,QAASA,EACTjI,SAAU,KACFiI,EACAvX,EAAKwX,OAAOtW,GAEZlB,EAAKyX,IAAIvW,GAEb0V,EAAgB,IAAIN,IAAItW,YAIlCuV,KACP,CAACpN,EAAMqN,EAAcxV,KCkDG4X,CAAapC,EAAcJ,EAAQjN,GAExD0P,EAAgBlY,GAAQ,IACnByW,EAAiBb,GAASpX,KAAK2Z,UAC5BC,EAAkC,IAAKD,EAAQH,YAAQpP,MAEzD,WAAYuP,GAAUA,EAAOH,OAAQ,OAC/BK,EAAgBF,EAAOH,OAC7BI,EAAaJ,OAAS,CAACrb,EAAOma,EAAQwB,IAC3BD,EAAc,CAAE1b,MAAAA,EAAOma,OAAAA,EAAQwB,MAAAA,EAAO7E,OAAQA,EAAO3D,iBAG7DsI,MAEZ,CAACxC,EAASa,EAAkBhD,IAQzB8E,WClL2DlV,EAAamV,EAAc7V,SACtF8V,EAAcxD,EAAU5R,GACxBqV,EAAuBzD,EACzB0D,EAAStV,EAAUmV,EAAM7V,WAG7B7B,GAAU,KACN2X,EAAY3I,QAAUzM,KAG1BvC,GAAU,KACN4X,EAAqB5I,QAAU6I,GAAS,WACpCF,EAAY3I,wBACb0I,EAAM7V,KACV,CAAC6V,EAAM7V,IAEH+V,EAAqB5I,QDkKP8I,EAAa/P,IAC9BoN,EAAWpN,EAAEiF,OAAOnR,SACrB,KAEGsB,EAAWS,eACb1B,EAACoI,IAAOC,QAASA,KACE,IAAlBsQ,GAA2BjX,EAACuC,cACzBjE,EAAC6b,IAAUzL,KAAM,YACZuI,GAAiBA,EAAclC,EAAO3D,WAE3CpR,EAACoa,IAAW1L,KAAM,aACbnD,GACGjN,EAACsW,EAAKyF,SAAQpJ,SAAU4I,EAAcnV,KAAM,SAAU4V,YAAa,cACvEhc,EAACic,IAAOnI,QAAS2C,EAAO3D,QAAQyG,gBAAQvZ,OAAGC,UAAU,+BAG7DD,EAACkc,OAAYjU,EAAOwQ,OAAQA,EAAQG,QAASsC,EAAe9C,WAAYA,GAAY5M,KAAMA,IACzFuN,GAAc/Y,EAACsY,OAAqBS,EAAYpG,SAvB3BG,IACtBoG,EAAU,CACNE,KAAMtG,iBAwBVgG,EACO9Y,EAACwP,aACHvO,IAGFA,KAKLgD,GAASpE,EAAO8E,6JAQhBmX,GAAajc,EAAOsQ,GAAPtQ,wBAGbgc,GAAYhc,EAAOsQ,GAAPtQ,wBAIZoc,GAASpc,EAAOsc,wIElMhBC,GAA+B7F,GAAW,GAW7CC,SAX8CjB,KAC7CA,EAD6CvO,QAE7CA,EAF6CuI,OAG7CA,EAASgG,EAHoCzV,OAI7CA,GAAS,EAJoCuc,KAK7CA,EAL6CjM,KAM7CA,EAN6CkM,OAO7CA,EAAS,KAPoCC,OAQ7CA,EAR6Ctb,SAS7CA,EAT6CmO,GAU7CA,EAAK4F,WAGEwH,EAAMC,GAAW5Y,GAAS,IAC1BwE,EAAS0O,GAAclT,GAAS,GACjC6Y,EAAc,IAAMD,GAAQ,GAGlCjD,EAAoBhD,GAAK,MACrBmG,MAAOD,YAeLE,EAASpL,EAAcpC,EAAI,CAC7BpI,QAAAA,EACA8M,QApBe,IAAM2I,GAAQ,IAqB9BlH,UAEI7T,eACFkb,EACDlb,EAACmb,GAAMzM,KAAMA,EAAMoM,KAAMA,EAAMM,OAAQJ,EAAaH,OAAQA,YACvDhN,GAAUvP,EAAC6c,EAAM5Y,QAAO8Y,wBACrB/c,EAAC6c,EAAMtV,OAAM6H,GAAG,cAAMG,MAE1BvP,EAAC6c,EAAM/E,eAAM7W,IACZnB,GAAU4B,EAACmb,EAAM9c,kBACdC,EAACgV,GAAOhO,QAAQ,YAAY8M,QAAS4I,kBAGrC1c,EAAC+U,IAAc1M,QAASA,EAASrB,QAAQ,UAAU8M,QA5B9CvO,aACT8W,EAAM,CACNtF,GAAW,SACL1N,QAAegT,OACrBtF,GAAW,IACI,IAAX1N,SAIRqT,cAoBaJ,yBC3EGU,UAAmBzH,KACvCA,EADuChG,OAEvCA,EAFuC0N,OAGvCA,EAHuCC,SAIvCA,EAJuCzG,OAKvCA,EALuCjM,OAMvCA,EANuCkM,SAOvCA,EAPuC1P,QAQvCA,EARuCwH,UASvCA,EATuCmE,SAUvCA,EAVuCwK,OAWvCA,EAXuC/M,KAYvCA,EAZuChB,GAavCA,WAGMgO,EAAOnF,EAAiB,MAExBoF,EAAWjK,GAAY7N,2CAEf6X,EAAKtK,4BAALwK,EAAc5F,WACb,EACT,aACS,KAEZ,WAEI1X,EAACoc,IAAYhN,GAAIA,EAAImG,KAAMA,EAAM8G,KAAMgB,EAAU9N,OAAQA,EAAQvI,QAASA,EAASoJ,KAAMA,WAC5FpQ,EAACsW,IACGE,IAAK4G,EACLH,OAAQA,EACRC,SAAUA,EACVzG,OAAQA,EACRjM,OAAQA,EACRkM,SAAUA,EACVyG,OAAQA,EACRxK,SAAUA,EACVnE,UAAWA,WAGXxO,EAACud,mBCrCWC,GAAoBjT,OAAuBkT,OAC/DA,EAD+DC,YAE/DA,KACG/X,0DACmB,IAClBgY,QAAEA,EAAFC,cAAWA,EAAXhY,MAA0BA,KAAUiY,GAAWC,GAAiBvY,MAAAA,IAEhEgF,EAA2B,iBAAXA,EAAsB,CAAE1B,IAAK0B,GAAWA,QAE3CS,GAAW,IACjBT,KACA2B,MAERvG,GAEH7B,GAAU,KACD2Z,GAAWC,GACZC,MAEL,IAEH7Z,GAAU,KACF4Z,GACAK,MAELL,SAEGK,EAAU3K,GAAY,KACpBwK,EACAD,KAAWC,GAEXD,MAEL,CAACA,EAASC,OAEThY,GAASoG,GAAepG,GAAQ,OAC1BmG,EAASnG,EAAMmG,OACrBnG,EAAQ,IAAI+C,MAAwB,iBAAXoD,EAAsBA,EAASyJ,EAAOzJ,GAAQrI,KAAK,WAGzE,CACHqa,QAAAA,EACAJ,QAAAA,EACA/X,MAAAA,KACGiY,GChDX,IAAIG,GAAK,WAEeC,SAAgBnB,OAAEA,EAAFP,OAAUA,0DAAoB,SAC3D2B,EAASC,GAActa,GAAS,IAEhCU,EAAK6Z,GAAUva,oBAAoBma,KAEpCK,EAAOjL,GAAY,KACrB+K,GAAW,GACPrB,GACAA,MAEL,CAACqB,EAAYrB,IAEVwB,EAAOlL,GAAY,KACrBgL,sBAAoBJ,OACrB,CAACI,EAAQJ,KAENxB,EAAOpJ,GAAY,KACrB+K,GAAW,GACP5B,GACAA,MAEL,CAAC4B,EAAY5B,IAEVnO,EAAQ,CACVoO,KAAM0B,EACNpB,OAAQuB,EACRE,SAAUD,EACV/Z,IAAAA,SAGG,CACH2Z,QAAAA,EACA1B,KAAAA,EACA6B,KAAAA,EACAjQ,MAAAA,YClCgBoQ,UAAQC,QAAEA,EAAFxd,SAAWA,EAAXyd,UAAqBA,EAAY,mBAEtD1e,EAAC2e,GACJD,UAAWA,EACXE,QACI5e,EAAC6e,GAAUb,GAAIc,aACVL,aAIRxd"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@topthink/common",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.8",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"build": "rollup -c --environment NODE_ENV:production",
|
|
6
6
|
"build:dev": "rollup -c",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@topthink/bootstrap": "^1.0.11",
|
|
19
|
-
"@topthink/json-form": "^1.0.
|
|
19
|
+
"@topthink/json-form": "^1.0.18",
|
|
20
20
|
"ajv-i18n": "^4.0.0",
|
|
21
21
|
"axios": "^0.27.2",
|
|
22
22
|
"classnames": "^2.3.1",
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
},
|
|
64
64
|
"author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
|
|
65
65
|
"license": "MIT",
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "3f4fbae15261d6f06e7e4cff99df07dd3ffbb02f"
|
|
67
67
|
}
|