@topthink/common 1.0.20 → 1.0.23
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 +6 -4
- package/types/components/access.d.ts +1 -1
- package/types/components/form.d.ts +6 -1
- package/types/components/link-button.d.ts +7 -0
- package/types/components/loader.d.ts +2 -1
- package/types/components/request-button.d.ts +2 -2
- package/types/components/steps.d.ts +8 -0
- package/types/components/{table.d.ts → table/index.d.ts} +8 -8
- package/types/components/table/use-selection.d.ts +2 -0
- package/types/components/tooltip.d.ts +9 -0
- package/types/components/user-provider.d.ts +1 -9
- package/types/hooks/use-debounce.d.ts +2 -0
- package/types/hooks/use-request.d.ts +2 -2
- package/types/index.d.ts +6 -2
- package/types/request.d.ts +5 -3
- package/types/utils/types.d.ts +17 -0
package/lib/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as c,Fragment as n}from"react/jsx-runtime";import t,{SubMenu as r,MenuItem as i}from"rc-menu";import o from"styled-components";import{useRoutes as a,useLocation as l,Link as s,BrowserRouter as d,Routes as h,Route as u,Navigate as m}from"react-router-dom";import g,{useMemo as p,useEffect as f,useState as v,useContext as b,Children as x,useCallback as y,createElement as w,forwardRef as _,useRef as k,useImperativeHandle as z,Fragment as C}from"react";import"rc-menu/assets/index.css";import N from"sweetalert2/dist/sweetalert2.js";import S from"sweetalert2-react-content";import{Dropdown as j,Spinner as I,Card as E,Alert as A,Button as D,Pagination as P,Table as B,Modal as F}from"react-bootstrap";import O from"query-string";import H from"axios";import*as M from"retry-axios";import T from"classnames";import{intersection as L,mapValues as U}from"lodash";import q from"@topthink/json-form";import K from"rc-table";import{useAsyncCallback as R}from"react-async-hook";function V(e,c){return c||(c=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(c)}}))}var G;const Y=o.footer(G||(G=V(["\n\n"])));function $(){return e(Y,{children:e("div",{className:"container"})})}const J=function(e){let c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/";const n=[];for(const o of e){var t,r,i;if(null!==(t=o.meta)&&void 0!==t&&t.hideInMenu)continue;const e=null===(r=o.meta)||void 0===r?void 0:r.title;if(!e)continue;let a=o.path||"";a="".concat(c,"/").concat(a),a=a.replace(/\/+/,"/").replace(/\/$/,"");const l={title:e,path:a,children:[]};null!==(i=o.meta)&&void 0!==i&&i.hideChildrenInMenu||o.children&&o.children.length>0&&(l.children=J(o.children,a)),n.push(l)}return n};var Q,W,X,Z,ee,ce;const ne=c=>c.map((c=>c.children.length>0?e(r,{title:c.title,children:ne(c.children)},c.path):e(i,{children:e(s,{to:c.path,children:c.title})},c.path))),te=()=>({height:0}),re=e=>({height:e.scrollHeight}),ie={motionName:"rc-menu-collapse",motionAppear:!0,onAppearStart:te,onAppearActive:re,onEnterStart:te,onEnterActive:re,onLeaveStart:re,onLeaveActive:te};function oe(n){let{routes:t,basename:r,title:i}=n;const o=a(t),s=p((()=>function(e){return J(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/")}(t,r)),[t,r]),{pathname:d}=l(),h=p((()=>{const e=[];return d.split("/").reduce(((c,n)=>(c.length>1&&e.push(c.join("/")),[...c,n])),[]),e}),[d]),u=p((()=>[...h,d]),[d,h]);return c(ae,{children:[c(le,{children:[e(se,{children:i}),e(ue,{mode:"inline",motion:ie,defaultOpenKeys:h,selectedKeys:u,children:ne(s)})]}),c(de,{children:[e(he,{children:o}),e($,{})]})]})}const ae=o.div(Q||(Q=V(["\n display: flex;\n flex-wrap: nowrap;\n width: 100%;\n"]))),le=o.nav(W||(W=V(["\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"]))),se=o.div(X||(X=V(["\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"]))),de=o.div(Z||(Z=V(["\n margin-left: 230px;\n flex: 1;\n"]))),he=o.main(ee||(ee=V(["\n min-height: calc(100vh - 54px);\n position: relative;\n"]))),ue=o(t)(ce||(ce=V(["\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: inherit;\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\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 }\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\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"]))),me=S(N),ge={confirmButtonText:"确定",cancelButtonText:"取消"},pe={confirm:async e=>{const{isConfirmed:c}=await me.fire({...ge,icon:"warning",showCancelButton:!0,...e});return c},error:e=>{me.fire({...ge,toast:!0,position:"top",icon:"error",timer:3e3,showConfirmButton:!1,...e})}};var fe,ve,be,xe;const ye=o.div(fe||(fe=V(["\n padding: 48px 32px;\n"]))),we=o.div(ve||(ve=V(["\n margin-bottom: 24px;\n text-align: center;\n font-size: 72px;\n"]))),_e=o.div(be||(be=V(["\n color: rgba(0, 0, 0, .85);\n font-size: 24px;\n line-height: 1.8;\n text-align: center;\n"]))),ke=o.div(xe||(xe=V(["\n margin-top: 32px;\n text-align: center;\n"]))),ze={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 Ce(n){let{status:t,title:r,icon:i,extra:o}=n;return!i&&t&&(i=ze[t]),c(ye,{children:[i&&e(we,{children:i}),r&&e(_e,{children:r}),o&&e(ke,{children:o})]})}var Ne,Se;const je=o.a(Ne||(Ne=V(["\n cursor: pointer;\n"])));function Ie(n){let{children:t,menus:r}=n;return e(Ee,{className:"navbar navbar-light bg-white border-bottom sticky-top",children:c("div",{className:"container-fluid",children:[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,e("div",{className:"d-flex align-items-center",children:c(j,{navbar:!0,children:[e(j.Toggle,{as:je,className:"nav-link",children:e("i",{className:"bi bi-person-circle"})}),e(j.Menu,{className:"shadow",children:r})]})})]})})}const Ee=o.header(Se||(Se=V(["\n height: 54px;\n"])));var Ae,De;o.div(Ae||(Ae=V(["\n position: relative;\n"])));const Pe=o.div(De||(De=V(["\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));function Be(n){let{loading:t=!0,children:r,variant:i="success",animation:o="border",...a}=n;return t?(r&&(r=e("p",{className:"mt-3 text-secondary",children:r})),c(Pe,{inverted:!0,active:!0,children:[e(I,{animation:o,variant:i,...a}),r]})):null}M.attach(),H.defaults.raxConfig={retryDelay:2e3,backoffType:"static",shouldRetry:e=>{var c,n;return"GET"===(null===(c=e.config.method)||void 0===c?void 0:c.toUpperCase())&&449===(null===(n=e.response)||void 0===n?void 0:n.status)}},H.defaults.baseURL="/api",H.interceptors.request.use((e=>{const c=sessionStorage.getItem("authorization");return c&&(e.headers.Authorization="Bearer ".concat(c)),e}),(e=>Promise.reject(e))),H.interceptors.response.use((e=>(201===e.status&&e.data.location&&(window.location.href=e.data.location,e.data=void 0),e)),(e=>{if(H.isAxiosError(e)&&e.response){const{data:c,status:n}=e.response;if(401===n){const{url:n}=c;if(n){"/logout"!==window.location.pathname&&sessionStorage.setItem("redirect_uri",window.location.pathname+window.location.search);const e=window.location.origin+"/login";window.location.href="".concat(n,"&redirect_uri=").concat(encodeURIComponent(e))}e.errors="Unauthorized"}else{let t={};if(422===n&&"object"==typeof c)for(let e in c)t[e]=c[e];else t="object"==typeof c&&"message"in c?c.message:c;e.errors=t}}return Promise.reject(e)}));const Fe=async function(e){e="string"==typeof e?{url:e}:e;const{data:c}=await H.request({...e});return c};function Oe(){const c=l(),n=O.parse(c.hash.substr(1));sessionStorage.setItem("authorization",n.access_token);const t=sessionStorage.getItem("redirect_uri");return t&&sessionStorage.removeItem("redirect_uri"),e(m,{to:t||"/",replace:!0})}function He(){return f((()=>{Fe("/logout").catch((()=>{sessionStorage.removeItem("authorization")}))}),[]),e(Be,{})}function Me(n){let{children:t}=n;return e(d,{children:c(h,{children:[e(u,{path:"*",element:t}),e(u,{path:"login",element:e(Oe,{})}),e(u,{path:"logout",element:e(He,{})})]})})}function Te(t){let{children:r,title:i,className:o,...a}=t;return e(E,{className:T("border-0 shadow-sm mb-3",o),...a,children:c("div",{className:"card-body",children:[i&&c(n,{children:[e("h5",{children:i}),e("hr",{})]}),r]})})}function Le(c){let{errors:n}=c;return n?e(A,{variant:"danger",children:e("ul",{className:"mb-0",children:"string"==typeof n?e("li",{children:n}):Object.entries(n).map((c=>{let[n,t]=c;return e("li",{children:t},n)}))})}):null}const Ue=g.createContext([null,()=>{}]),qe=function(c){let{children:n,user:t}=c;const[r,i]=v(t);return f((()=>{i(t)}),[t]),r?e(Ue.Provider,{value:[r,i],children:n}):e(Be,{})};function Ke(){const[e,c]=b(Ue);if(!e)throw new Error("please use `useUser` in UserContext");return[e,c]}function Re(c){let{require:t,children:r,fallback:i}=c;const[o]=Ke();let a=!1;return"function"==typeof t?a=t(o):("string"==typeof t&&(t=[t]),a=L(o.roles,t).length>0),a||(r=i),e(n,{children:r})}var Ve,Ge;function Ye(c){let{children:n,size:t="small"}=c;"string"==typeof t&&(t={small:8,middle:16,large:24}[t]);const r=x.map(n,(c=>e(Je,{size:t,children:c})));return e($e,{children:r})}const $e=o.div(Ve||(Ve=V(["\n display: inline-flex;\n align-items: center;\n"]))),Je=o.div(Ge||(Ge=V(["\n margin-right: ","px;\n\n &:last-child {\n margin-right: 0;\n }\n"])),(e=>e.size));function Qe(c){let{value:t,locale:r="zh-CN",currency:i=!0}=c;const o=p((()=>{let e={};return e=i?{style:"currency",currency:"CNY",...e}:{minimumFractionDigits:2},new Intl.NumberFormat(r,e)}),[i,r]);return e(n,{children:o.format(t)})}function We(c){let{loading:n,children:t,...r}=c;return e(D,{...r,disabled:n,children:n?"Loading…":t})}function Xe(e){let{url:c,method:n,confirm:t,onSuccess:r,children:i,disabled:o,as:a=D,...l}=e;const[s,d]=v(!1),h=y((async e=>{e.preventDefault();try{if(d(!0),t&&!await pe.confirm({text:t}))return;const e="string"==typeof c?{url:c,method:n}:{method:n,...c},i=await Fe(e);r&&r(i)}catch(e){if(!H.isAxiosError(e))throw e;{let c=e.errors;"string"!=typeof e.errors&&(c=Object.values(e.errors).join("<br />")),pe.error({text:c})}}finally{d(!1)}}),[c,n,d]);return w(a,{...l,disabled:o||s,onClick:h},i)}const Ze=require("ajv-i18n/localize/zh"),ec=_(((c,n)=>{let{action:t,method:r="post",onSuccess:i,formData:o,onSubmit:a,onChange:l,children:s,...d}=c;const[h,u]=v(),[m,g]=v(!1),[p,f]=v(o),b=y((async(e,c)=>{try{if(g(!0),t){const{formData:c}=e;try{const e=await Fe({url:t,method:r,data:c});u(void 0),i&&await i(e)}catch(e){throw H.isAxiosError(e)&&u((e=>{const c=e.errors;return"string"==typeof c?{__errors:[c]}:U(c,(e=>({__errors:[e]})))})(e)),e}}else a&&await a(e,c)}finally{g(!1)}}),[t,r,a]),x=y((e=>{const{formData:c}=e;f(c),l&&l(e)}),[f,l]),w=y((e=>(e=e.map((e=>({keyword:e.name,dataPath:e.property,...e}))),Ze(e),e)),[]);return e(q,{ref:n,extraErrors:h,onSubmit:b,transformErrors:w,noHtml5Validate:!0,noValidate:!0,...d,formData:p,onChange:x,children:s||e("div",{className:"col-12",children:e(We,{loading:m,type:"submit",variant:"primary",children:"提交"})})})}));var cc,nc,tc,rc,ic;const oc=o.div(cc||(cc=V(["\n width: 100%;\n"]))),ac=o.div(nc||(nc=V(["\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"]))),lc=o.div(tc||(tc=V(["\n margin-top: 24px;\n"]))),sc=o.div(rc||(rc=V(["\n font-size: 22px;\n line-height: 64px;\n height: 64px;\n"]))),dc=o.div(ic||(ic=V(["\n\n"])));function hc(n){let{title:t,children:r,extra:i}=n;return c(oc,{children:[e(ac,{children:c("div",{className:"container",children:[e(sc,{children:t}),e(dc,{children:i})]})}),e(lc,{className:"container",children:r})]})}function uc(){}function mc(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}var gc,pc,fc,vc,bc,xc;const yc=o(B)(gc||(gc=V(["\n .rc-table-thead {\n border-top: none;\n }\n"]))),wc={table:c=>e(yc,{...c,className:"align-middle table-hover"})},_c=o((function(c){let{total:n=0,onChange:t=uc,defaultCurrent:r=1,defaultPageSize:i=10,className:o,...a}=c;const[l,s]=v(r),[d,h]=v(i);f((()=>{mc(a.current)&&s(a.current)}),[a.current]),f((()=>{mc(a.pageSize)&&h(a.pageSize)}),[a.pageSize]);const u=p((()=>Math.floor((n-1)/d)+1),[n,d]),m=y((e=>()=>{e!==l&&(s(e),t(e,d))}),[t,l,d]),g=l-1>0?l-1:0,b=l+1<u?l+1:u,x=[];let w=null,_=null,k=null,z=null;if(u<=7)for(let c=1;c<=u;c+=1){const n=l===c;x.push(e(P.Item,{active:n,onClick:m(c),children:c},c))}else{z=e(P.Last,{onClick:m(u)},"last"),k=e(P.First,{onClick:m(1)},"first"),w=e(P.Prev,{onClick:m(g)},"prev"),_=e(P.Next,{onClick:m(b)},"next");let c=Math.max(1,l-2),n=Math.min(l+2,u);l-1<=2&&(n=5),u-l<=2&&(c=u-4);for(let t=c;t<=n;t+=1){const c=l===t;x.push(e(P.Item,{active:c,onClick:m(t),children:t},t))}l-1>=4&&3!==l&&x.unshift(w),u-l>=4&&l!==u-2&&x.push(_),1!==c&&x.unshift(k),n!==u&&x.push(z)}return e(P,{className:o,children:x})}))(pc||(pc=V(["\n margin-bottom: 0;\n justify-content: flex-end;\n"])));function kc(e){return"current_page"in e}const zc=_(((n,t)=>{let{source:r,rowKey:i="id",paginate:o=!0,toolBarRender:a,columns:l=[],...s}=n;const[d,h]=v([]),[u,m]=v(o?{total:0,current:1,pageSize:10}:null),[g,b]=v(!0),x=y((async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};b(!0);try{let c;if("string"==typeof r){const n={};u&&(n.page=e.page||u.current),c=await Fe({url:r,params:n})}else c=await r();o&&kc(c)&&(m({total:c.total,current:c.current_page,pageSize:c.per_page}),c=c.data),h(c)}catch(e){}finally{b(!1)}}),[r,h,u]);f((()=>{x()}),[]);const w=k({reload:x});f((()=>{w.current={reload:x}}),[x]),z(t,(()=>w.current));const _=p((()=>l.map((e=>{const c={...e,render:void 0};if("render"in e&&e.render){const n=e.render;c.render=(e,c,t)=>n({value:e,record:c,index:t,action:w.current})}return c}))),[l,w]),C=y((e=>{x({page:e})}),[]);return c(Te,{children:[e(Be,{loading:g}),c(Cc,{children:[e(Sc,{children:a&&a(w.current)}),e(Nc,{children:e(jc,{onClick:w.current.reload,children:e("i",{className:"bi bi-arrow-repeat"})})})]}),e(K,{...s,rowKey:i,columns:_,components:wc,data:d}),u&&e(_c,{...u,onChange:C})]})})),Cc=o.div(fc||(fc=V(["\n display: flex;\n justify-content: space-between;\n padding-bottom: 1rem;\n"]))),Nc=o(Ye)(vc||(vc=V(["\n\n"]))),Sc=o(Ye)(bc||(bc=V(["\n\n"]))),jc=o.span(xc||(xc=V(["\n cursor: pointer;\n font-size: 20px;\n line-height: 1;\n\n &:hover {\n color: var(--bs-primary);\n }\n"]))),Ic=_(((t,r)=>{let{text:i,variant:o="primary",header:a=i,footer:l=!0,onOk:s,size:d,children:h}=t;const[u,m]=v(!1),[g,p]=v(!1),f=()=>m(!1);z(r,(()=>({close:f})));return c(n,{children:[e(D,{variant:o,onClick:()=>m(!0),children:i}),c(F,{size:d,show:u,onHide:f,children:[a&&e(F.Header,{closeButton:!0,children:e(F.Title,{as:"h5",children:a})}),e(F.Body,{children:h}),l&&c(F.Footer,{children:[e(D,{variant:"secondary",onClick:f,children:"取消"}),e(We,{loading:g,variant:"primary",onClick:async()=>{if(s){p(!0);const e=await s();if(p(!1),!1===e)return}f()},children:"确定"})]})]})]})}));function Ec(c){let{text:n,header:t,schema:r,uiSchema:i,action:o,method:a,formData:l,variant:s,onSuccess:d,onChange:h,fields:u,size:m}=c;const g=k(null),p=k(null),f=y((async()=>{try{var e;return await(null===(e=g.current)||void 0===e?void 0:e.submit()),!0}catch{return!1}}),[]);return e(Ic,{ref:p,text:n,onOk:f,header:t,variant:s,size:m,children:e(ec,{ref:g,schema:r,uiSchema:i,action:o,method:a,formData:l,fields:u,onChange:h,onSuccess:d,children:e(C,{})})})}function Ac(e){let{manual:c,refreshDeps:n,...t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{execute:r,currentParams:i,error:o,...a}=R((async c=>(e="string"==typeof e?{url:e}:e,await Fe({...e,...c}))),t);f((()=>{c||n||r()}),[]),f((()=>{n&&l()}),n);const l=y((()=>{i?r(...i):r()}),[r,i]);return{refresh:l,execute:r,...a}}let Dc=0;function Pc(){let{onHide:e,onShow:c}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[n,t]=v(!1),[r,i]=v("visible-".concat(Dc)),o=y((()=>{t(!1),e&&e()}),[t,e]),a=y((()=>{i("visible-".concat(++Dc))}),[i,Dc]),l=y((()=>{t(!0),c&&c()}),[t,c]),s={show:n,onHide:o,onExited:a,key:r};return{visible:n,show:l,hide:o,state:s}}export{Re as Access,Te as Card,hc as Content,Le as Error,$ as Footer,ec as Form,Ie as Header,Be as Loader,We as LoadingButton,pe as Message,Ic as ModalButton,Ec as ModalForm,Qe as NumberFormat,Xe as RequestButton,Ce as Result,Me as Root,oe as SiderLayout,Ye as Space,zc as Table,qe as UserProvider,Fe as request,Pc as useOverlayState,Ac as useRequest,Ke 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";import{useRoutes as a,useLocation as s,Link as l,BrowserRouter as d,Routes as u,Route as h,Navigate as m,useNavigate as g}from"react-router-dom";import*as p from"react";import f,{useMemo as v,useEffect as b,useState as x,useContext as y,Children as w,useCallback as _,createElement as k,forwardRef as z,useRef as C,useImperativeHandle as S,Fragment as N}from"react";import"rc-menu/assets/index.css";import j from"sweetalert2/dist/sweetalert2.js";import E from"sweetalert2-react-content";import{Dropdown as A,Spinner as D,Card as F,Alert as I,Button as O,Pagination as P,Table as B,Form as T,Modal as U,OverlayTrigger as L,Tooltip as M}from"react-bootstrap";import q from"query-string";import H from"axios";import*as K from"retry-axios";import R from"classnames";import{intersection as V,mapValues as G,debounce as Y,uniqueId as $}from"lodash";import J from"rc-steps";import"rc-steps/assets/index.css";import Q,{getRegistry as W}from"@topthink/json-form";import X from"rc-table";import{useAsyncCallback as Z}from"react-async-hook";function ee(e,n){return n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}var ne;const ce=o.footer(ne||(ne=ee(["\n\n"])));function te(){return e(ce,{children:e("div",{className:"container"})})}const re=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/";const c=[];for(const o of e){var t,r,i;if(null!==(t=o.meta)&&void 0!==t&&t.hideInMenu)continue;const e=null===(r=o.meta)||void 0===r?void 0:r.title;if(!e)continue;let a=o.path||"";a="".concat(n,"/").concat(a),a=a.replace(/\/+/,"/").replace(/\/$/,"");const s={title:e,path:a,children:[]};null!==(i=o.meta)&&void 0!==i&&i.hideChildrenInMenu||o.children&&o.children.length>0&&(s.children=re(o.children,a)),c.push(s)}return c};var ie,oe,ae,se,le,de;const ue=n=>n.map((n=>n.children.length>0?e(r,{title:n.title,children:ue(n.children)},n.path):e(i,{children:e(l,{to:n.path,children:n.title})},n.path))),he=()=>({height:0}),me=e=>({height:e.scrollHeight}),ge={motionName:"rc-menu-collapse",motionAppear:!0,onAppearStart:he,onAppearActive:me,onEnterStart:he,onEnterActive:me,onLeaveStart:me,onLeaveActive:he};function pe(c){let{routes:t,basename:r,title:i}=c;const o=a(t),l=v((()=>function(e){return re(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}),[d]),h=v((()=>[...u,d]),[d,u]);return n(fe,{children:[n(ve,{children:[e(be,{children:i}),e(we,{mode:"inline",motion:ge,defaultOpenKeys:u,selectedKeys:h,children:ue(l)})]}),n(xe,{children:[e(ye,{children:o}),e(te,{})]})]})}const fe=o.div(ie||(ie=ee(["\n display: flex;\n flex-wrap: nowrap;\n width: 100%;\n"]))),ve=o.nav(oe||(oe=ee(["\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"]))),be=o.div(ae||(ae=ee(["\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"]))),xe=o.div(se||(se=ee(["\n margin-left: 230px;\n flex: 1;\n"]))),ye=o.main(le||(le=ee(["\n min-height: calc(100vh - 54px);\n position: relative;\n"]))),we=o(t)(de||(de=ee(["\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 }\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 }\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"]))),_e=E(j),ke={confirmButtonText:"确定",cancelButtonText:"取消"},ze={confirm:async e=>{const{isConfirmed:n}=await _e.fire({...ke,icon:"warning",showCancelButton:!0,...e});return n},error:e=>{_e.fire({...ke,toast:!0,position:"top",icon:"error",timer:3e3,showConfirmButton:!1,...e})}};var Ce,Se,Ne,je;const Ee=o.div(Ce||(Ce=ee(["\n padding: 48px 32px;\n"]))),Ae=o.div(Se||(Se=ee(["\n margin-bottom: 24px;\n text-align: center;\n font-size: 72px;\n"]))),De=o.div(Ne||(Ne=ee(["\n color: rgba(0, 0, 0, .85);\n font-size: 24px;\n line-height: 1.8;\n text-align: center;\n"]))),Fe=o.div(je||(je=ee(["\n margin-top: 32px;\n text-align: center;\n"]))),Ie={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 Oe(c){let{status:t,title:r,icon:i,extra:o}=c;return!i&&t&&(i=Ie[t]),n(Ee,{children:[i&&e(Ae,{children:i}),r&&e(De,{children:r}),o&&e(Fe,{children:o})]})}var Pe,Be;const Te=o.a(Pe||(Pe=ee(["\n cursor: pointer;\n"])));function Ue(c){let{children:t,menus:r}=c;return e(Le,{className:"navbar navbar-light bg-white border-bottom sticky-top",children:n("div",{className:"container-fluid",children:[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,e("div",{className:"d-flex align-items-center",children:n(A,{navbar:!0,children:[e(A.Toggle,{as:Te,className:"nav-link",children:e("i",{className:"bi bi-person-circle"})}),e(A.Menu,{className:"shadow",children:r})]})})]})})}const Le=o.header(Be||(Be=ee(["\n height: 54px;\n"])));var Me,qe;o.div(Me||(Me=ee(["\n position: relative;\n"])));const He=o.div(qe||(qe=ee(["\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 Ke;function Re(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(He,{inverted:!0,active:!0,children:[e(D,{animation:o,variant:i,...s}),r]}),a?e(Ve,{height:"number"==typeof a?a:150,children:r}):r):null}const Ve=o.div(Ke||(Ke=ee(["\n position: relative;\n height: ",";\n"])),(e=>"".concat(e.height,"px")));K.attach(),H.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)}},H.defaults.baseURL="/api",H.interceptors.request.use((e=>{const n=sessionStorage.getItem("authorization");return n&&(e.headers.Authorization="Bearer ".concat(n)),e}),(e=>Promise.reject(e))),H.interceptors.response.use((e=>(201===e.status&&e.data.location&&(window.location.href=e.data.location,e.data=void 0),e)),(e=>{if(H.isAxiosError(e)&&e.response){const{data:n,status:c}=e.response;if(401===c){const{url:c}=n;if(c){"/logout"!==window.location.pathname&&sessionStorage.setItem("redirect_uri",window.location.pathname+window.location.search);const e=window.location.origin+"/login";window.location.href=q.stringifyUrl({url:c,query:{redirect_uri:e}})}e.errors="Unauthorized"}else{let t={};if(422===c&&"object"==typeof n)for(let e in n)t[e]=n[e];else t="object"==typeof n&&"message"in n?n.message:n;e.errors=t}}return Promise.reject(e)}));const Ge=H.isAxiosError,Ye=async function(e){e="string"==typeof e?{url:e}:e;const{data:n}=await H.request({paramsSerializer:function(e){return q.stringify(e,{sort:!1,skipNull:!0,skipEmptyString:!0})},...e});return n};function $e(){const n=s(),c=q.parse(n.hash.substr(1));sessionStorage.setItem("authorization",c.access_token);const t=sessionStorage.getItem("redirect_uri");return t&&sessionStorage.removeItem("redirect_uri"),e(m,{to:t||"/",replace:!0})}function Je(){return b((()=>{Ye("/logout").catch((()=>{sessionStorage.removeItem("authorization")}))}),[]),e(Re,{})}function Qe(c){let{children:t}=c;return e(d,{children:n(u,{children:[e(h,{path:"*",element:t}),e(h,{path:"login",element:e($e,{})}),e(h,{path:"logout",element:e(Je,{})})]})})}function We(t){let{children:r,title:i,className:o,...a}=t;return e(F,{className:R("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 Xe(n){let{errors:c}=n;return c?e(I,{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}const Ze=f.createContext([null,()=>{}]),en=function(n){let{children:c,user:t}=n;const[r,i]=x(t);return b((()=>{i(t)}),[t]),r?e(Ze.Provider,{value:[r,i],children:c}):e(Re,{})};function nn(){const[e,n]=y(Ze);if(!e)throw new Error("please use `useUser` in UserContext");return[e,n]}function cn(n){let{require:t,children:r,fallback:i}=n;const[o]=nn();let a=!1;return"function"==typeof t?a=t(o):("string"==typeof t&&(t=[t]),a=V(o.roles,t).length>0),a||(r=i),e(c,{children:r})}var tn,rn;function on(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(sn,{children:n})}));return e(an,{size:t,children:r})}const an=o.div(tn||(tn=ee(["\n display: inline-flex;\n align-items: center;\n gap: ","px;\n"])),(e=>e.size)),sn=o.div(rn||(rn=ee(["\n\n"])));var ln;function dn(){return dn=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},dn.apply(this,arguments)}const un=e=>p.createElement("svg",dn({className:"step_check_svg__icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),ln||(ln=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 hn;function mn(n){return e(gn,{icons:{finish:e(un,{}),error:e(c,{})},...n})}mn.Step=J.Step;const gn=o(J)(hn||(hn=ee(["\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 pn(n){let{value:t,locale:r="zh-CN",currency:i=!0}=n;const o=v((()=>{let e={};return e=i?{style:"currency",currency:"CNY",...e}:{minimumFractionDigits:2},new Intl.NumberFormat(r,e)}),[i,r]);return e(c,{children:o.format(t)})}function fn(n){let{loading:c,children:t,...r}=n;return e(O,{...r,disabled:c,children:c?"Loading…":t})}function vn(e){let{url:n,method:c,confirm:t,onSuccess:r,children:i,disabled:o,as:a=O,...s}=e;const[l,d]=x(!1),u=_((async e=>{e.preventDefault();try{if(d(!0),t&&!await ze.confirm({text:t}))return;const e="string"==typeof n?{url:n,method:c}:{method:c,...n},i=await Ye(e);r&&r(i)}catch(e){if(!H.isAxiosError(e))throw e;{let n=e.errors;"string"!=typeof e.errors&&(n=Object.values(e.errors).join("<br />")),ze.error({text:n})}}finally{d(!1)}}),[n,c,d]);return k(a,{...s,disabled:o||l,onClick:u},i)}function bn(n){let{to:c,replace:t,...r}=n,i=g();return e(O,{...r,onClick:e=>{e.preventDefault(),i(c,{replace:t})}})}const xn=require("ajv-i18n/localize/zh"),yn={upload:function(n){const{widgets:c}=W(),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 Ye({url:n.options.endpoint,method:"post",data:c});return t}}};return e(c.upload,{...n,options:t})}},wn=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]=x(),[g,p]=x(!1),[f,v]=x(o),b=_((async(e,n)=>{try{if(p(!0),t){const{formData:n}=e;try{const e=await Ye({url:t,method:r,data:n});m(void 0),i&&await i(e)}catch(e){throw H.isAxiosError(e)&&m((e=>{const n=e.errors;return"string"==typeof n?{__errors:[n]}:G(n,(e=>({__errors:[e]})))})(e)),e}}else a&&await a(e,n)}finally{p(!1)}}),[t,r,a]),y=_((e=>{const{formData:n}=e;v(n),s&&s(e)}),[v,s]),w=_((e=>(e=e.map((e=>({keyword:e.name,dataPath:e.property,...e}))),xn(e),e)),[]),k=e(fn,{loading:g,type:"submit",variant:"primary",children:l});return"function"==typeof d&&(d=d({submit:k,loading:g})),e(Q,{ref:c,extraErrors:h,onSubmit:b,transformErrors:w,noHtml5Validate:!0,noValidate:!0,...u,formData:f,onChange:y,widgets:yn,children:d||e("div",{className:"col-12",children:k})})}));var _n,kn,zn,Cn,Sn;const Nn=o.div(_n||(_n=ee(["\n width: 100%;\n"]))),jn=o.div(kn||(kn=ee(["\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"]))),En=o.div(zn||(zn=ee(["\n margin-top: 24px;\n"]))),An=o.div(Cn||(Cn=ee(["\n font-size: 22px;\n line-height: 64px;\n height: 64px;\n"]))),Dn=o.div(Sn||(Sn=ee(["\n\n"])));function Fn(c){let{title:t,children:r,extra:i}=c;return n(Nn,{children:[e(jn,{children:n("div",{className:"container",children:[e(An,{children:t}),e(Dn,{children:i})]})}),e(En,{className:"container",children:r})]})}function In(){}function On(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}const Pn=function(n){let{indeterminate:c=!1,...t}=n;const r=C(null);return b((()=>{r.current&&(r.current.indeterminate=c)}),[c]),e("input",{ref:r,...t,className:"form-check-input",type:"checkbox"})};var Bn,Tn,Un,Ln,Mn,qn;const Hn=o(B)(Bn||(Bn=ee(["\n .rc-table-thead {\n border-top: none;\n }\n"]))),Kn={table:n=>e(Hn,{...n,className:"align-middle table-hover"})},Rn=o((function(n){let{total:c=0,onChange:t=In,defaultCurrent:r=1,defaultPageSize:i=10,className:o,...a}=n;const[s,l]=x(r),[d,u]=x(i);b((()=>{On(a.current)&&l(a.current)}),[a.current]),b((()=>{On(a.pageSize)&&u(a.pageSize)}),[a.pageSize]);const h=v((()=>Math.floor((c-1)/d)+1),[c,d]),m=_((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,k=null,z=null;if(h<=7)for(let n=1;n<=h;n+=1){const c=s===n;f.push(e(P.Item,{active:c,onClick:m(n),children:n},n))}else{z=e(P.Last,{onClick:m(h)},"last"),k=e(P.First,{onClick:m(1)},"first"),y=e(P.Prev,{onClick:m(g)},"prev"),w=e(P.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(P.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(k),c!==h&&f.push(z)}return e(P,{className:o,children:f})}))(Tn||(Tn=ee(["\n margin-bottom: 0;\n justify-content: flex-end;\n"])));function Vn(e){return"current_page"in e}const Gn=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]=x([]),[f,y]=x(a?{total:0,current:1,pageSize:10}:null),[w,k]=x(!0),[z,N]=x(""),j=_((async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};k(!0);try{let n;if("string"==typeof i){const c={q:z};f&&(c.page=e.page||f.current),n=await Ye({url:i,params:c})}else n=await i();a&&Vn(n)&&(y({total:n.total,current:n.current_page,pageSize:n.per_page}),n=n.data),p(n)}catch(e){}finally{k(!1)}}),[i,p,f,z]);b((()=>{j()}),[z]);const E=C({reload:j});b((()=>{E.current={reload:j}}),[j]),S(r,(()=>E.current));const[A]=function(n,c,t){const[r,i]=x((()=>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=_((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[_((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(Pn,{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(Pn,{checked:i,onChange:()=>{i?r.delete(t):r.add(t),s(new Set(r))}})}},...c]}),[t,n,r])]}(u,o,g),D=v((()=>A(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,A,E]),F=function(e,n,c){const t=C(e),r=C(Y(e,n,c));return b((()=>{t.current=e})),b((()=>{r.current=Y((function(){t.current(...arguments)}),n,c)}),[n,c]),r.current}((e=>{N(e.target.value)}),500),I=n(c,{children:[e(Re,{loading:w}),!1!==s&&n(Yn,{children:[e(Jn,{size:12,children:s&&s(E.current)}),n($n,{size:12,children:[d&&e(T.Control,{onChange:F,type:"search",placeholder:"Search..."}),e(Qn,{onClick:E.current.reload,children:e("i",{className:"bi bi-arrow-repeat"})})]})]}),e(X,{...m,rowKey:o,columns:D,components:Kn,data:g}),f&&e(Rn,{...f,onChange:e=>{j({page:e})}})]});return h?e(We,{children:I}):I})),Yn=o.div(Un||(Un=ee(["\n display: flex;\n justify-content: space-between;\n padding-bottom: 1rem;\n height: 48px;\n"]))),$n=o(on)(Ln||(Ln=ee(["\n\n"]))),Jn=o(on)(Mn||(Mn=ee(["\n\n"]))),Qn=o.span(qn||(qn=ee(["\n cursor: pointer;\n font-size: 20px;\n line-height: 1;\n\n &:hover {\n color: var(--bs-primary);\n }\n"]))),Wn=z(((t,r)=>{let{text:i,variant:o="primary",header:a=i,footer:s=!0,onOk:l,size:d,onShow:u,children:h}=t;const[m,g]=x(!1),[p,f]=x(!1),v=()=>g(!1);S(r,(()=>({close:v})));return n(c,{children:[e(O,{variant:o,onClick:()=>g(!0),children:i}),n(U,{size:d,show:m,onHide:v,onShow:u,children:[a&&e(U.Header,{closeButton:!0,children:e(U.Title,{as:"h5",children:a})}),e(U.Body,{children:h}),s&&n(U.Footer,{children:[e(O,{variant:"secondary",onClick:v,children:"取消"}),e(fn,{loading:p,variant:"primary",onClick:async()=>{if(l){f(!0);const e=await l();if(f(!1),!1===e)return}v()},children:"确定"})]})]})]})}));function Xn(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}=n;const g=C(null),p=C(null),f=_((async()=>{try{var e;return await(null===(e=g.current)||void 0===e?void 0:e.submit()),!0}catch{return!1}}),[]);return e(Wn,{ref:p,text:c,onOk:f,header:t,variant:l,size:m,children:e(wn,{ref:g,schema:r,uiSchema:i,action:o,method:a,formData:s,fields:h,onChange:u,onSuccess:d,children:e(N,{})})})}function Zn(e){let{manual:n,refreshDeps:c,...t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{execute:r,currentParams:i,error:o,...a}=Z((async n=>(e="string"==typeof e?{url:e}:e,await Ye({...e,...n}))),t);b((()=>{n||c||r()}),[]),b((()=>{c&&s()}),c);const s=_((()=>{i?r(...i):r()}),[r,i]);return{refresh:s,execute:r,...a}}let ec=0;function nc(){let{onHide:e,onShow:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[c,t]=x(!1),[r,i]=x("visible-".concat(ec)),o=_((()=>{t(!1),e&&e()}),[t,e]),a=_((()=>{i("visible-".concat(++ec))}),[i,ec]),s=_((()=>{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 cc(n){let{tooltip:c,children:t,placement:r="bottom"}=n;return e(L,{placement:r,overlay:e(M,{id:$(),children:c}),children:t})}export{cn as Access,We as Card,Fn as Content,Xe as Error,te as Footer,wn as Form,Ue as Header,bn as LinkButton,Re as Loader,fn as LoadingButton,ze as Message,Wn as ModalButton,Xn as ModalForm,pn as NumberFormat,vn as RequestButton,Oe as Result,Qe as Root,pe as SiderLayout,on as Space,mn as Steps,Gn as Table,cc as Tooltip,en as UserProvider,Ge as isRequestError,Ye as request,nc as useOverlayState,Zn as useRequest,nn 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/components/result.tsx","../src/images/logo.svg","../src/components/header.tsx","../src/components/dimmer.tsx","../src/components/loader.tsx","../src/request.ts","../src/components/root.tsx","../src/components/card.tsx","../src/components/error.tsx","../src/components/user-provider.tsx","../src/components/access.tsx","../src/components/space.tsx","../src/components/number-format.tsx","../src/components/loading-button.tsx","../src/components/request-button.tsx","../src/components/form.tsx","../src/components/content.tsx","../src/components/pagination.tsx","../src/components/table.tsx","../src/components/modal-button.tsx","../src/components/modal-form.tsx","../src/hooks/use-request.ts","../src/hooks/use-overlay-state.ts"],"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 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 menu: MenuData = {\r\n title,\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 { useMemo } from 'react';\r\nimport styled from 'styled-components';\r\nimport 'rc-menu/assets/index.css';\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 if (item.children.length > 0) {\r\n return <SubMenu title={item.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}>{item.title}</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 openKeys = 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\r\n return keys;\r\n }, [pathname]);\r\n\r\n const selectedKeys = useMemo(() => {\r\n return [...openKeys, pathname];\r\n }, [pathname, openKeys]);\r\n\r\n return <Container>\r\n <Sidebar>\r\n <Header>{title}</Header>\r\n <Menu mode='inline' motion={motion} defaultOpenKeys={openKeys} selectedKeys={selectedKeys}>\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: inherit;\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\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 }\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\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 { 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 logo from '../images/logo.svg';\r\nimport { Dropdown } from 'react-bootstrap';\r\nimport styled from 'styled-components';\r\nimport { PropsWithChildren, ReactNode } from 'react';\r\n\r\nconst Avatar = styled.a`\r\n cursor: pointer;\r\n`;\r\n\r\ninterface Props {\r\n menus: ReactNode;\r\n}\r\n\r\nexport default function Header({ children, menus }: PropsWithChildren<Props>) {\r\n\r\n return <Container className='navbar navbar-light bg-white border-bottom sticky-top'>\r\n <div className='container-fluid'>\r\n <a className='navbar-brand' href='https://www.topthink.com'>\r\n <img src={logo} height='30' />\r\n </a>\r\n {children}\r\n <div className='d-flex align-items-center'>\r\n <Dropdown navbar>\r\n <Dropdown.Toggle as={Avatar} className='nav-link'>\r\n <i className='bi bi-person-circle' />\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 </div>\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.header`\r\n height: 54px;\r\n`;\r\n","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\n\r\ninterface LoaderProps {\r\n loading?: boolean\r\n animation?: SpinnerProps['animation']\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 ...props\r\n}: PropsWithChildren<LoaderProps & Omit<SpinnerProps, 'animation'>>) {\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 return <Dimmer inverted active>\r\n <Spinner animation={animation} variant={variant} {...props} />\r\n {children}\r\n </Dimmer>;\r\n}\r\n","import axios, { AxiosRequestConfig } from 'axios';\r\nimport * as rax from 'retry-axios';\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\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.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.Authorization = `Bearer ${token}`;\r\n }\r\n return config;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\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 const { url } = data;\r\n if (url) {\r\n if (window.location.pathname !== '/logout') {\r\n sessionStorage.setItem('redirect_uri', window.location.pathname + window.location.search);\r\n }\r\n const redirectUri = window.location.origin + '/login';\r\n window.location.href = `${url}&redirect_uri=${encodeURIComponent(redirectUri)}`;\r\n }\r\n e.errors = 'Unauthorized';\r\n } else {\r\n let errors: Errors = {};\r\n if (status === 422 && typeof data === 'object') {\r\n for (let name in data) {\r\n errors[name] = data[name];\r\n }\r\n } else if ((typeof data === 'object') && ('message' in data)) {\r\n errors = data['message'];\r\n } else {\r\n errors = data;\r\n }\r\n e.errors = errors;\r\n }\r\n }\r\n }\r\n return Promise.reject(e);\r\n }\r\n);\r\n\r\nexport type Config = AxiosRequestConfig | string\r\n\r\nconst request = async function <T = any>(config: Config) {\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n const { data } = await axios.request<T>({\r\n ...config\r\n });\r\n\r\n return data;\r\n};\r\n\r\nexport default request;\r\n","import { PropsWithChildren, useEffect } from 'react';\r\nimport { BrowserRouter, Navigate, Route, Routes, useLocation } from 'react-router-dom';\r\nimport queryString from 'query-string';\r\nimport Loader from './loader';\r\nimport request from '../request';\r\n\r\nfunction Login() {\r\n\r\n const location = useLocation();\r\n\r\n const parsed = queryString.parse(location.hash.substr(1));\r\n\r\n sessionStorage.setItem('authorization', parsed.access_token as string);\r\n\r\n const redirectUri = sessionStorage.getItem('redirect_uri');\r\n if (redirectUri) {\r\n sessionStorage.removeItem('redirect_uri');\r\n }\r\n\r\n return <Navigate to={redirectUri || '/'} replace />;\r\n}\r\n\r\nfunction Logout() {\r\n\r\n useEffect(() => {\r\n request('/logout').catch(() => {\r\n sessionStorage.removeItem('authorization');\r\n });\r\n }, []);\r\n\r\n return <Loader />;\r\n}\r\n\r\nexport default function Root({ children }: PropsWithChildren<any>) {\r\n\r\n return <BrowserRouter>\r\n <Routes>\r\n <Route path='*' element={children} />\r\n <Route path='login' element={<Login />} />\r\n <Route path='logout' element={<Logout />} />\r\n </Routes>\r\n </BrowserRouter>;\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 React, { PropsWithChildren, useContext, useEffect, useState } from 'react';\r\nimport Loader from './loader';\r\n\r\nexport interface User {\r\n id: number;\r\n name: string;\r\n email: string;\r\n avatar: string;\r\n mobile: string;\r\n is_certified: boolean;\r\n roles: [];\r\n}\r\n\r\nexport const UserContext = React.createContext<[(User | null), ((user: User) => void)]>([null, () => {\r\n}]);\r\n\r\ninterface Props {\r\n user: User;\r\n}\r\n\r\nconst UserProvider = function({ children, user }: PropsWithChildren<Props>) {\r\n const [state, setState] = useState(user);\r\n\r\n useEffect(() => {\r\n setState(user);\r\n }, [user]);\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(): [User, ((user: User) => void)] {\r\n const [user, setUser] = useContext(UserContext);\r\n if (!user) {\r\n throw new Error('please use `useUser` in UserContext');\r\n }\r\n\r\n return [user, setUser];\r\n}\r\n\r\nexport default UserProvider;\r\n","import { ReactNode } from 'react';\r\nimport { intersection } from 'lodash';\r\nimport { User, useUser } from './user-provider';\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 return <Item size={size as number}>{child}</Item>;\r\n });\r\n\r\n return <Container>\r\n {items}\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div`\r\n display: inline-flex;\r\n align-items: center;\r\n`;\r\n\r\nconst Item = styled.div<{ size: number }>`\r\n margin-right: ${props => props.size}px;\r\n\r\n &:last-child {\r\n margin-right: 0;\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}\r\n\r\nexport default function NumberFormat({ 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 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, { Config } 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: Config;\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 JsonForm, { JsonFormProps, JsonFormType } from '@topthink/json-form';\r\nimport * as React from 'react';\r\nimport { forwardRef, ForwardRefExoticComponent, PropsWithoutRef, RefAttributes, useCallback, useState } 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 } 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}\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\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 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 try {\r\n const data = 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(data);\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 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 >\r\n {children || <div className='col-12'>\r\n <LoadingButton loading={loading} type='submit' variant='primary'>提交</LoadingButton>\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\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\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 return <Container>\r\n <Header>\r\n <div className='container'>\r\n <Title>{title}</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","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 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 { Table as BsTable, TableProps as BsTableProps } from 'react-bootstrap';\r\nimport {\r\n forwardRef,\r\n ForwardRefExoticComponent,\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\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\nexport interface PaginationType<T = any> {\r\n total: number;\r\n current_page: number;\r\n per_page: number;\r\n last_page: number;\r\n data: T[];\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 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;\r\n}\r\n\r\ntype Params = {\r\n page?: number;\r\n sortField?: string;\r\n sortOrder?: number;\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 { source, rowKey = 'id', paginate = true, toolBarRender, columns = [], ...props },\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\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: any = {};\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]);\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, []);\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 const customColumns = useMemo(() => {\r\n return 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, action]);\r\n\r\n const handlePageChange = useCallback((current: number) => {\r\n fetchData({\r\n page: current\r\n });\r\n }, []);\r\n\r\n return <Card>\r\n <Loader loading={loading} />\r\n <Header>\r\n <LeftTools>\r\n {toolBarRender && toolBarRender(action.current)}\r\n </LeftTools>\r\n <RightTools>\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 </Card>;\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`;\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 {\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n PropsWithChildren,\r\n PropsWithoutRef,\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: string;\r\n variant?: ButtonProps['variant'];\r\n header?: string;\r\n onOk?: () => any;\r\n footer?: boolean;\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 = 'primary',\r\n header = text,\r\n footer = true,\r\n onOk,\r\n size,\r\n children\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 return <>\r\n <Button variant={variant} onClick={handleShow}>{text}</Button>\r\n <Modal size={size} show={show} onHide={handleClose}>\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 确定\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, ModalType } 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'> &\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}: ModalFormProps<T>) {\r\n\r\n const form = useRef<FormType>(null);\r\n const modal = useRef<ModalType>(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 ref={modal} 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 <Fragment />\r\n </Form>\r\n </ModalButton>;\r\n}\r\n","import { useAsyncCallback, UseAsyncCallbackOptions } from 'react-async-hook';\r\nimport request, { Config } from '../request';\r\nimport { DependencyList, useCallback, useEffect } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\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: Config, {\r\n manual,\r\n refreshDeps,\r\n ...options\r\n}: UseRequestOptions<T> = {}) {\r\n const { 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\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 return {\r\n refresh,\r\n execute,\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"],"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","children","_route$meta3","hideChildrenInMenu","length","push","renderMenuItems","items","map","item","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","openKeys","keys","split","reduce","pre","curr","join","selectedKeys","_jsxs","Container","Sidebar","Header","Menu","mode","defaultOpenKeys","Content","Main","div","nav","main","RcMenu","CustomSwal","withReactContent","Swal","defaultOptions","confirmButtonText","cancelButtonText","Message","confirm","async","isConfirmed","fire","icon","showCancelButton","options","error","toast","position","timer","showConfirmButton","Icon","Title","Extra","IconMap","success","info","warning","Result","status","extra","Avatar","a","href","src","Dropdown","navbar","Toggle","as","header","Dimmer","props","active","inverted","Loader","loading","variant","animation","Spinner","rax","attach","axios","defaults","raxConfig","retryDelay","backoffType","shouldRetry","err","config","method","toUpperCase","response","baseURL","interceptors","request","use","token","sessionStorage","getItem","headers","Authorization","Promise","reject","data","location","window","undefined","e","isAxiosError","url","setItem","search","redirectUri","origin","encodeURIComponent","errors","name","Login","parsed","queryString","parse","hash","substr","access_token","removeItem","Navigate","Logout","useEffect","catch","Root","BrowserRouter","Routes","Route","element","Card","BsCard","classNames","Error","Alert","entries","_ref2","UserContext","React","createContext","UserProvider","user","state","setState","useState","Provider","useUser","setUser","useContext","Access","require","fallback","passed","intersection","roles","Space","size","small","middle","large","Children","child","Item","NumberFormat","locale","currency","formatter","style","minimumFractionDigits","Intl","format","LoadingButton","Button","disabled","RequestButton","onSuccess","fetching","setFetching","handleClick","useCallback","preventDefault","text","result","values","createElement","onClick","localize","Form","forwardRef","ref","action","formData","onSubmit","onChange","extraErrors","setExtraErrors","setLoading","setData","handleSubmit","nativeEvent","__errors","mapValues","toExtraErrors","handleChange","transformErrors","keyword","dataPath","property","JsonForm","noHtml5Validate","noValidate","type","Body","noop","isInteger","isFinite","Math","floor","CustomTable","BsTable","components","table","CustomPagination","total","defaultCurrent","defaultPageSize","current","setCurrent","pageSize","setPageSize","allPages","p","prevPage","nextPage","pagerList","jumpPrev","jumpNext","firstPager","lastPager","i","BsPagination","Last","First","Prev","Next","left","max","right","min","pageBufferSize","unshift","isPagination","Table","source","rowKey","paginate","toolBarRender","columns","pagination","setPagination","fetchData","params","page","current_page","per_page","useRef","reload","useImperativeHandle","customColumns","column","customColumn","render","defaultRender","record","index","handlePageChange","LeftTools","RightTools","Action","RcTable","span","ModalButton","onOk","show","setShow","handleClose","close","Modal","onHide","closeButton","ModalForm","schema","uiSchema","fields","form","modal","handleOk","_form$current","submit","Fragment","useRequest","manual","refreshDeps","execute","currentParams","others","useAsyncCallback","refresh","id","useOverlayState","onShow","visible","setVisible","key","setKey","hide","exit","onExited"],"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/components/result.tsx","../src/images/logo.svg","../src/components/header.tsx","../src/components/dimmer.tsx","../src/components/loader.tsx","../src/request.ts","../src/components/root.tsx","../src/components/card.tsx","../src/components/error.tsx","../src/components/user-provider.tsx","../src/components/access.tsx","../src/components/space.tsx","../src/images/step_check.svg","../src/components/steps.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/pagination.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 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 menu: MenuData = {\r\n title,\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 { useMemo } from 'react';\r\nimport styled from 'styled-components';\r\nimport 'rc-menu/assets/index.css';\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 if (item.children.length > 0) {\r\n return <SubMenu title={item.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}>{item.title}</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 openKeys = 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\r\n return keys;\r\n }, [pathname]);\r\n\r\n const selectedKeys = useMemo(() => {\r\n return [...openKeys, pathname];\r\n }, [pathname, openKeys]);\r\n\r\n return <Container>\r\n <Sidebar>\r\n <Header>{title}</Header>\r\n <Menu mode='inline' motion={motion} defaultOpenKeys={openKeys} selectedKeys={selectedKeys}>\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 }\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 }\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 { 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 logo from '../images/logo.svg';\r\nimport { Dropdown } from 'react-bootstrap';\r\nimport styled from 'styled-components';\r\nimport { PropsWithChildren, ReactNode } from 'react';\r\n\r\nconst Avatar = styled.a`\r\n cursor: pointer;\r\n`;\r\n\r\ninterface Props {\r\n menus: ReactNode;\r\n}\r\n\r\nexport default function Header({ children, menus }: PropsWithChildren<Props>) {\r\n\r\n return <Container className='navbar navbar-light bg-white border-bottom sticky-top'>\r\n <div className='container-fluid'>\r\n <a className='navbar-brand' href='https://www.topthink.com'>\r\n <img src={logo} height='30' />\r\n </a>\r\n {children}\r\n <div className='d-flex align-items-center'>\r\n <Dropdown navbar>\r\n <Dropdown.Toggle as={Avatar} className='nav-link'>\r\n <i className='bi bi-person-circle' />\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 </div>\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.header`\r\n height: 54px;\r\n`;\r\n","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","import axios, { AxiosRequestConfig, AxiosInstance } from 'axios';\r\nimport * as rax from 'retry-axios';\r\nimport queryString from 'query-string';\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\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.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.Authorization = `Bearer ${token}`;\r\n }\r\n return config;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\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 const { url } = data;\r\n if (url) {\r\n if (window.location.pathname !== '/logout') {\r\n sessionStorage.setItem('redirect_uri', window.location.pathname + window.location.search);\r\n }\r\n const redirectUri = window.location.origin + '/login';\r\n\r\n window.location.href = queryString.stringifyUrl({ url, query: { redirect_uri: redirectUri } });\r\n }\r\n e.errors = 'Unauthorized';\r\n } else {\r\n let errors: Errors = {};\r\n if (status === 422 && typeof data === 'object') {\r\n for (let name in data) {\r\n errors[name] = data[name];\r\n }\r\n } else if ((typeof data === 'object') && ('message' in data)) {\r\n errors = data['message'];\r\n } else {\r\n errors = data;\r\n }\r\n e.errors = errors;\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\nexport default request;\r\n","import { PropsWithChildren, useEffect } from 'react';\r\nimport { BrowserRouter, Navigate, Route, Routes, useLocation } from 'react-router-dom';\r\nimport queryString from 'query-string';\r\nimport Loader from './loader';\r\nimport request from '../request';\r\n\r\nfunction Login() {\r\n\r\n const location = useLocation();\r\n\r\n const parsed = queryString.parse(location.hash.substr(1));\r\n\r\n sessionStorage.setItem('authorization', parsed.access_token as string);\r\n\r\n const redirectUri = sessionStorage.getItem('redirect_uri');\r\n if (redirectUri) {\r\n sessionStorage.removeItem('redirect_uri');\r\n }\r\n\r\n return <Navigate to={redirectUri || '/'} replace />;\r\n}\r\n\r\nfunction Logout() {\r\n\r\n useEffect(() => {\r\n request('/logout').catch(() => {\r\n sessionStorage.removeItem('authorization');\r\n });\r\n }, []);\r\n\r\n return <Loader />;\r\n}\r\n\r\nexport default function Root({ children }: PropsWithChildren<any>) {\r\n\r\n return <BrowserRouter>\r\n <Routes>\r\n <Route path='*' element={children} />\r\n <Route path='login' element={<Login />} />\r\n <Route path='logout' element={<Logout />} />\r\n </Routes>\r\n </BrowserRouter>;\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 React, { PropsWithChildren, useContext, useEffect, useState } from 'react';\r\nimport Loader from './loader';\r\nimport { User } from '../utils/types';\r\n\r\nexport const UserContext = React.createContext<[(User | null), ((user: User) => void)]>([null, () => {\r\n}]);\r\n\r\ninterface Props {\r\n user: User;\r\n}\r\n\r\nconst UserProvider = function({ children, user }: PropsWithChildren<Props>) {\r\n const [state, setState] = useState(user);\r\n\r\n useEffect(() => {\r\n setState(user);\r\n }, [user]);\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(): [User, ((user: User) => void)] {\r\n const [user, setUser] = useContext(UserContext);\r\n if (!user) {\r\n throw new Error('please use `useUser` in UserContext');\r\n }\r\n\r\n return [user, setUser];\r\n}\r\n\r\nexport default UserProvider;\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 { useMemo } from 'react';\r\n\r\ninterface Props {\r\n value: number;\r\n currency?: boolean;\r\n locale?: string;\r\n}\r\n\r\nexport default function NumberFormat({ 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 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\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\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 return <Container>\r\n <Header>\r\n <div className='container'>\r\n <Title>{title}</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","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 { 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`;\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 forwardRef,\r\n ForwardRefExoticComponent,\r\n PropsWithChildren,\r\n PropsWithoutRef,\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: string;\r\n variant?: ButtonProps['variant'];\r\n header?: string;\r\n onOk?: () => any;\r\n footer?: boolean;\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 = 'primary',\r\n header = text,\r\n footer = true,\r\n onOk,\r\n size,\r\n onShow,\r\n children\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 return <>\r\n <Button variant={variant} onClick={handleShow}>{text}</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 确定\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, ModalType } 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'> &\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}: ModalFormProps<T>) {\r\n\r\n const form = useRef<FormType>(null);\r\n const modal = useRef<ModalType>(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 ref={modal} 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 <Fragment />\r\n </Form>\r\n </ModalButton>;\r\n}\r\n","import { useAsyncCallback, UseAsyncCallbackOptions } from 'react-async-hook';\r\nimport request, { RequestConfig } from '../request';\r\nimport { DependencyList, useCallback, useEffect } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\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 const { 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\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 return {\r\n refresh,\r\n execute,\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","children","_route$meta3","hideChildrenInMenu","length","push","renderMenuItems","items","map","item","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","openKeys","keys","split","reduce","pre","curr","join","selectedKeys","_jsxs","Container","Sidebar","Header","Menu","mode","defaultOpenKeys","Content","Main","div","nav","main","RcMenu","CustomSwal","withReactContent","Swal","defaultOptions","confirmButtonText","cancelButtonText","Message","confirm","async","isConfirmed","fire","icon","showCancelButton","options","error","toast","position","timer","showConfirmButton","Icon","Title","Extra","IconMap","success","info","warning","Result","status","extra","Avatar","a","href","src","Dropdown","navbar","Toggle","as","header","Dimmer","props","active","inverted","Loader","loading","variant","animation","wrap","Spinner","Wrap","rax","attach","axios","defaults","raxConfig","retryDelay","backoffType","shouldRetry","err","config","method","toUpperCase","response","baseURL","interceptors","request","use","token","sessionStorage","getItem","headers","Authorization","Promise","reject","data","location","window","undefined","e","isAxiosError","url","setItem","search","redirectUri","origin","queryString","stringifyUrl","query","redirect_uri","errors","name","isRequestError","paramsSerializer","params","stringify","sort","skipNull","skipEmptyString","Login","parsed","parse","hash","substr","access_token","removeItem","Navigate","Logout","useEffect","catch","Root","BrowserRouter","Routes","Route","element","Card","BsCard","classNames","Error","Alert","entries","_ref2","UserContext","React","createContext","UserProvider","user","state","setState","useState","Provider","useUser","setUser","useContext","Access","require","fallback","passed","intersection","roles","Space","size","small","middle","large","Children","child","Item","_path","_extends","assign","target","i","arguments","source","key","prototype","hasOwnProperty","call","apply","this","SvgStepCheck","createElement","viewBox","xmlns","width","fill","d","Steps","CustomRcSteps","icons","finish","CheckIcon","Step","RcSteps","NumberFormat","locale","currency","formatter","style","minimumFractionDigits","Intl","format","LoadingButton","Button","disabled","RequestButton","onSuccess","fetching","setFetching","handleClick","useCallback","preventDefault","text","result","values","onClick","LinkButton","navigate","useNavigate","localize","widgets","upload","getRegistry","file","onUpload","Function","endpoint","FormData","set","Form","forwardRef","ref","action","formData","onSubmit","onChange","submitText","extraErrors","setExtraErrors","setLoading","setData","handleSubmit","nativeEvent","__errors","mapValues","toExtraErrors","handleChange","transformErrors","keyword","dataPath","property","submit","type","JsonForm","noHtml5Validate","noValidate","Body","noop","isInteger","isFinite","Math","floor","Checkbox","indeterminate","useRef","current","CustomTable","BsTable","components","table","CustomPagination","total","defaultCurrent","defaultPageSize","setCurrent","pageSize","setPageSize","allPages","p","prevPage","nextPage","pagerList","jumpPrev","jumpNext","firstPager","lastPager","BsPagination","Last","First","Prev","Next","left","max","right","min","pageBufferSize","unshift","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","forEach","delete","add","align","render","useSelection","customColumns","column","customColumn","defaultRender","index","handleSearch","callback","wait","callbackRef","debouncedCallbackRef","debounce","useDebounce","LeftTools","RightTools","Control","placeholder","Action","RcTable","span","ModalButton","onOk","onShow","show","setShow","handleClose","close","Modal","onHide","closeButton","ModalForm","schema","uiSchema","fields","form","modal","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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@topthink/common",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.23",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"build": "rollup -c --environment NODE_ENV:production",
|
|
6
6
|
"build:dev": "rollup -c",
|
|
@@ -15,14 +15,15 @@
|
|
|
15
15
|
"scss"
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@topthink/bootstrap": "^1.0.
|
|
19
|
-
"@topthink/json-form": "^1.0.
|
|
18
|
+
"@topthink/bootstrap": "^1.0.9",
|
|
19
|
+
"@topthink/json-form": "^1.0.8",
|
|
20
20
|
"@types/lodash": "^4.14.161",
|
|
21
21
|
"ajv-i18n": "^4.0.0",
|
|
22
22
|
"axios": "^0.21.1",
|
|
23
23
|
"classnames": "^2.3.1",
|
|
24
24
|
"query-string": "^7.0.1",
|
|
25
25
|
"rc-menu": "^9.0.12",
|
|
26
|
+
"rc-steps": "^4.1.4",
|
|
26
27
|
"rc-table": "^7.17.1",
|
|
27
28
|
"react-async-hook": "^3.6.2",
|
|
28
29
|
"retry-axios": "^2.4.0",
|
|
@@ -49,6 +50,7 @@
|
|
|
49
50
|
"@rollup/plugin-commonjs": "^19.0.0",
|
|
50
51
|
"@rollup/plugin-image": "^2.0.6",
|
|
51
52
|
"@rollup/plugin-node-resolve": "^13.0.0",
|
|
53
|
+
"@svgr/rollup": "^6.2.1",
|
|
52
54
|
"@types/react": "^17.0.0",
|
|
53
55
|
"@types/react-dom": "^17.0.0",
|
|
54
56
|
"@types/styled-components": "^5.1.11",
|
|
@@ -64,5 +66,5 @@
|
|
|
64
66
|
},
|
|
65
67
|
"author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
|
|
66
68
|
"license": "MIT",
|
|
67
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "048feb9fd954a82d67fad6b2cb6b3dd43d286c8a"
|
|
68
70
|
}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { JsonFormProps, JsonFormType } from '@topthink/json-form';
|
|
2
|
-
import { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react';
|
|
2
|
+
import { ForwardRefExoticComponent, PropsWithoutRef, ReactNode, RefAttributes } from 'react';
|
|
3
3
|
import { Method } from 'axios';
|
|
4
4
|
export interface FormProps<T = any> extends JsonFormProps<T> {
|
|
5
5
|
onSuccess?: (data: any) => void;
|
|
6
6
|
method?: Method;
|
|
7
|
+
children?: ReactNode | ((props: {
|
|
8
|
+
submit: ReactNode;
|
|
9
|
+
loading: boolean;
|
|
10
|
+
}) => ReactNode);
|
|
11
|
+
submitText?: string;
|
|
7
12
|
}
|
|
8
13
|
export interface FormType extends JsonFormType {
|
|
9
14
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ButtonProps } from 'react-bootstrap';
|
|
3
|
+
import { LinkProps } from 'react-router-dom';
|
|
4
|
+
interface Props extends ButtonProps, Pick<LinkProps, 'to' | 'replace'> {
|
|
5
|
+
}
|
|
6
|
+
export default function LinkButton({ to, replace, ...props }: Props): JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -3,6 +3,7 @@ import { SpinnerProps } from 'react-bootstrap';
|
|
|
3
3
|
interface LoaderProps {
|
|
4
4
|
loading?: boolean;
|
|
5
5
|
animation?: SpinnerProps['animation'];
|
|
6
|
+
wrap?: boolean;
|
|
6
7
|
}
|
|
7
|
-
export default function Loader({ loading, children, variant, animation, ...props }: PropsWithChildren<LoaderProps & Omit<SpinnerProps, 'animation'>>): JSX.Element | null;
|
|
8
|
+
export default function Loader({ loading, children, variant, animation, wrap, ...props }: PropsWithChildren<LoaderProps & Omit<SpinnerProps, 'animation'>>): JSX.Element | null;
|
|
8
9
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ButtonProps } from 'react-bootstrap';
|
|
2
|
-
import {
|
|
2
|
+
import { RequestConfig } from '../request';
|
|
3
3
|
import { ElementType } from 'react';
|
|
4
4
|
import { AxiosRequestConfig } from 'axios';
|
|
5
5
|
interface Props extends Omit<ButtonProps, 'as'> {
|
|
6
|
-
url:
|
|
6
|
+
url: RequestConfig;
|
|
7
7
|
method?: AxiosRequestConfig['method'];
|
|
8
8
|
confirm?: string;
|
|
9
9
|
onSuccess?: (result: any) => void;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import RcSteps from 'rc-steps';
|
|
2
|
+
import 'rc-steps/assets/index.css';
|
|
3
|
+
import { ComponentProps } from 'react';
|
|
4
|
+
declare function Steps(props: ComponentProps<typeof RcSteps>): JSX.Element;
|
|
5
|
+
declare namespace Steps {
|
|
6
|
+
var Step: typeof import("rc-steps").Step;
|
|
7
|
+
}
|
|
8
|
+
export default Steps;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TableProps as RcTableProps } from 'rc-table/lib/Table';
|
|
2
2
|
import { ColumnGroupType, ColumnType as BsColumnType, RenderedCell } from 'rc-table/lib/interface';
|
|
3
|
-
import { ForwardRefExoticComponent, PropsWithChildren, PropsWithoutRef, ReactNode, RefAttributes } from 'react';
|
|
3
|
+
import { ForwardRefExoticComponent, Key, PropsWithChildren, PropsWithoutRef, ReactNode, RefAttributes } from 'react';
|
|
4
4
|
export interface TableType {
|
|
5
5
|
reload: () => void;
|
|
6
6
|
}
|
|
@@ -13,18 +13,18 @@ interface ColumnType<RecordType> extends Omit<BsColumnType<RecordType>, 'render'
|
|
|
13
13
|
}) => ReactNode | RenderedCell<RecordType>;
|
|
14
14
|
}
|
|
15
15
|
export declare type Columns<RecordType = any> = (ColumnGroupType<RecordType> | ColumnType<RecordType>)[];
|
|
16
|
-
export interface
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
per_page: number;
|
|
20
|
-
last_page: number;
|
|
21
|
-
data: T[];
|
|
16
|
+
export interface TableRowSelection<RecordType = any> {
|
|
17
|
+
selectedRowKeys?: Key[];
|
|
18
|
+
onChange?: (selectedRowKeys: Key[], selectedRows: RecordType[]) => void;
|
|
22
19
|
}
|
|
23
20
|
export interface TableProps<RecordType = any> extends Omit<RcTableProps<RecordType>, 'children' | 'columns'> {
|
|
24
21
|
source: string | (() => Promise<any>);
|
|
25
22
|
paginate?: boolean;
|
|
26
23
|
columns: Columns<RecordType>;
|
|
27
|
-
toolBarRender?: (action: TableType) => ReactNode;
|
|
24
|
+
toolBarRender?: ((action: TableType) => ReactNode) | false;
|
|
25
|
+
search?: boolean | string;
|
|
26
|
+
rowSelection?: TableRowSelection<RecordType>;
|
|
27
|
+
card?: boolean;
|
|
28
28
|
}
|
|
29
29
|
declare type CustomTableType<T = any> = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<TableProps<T>>> & RefAttributes<TableType>>;
|
|
30
30
|
declare const Table: CustomTableType;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { OverlayTriggerProps } from 'react-bootstrap';
|
|
3
|
+
interface TooltipProps {
|
|
4
|
+
tooltip: string;
|
|
5
|
+
children: OverlayTriggerProps['children'];
|
|
6
|
+
placement?: OverlayTriggerProps['placement'];
|
|
7
|
+
}
|
|
8
|
+
export default function Tooltip({ tooltip, children, placement }: TooltipProps): JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import React, { PropsWithChildren } from 'react';
|
|
2
|
-
|
|
3
|
-
id: number;
|
|
4
|
-
name: string;
|
|
5
|
-
email: string;
|
|
6
|
-
avatar: string;
|
|
7
|
-
mobile: string;
|
|
8
|
-
is_certified: boolean;
|
|
9
|
-
roles: [];
|
|
10
|
-
}
|
|
2
|
+
import { User } from '../utils/types';
|
|
11
3
|
export declare const UserContext: React.Context<[User | null, (user: User) => void]>;
|
|
12
4
|
interface Props {
|
|
13
5
|
user: User;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { UseAsyncCallbackOptions } from 'react-async-hook';
|
|
2
|
-
import {
|
|
2
|
+
import { RequestConfig } from '../request';
|
|
3
3
|
import { DependencyList } from 'react';
|
|
4
4
|
import { AxiosRequestConfig } from 'axios';
|
|
5
5
|
declare type UseRequestOptions<T> = {
|
|
6
6
|
manual?: boolean;
|
|
7
7
|
refreshDeps?: DependencyList;
|
|
8
8
|
} & UseAsyncCallbackOptions<T>;
|
|
9
|
-
export default function useRequest<T = any>(config:
|
|
9
|
+
export default function useRequest<T = any>(config: RequestConfig, { manual, refreshDeps, ...options }?: UseRequestOptions<T>): {
|
|
10
10
|
status: import("react-async-hook").AsyncStateStatus;
|
|
11
11
|
loading: boolean;
|
|
12
12
|
result: T | undefined;
|
package/types/index.d.ts
CHANGED
|
@@ -18,9 +18,11 @@ export { default as Card } from './components/card';
|
|
|
18
18
|
export { default as Error } from './components/error';
|
|
19
19
|
export { default as Access } from './components/access';
|
|
20
20
|
export { default as Space } from './components/space';
|
|
21
|
+
export { default as Steps } from './components/steps';
|
|
21
22
|
export { default as NumberFormat } from './components/number-format';
|
|
22
23
|
export { default as LoadingButton } from './components/loading-button';
|
|
23
24
|
export { default as RequestButton } from './components/request-button';
|
|
25
|
+
export { default as LinkButton } from './components/link-button';
|
|
24
26
|
export { default as Form, FormProps, FormType } from './components/form';
|
|
25
27
|
export { default as Content } from './components/content';
|
|
26
28
|
export { default as Table, TableProps, Columns, TableType } from './components/table';
|
|
@@ -28,6 +30,8 @@ export { default as ModalForm, ModalFormProps } from './components/modal-form';
|
|
|
28
30
|
export { default as ModalButton, ModalType, ModalButtonProps } from './components/modal-button';
|
|
29
31
|
export { default as useRequest } from './hooks/use-request';
|
|
30
32
|
export { default as useOverlayState } from './hooks/use-overlay-state';
|
|
31
|
-
export { default as UserProvider, useUser
|
|
32
|
-
export { default as
|
|
33
|
+
export { default as UserProvider, useUser } from './components/user-provider';
|
|
34
|
+
export { default as Tooltip } from './components/tooltip';
|
|
35
|
+
export { default as request, RequestConfig, RequestInstance, isRequestError } from './request';
|
|
36
|
+
export { PaginationType, User } from './utils/types';
|
|
33
37
|
export { UiSchema as FormUiSchema, Schema as FormSchema, WidgetProps as FormWidgetProps, Widget as FormWidget, IChangeEvent as FormChangeEvent, ISubmitEvent as FormSubmitEvent } from '@topthink/json-form';
|
package/types/request.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AxiosRequestConfig } from 'axios';
|
|
1
|
+
import { AxiosRequestConfig, AxiosInstance } from 'axios';
|
|
2
2
|
export declare type Errors = string | {
|
|
3
3
|
[key: string]: string;
|
|
4
4
|
};
|
|
@@ -7,6 +7,8 @@ declare module 'axios' {
|
|
|
7
7
|
errors: Errors;
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
|
-
export declare type
|
|
11
|
-
declare
|
|
10
|
+
export declare type RequestConfig = AxiosRequestConfig | string;
|
|
11
|
+
export declare type RequestInstance = AxiosInstance;
|
|
12
|
+
export declare const isRequestError: (payload: any) => payload is import("axios").AxiosError<any>;
|
|
13
|
+
declare const request: <T = any>(config: RequestConfig) => Promise<T>;
|
|
12
14
|
export default request;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface PaginationType<T = any> {
|
|
2
|
+
total: number;
|
|
3
|
+
current_page: number;
|
|
4
|
+
per_page: number;
|
|
5
|
+
last_page: number;
|
|
6
|
+
data: T[];
|
|
7
|
+
}
|
|
8
|
+
export interface User {
|
|
9
|
+
id: number;
|
|
10
|
+
name: string;
|
|
11
|
+
email: string;
|
|
12
|
+
avatar: string;
|
|
13
|
+
mobile: string;
|
|
14
|
+
is_certified: boolean;
|
|
15
|
+
is_enterprise: boolean;
|
|
16
|
+
roles: [];
|
|
17
|
+
}
|