@topthink/common 1.0.8 → 1.0.12

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 CHANGED
@@ -1,4 +1,4 @@
1
- import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMenu as r,MenuItem as n}from"rc-menu";import s from"styled-components";import{useRoutes as a,useLocation as o,Link as d,BrowserRouter as l,Routes as g,Route as h,Navigate as u}from"react-router-dom";import m,{useMemo as v,useEffect as p,useContext as f,Children as b,useState as x,useCallback as y,createElement as w,forwardRef as _,useRef as j,useImperativeHandle as O,Fragment as k}from"react";import"rc-menu/assets/index.css";import N from"sweetalert2/dist/sweetalert2.js";import z from"sweetalert2-react-content";import{Dropdown as C,Spinner as S,Card as $,Alert as F,Button as D,Form as T,ButtonGroup as q,Pagination as M,Table as E,Modal as I}from"react-bootstrap";import B from"query-string";import P from"axios";import*as A from"retry-axios";import{intersection as L,mapValues as R}from"lodash";import{utils as U,withTheme as H}from"@rjsf/core";import K from"rc-table";import{useAsyncCallback as G}from"react-async-hook";const V=s.footer`
1
+ import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMenu as r,MenuItem as n}from"rc-menu";import s from"styled-components";import{useRoutes as o,useLocation as a,Link as l,BrowserRouter as d,Routes as g,Route as h,Navigate as m}from"react-router-dom";import v,{useMemo as u,useEffect as p,useContext as f,Children as b,useState as x,useCallback as y,createElement as _,forwardRef as w,useRef as j,useImperativeHandle as z,Fragment as O}from"react";import"rc-menu/assets/index.css";import k from"sweetalert2/dist/sweetalert2.js";import C from"sweetalert2-react-content";import{Dropdown as N,Spinner as S,Card as A,Alert as D,Button as E,Pagination as $,Table as I,Modal as P}from"react-bootstrap";import B from"query-string";import F from"axios";import*as L from"retry-axios";import{intersection as M,mapValues as T}from"lodash";import q from"@topthink/json-form";import H from"rc-table";import{useAsyncCallback as U}from"react-async-hook";const K=s.footer`
2
2
  background-color: #505050;
3
3
  color: #9f9f9f;
4
4
  padding: 65px 0 30px 0;
@@ -6,11 +6,11 @@ import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMen
6
6
  .container {
7
7
  padding: 0 100px;
8
8
  }
9
- `,W=s.div`
9
+ `,R=s.div`
10
10
  display: flex;
11
11
  justify-content: space-between;
12
12
  align-items: center;
13
- `,Y=s.ul`
13
+ `,V=s.ul`
14
14
  display: flex;
15
15
  list-style: none;
16
16
  margin: 0;
@@ -25,14 +25,14 @@ import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMen
25
25
  font-size: 20px;
26
26
  }
27
27
  }
28
- `,J=s.div`
28
+ `,G=s.div`
29
29
  text-align: center;
30
30
  margin-top: 75px;
31
- `;function Q(){return c(V,{children:e("div",Object.assign({className:"container"},{children:[e(W,{children:[c("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:%239f9f9f%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:"40"},void 0),e(Y,{children:[c("li",{children:c("a",Object.assign({href:"#"},{children:"关于我们"}),void 0)},void 0),c("li",{children:c("a",Object.assign({href:"#"},{children:"联系我们"}),void 0)},void 0),c("li",{children:c("a",Object.assign({href:"#"},{children:"加入我们"}),void 0)},void 0),c("li",{children:c("a",Object.assign({href:"#"},{children:"合作伙伴"}),void 0)},void 0)]},void 0)]},void 0),c(J,{children:"© 2021 上海顶想信息科技有限公司 沪ICP备12007941号-1"},void 0)]}),void 0)},void 0)}const X=(c,e="/")=>{const i=[];for(const s of c){var t,r,n;if(null!==(t=s.meta)&&void 0!==t&&t.hideInMenu)continue;const c=null===(r=s.meta)||void 0===r?void 0:r.title;if(!c)continue;let a=s.path||"";a=`${e}/${a}`,a=a.replace(/\/+/,"/").replace(/\/$/,"");const o={title:c,path:a,children:[]};null!==(n=s.meta)&&void 0!==n&&n.hideChildrenInMenu||s.children&&s.children.length>0&&(o.children=X(s.children,a)),i.push(o)}return i};const Z=s.div`
31
+ `;function Y(){return c(K,{children:e("div",Object.assign({className:"container"},{children:[e(R,{children:[c("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:%239f9f9f%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:"40"},void 0),e(V,{children:[c("li",{children:c("a",Object.assign({href:"#"},{children:"关于我们"}),void 0)},void 0),c("li",{children:c("a",Object.assign({href:"#"},{children:"联系我们"}),void 0)},void 0),c("li",{children:c("a",Object.assign({href:"#"},{children:"加入我们"}),void 0)},void 0),c("li",{children:c("a",Object.assign({href:"#"},{children:"合作伙伴"}),void 0)},void 0)]},void 0)]},void 0),c(G,{children:"© 2021 上海顶想信息科技有限公司 沪ICP备12007941号-1"},void 0)]}),void 0)},void 0)}const J=(c,e="/")=>{const i=[];for(const s of c){var t,r,n;if(null!==(t=s.meta)&&void 0!==t&&t.hideInMenu)continue;const c=null===(r=s.meta)||void 0===r?void 0:r.title;if(!c)continue;let o=s.path||"";o=`${e}/${o}`,o=o.replace(/\/+/,"/").replace(/\/$/,"");const a={title:c,path:o,children:[]};null!==(n=s.meta)&&void 0!==n&&n.hideChildrenInMenu||s.children&&s.children.length>0&&(a.children=J(s.children,o)),i.push(a)}return i};const Q=s.div`
32
32
  display: flex;
33
33
  flex-wrap: nowrap;
34
34
  width: 100%;
35
- `,cc=s.nav`
35
+ `,W=s.nav`
36
36
  position: fixed;
37
37
  top: 0;
38
38
  bottom: 0;
@@ -42,18 +42,18 @@ import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMen
42
42
  border-right: 1px solid #e3e3e3;
43
43
  width: 230px;
44
44
  background-color: #f5f5f5;
45
- `,ec=s.div`
45
+ `,X=s.div`
46
46
  padding-top: 10px;
47
47
  height: 54px;
48
48
  line-height: 44px;
49
49
  text-indent: 24px;
50
- `,ic=s.div`
50
+ `,Z=s.div`
51
51
  margin-left: 230px;
52
52
  flex: 1;
53
- `,tc=s.main`
53
+ `,cc=s.main`
54
54
  min-height: calc(100vh - 60px);
55
55
  position: relative;
56
- `,rc=s(t)`
56
+ `,ec=s(t)`
57
57
  border: none;
58
58
  box-shadow: none;
59
59
  padding: 10px 0;
@@ -73,9 +73,19 @@ import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMen
73
73
  }
74
74
 
75
75
  .rc-menu-sub {
76
- padding: 10px 0;
77
76
  background-color: #eee;
78
- border-top: 1px solid #e6e6e6;
77
+ border-top: 1px solid #eee;
78
+ border-bottom: 1px solid #eee;
79
+
80
+ & > li {
81
+ &:first-child {
82
+ margin-top: 4px;
83
+ }
84
+
85
+ &:last-child {
86
+ margin-bottom: 4px;
87
+ }
88
+ }
79
89
 
80
90
  .rc-menu-item-selected {
81
91
  background-color: #eee;
@@ -96,20 +106,20 @@ import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMen
96
106
  .rc-menu-submenu {
97
107
  & > .rc-menu-submenu-title {
98
108
  &:hover {
99
- background-color: #f0f0f0;
109
+ background-color: #e7e7e7;
100
110
  }
101
111
  }
102
112
  }
103
113
 
104
114
  .rc-menu-submenu-active > .rc-menu-submenu-title {
105
- background-color: #f5f5f5;
115
+ background-color: #eee;
106
116
  }
107
117
 
108
118
  .rc-menu-item,
109
119
  .rc-menu-submenu > .rc-menu-submenu-title {
110
120
  padding: 0 8px 0 24px;
111
121
  font-size: 14px;
112
- line-height: 38px;
122
+ line-height: 36px;
113
123
  cursor: pointer;
114
124
  }
115
125
 
@@ -129,9 +139,8 @@ import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMen
129
139
  color: var(--bs-primary);
130
140
  }
131
141
 
132
-
133
142
  .rc-menu-submenu-selected {
134
- background-color: #f5f5f5;
143
+ background-color: #eee;
135
144
 
136
145
  .rc-menu-submenu-title {
137
146
  color: var(--bs-primary);
@@ -139,7 +148,44 @@ import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMen
139
148
  }
140
149
  }
141
150
 
142
- `,nc=e=>e.map((e=>e.children.length>0?c(r,Object.assign({title:e.title},{children:nc(e.children)}),e.path):c(n,{children:c(d,Object.assign({to:e.path},{children:e.title}),void 0)},e.path)));function sc({routes:i,basename:t,title:r}){const n=a(i),s=v((()=>function(c,e="/"){return X(c,e)}(i,t)),[i,t]),{pathname:d}=o(),l=v((()=>{const c=[];return d.split("/").reduce(((e,i)=>(e.length>1&&c.push(e.join("/")),[...e,i])),[]),c}),[]);return e(Z,{children:[e(cc,{children:[c(ec,{children:r},void 0),c(rc,Object.assign({mode:"inline",defaultOpenKeys:l,selectedKeys:[d]},{children:nc(s)}),void 0)]},void 0),e(ic,{children:[c(tc,{children:n},void 0),c(Q,{},void 0)]},void 0)]},void 0)}const ac=z(N),oc={confirmButtonText:"确定",cancelButtonText:"取消"},dc={confirm:async c=>{const{isConfirmed:e}=await ac.fire({...oc,icon:"warning",showCancelButton:!0,...c});return e},error:c=>{ac.fire({...oc,toast:!0,position:"top",icon:"error",timer:3e3,showConfirmButton:!1,...c})}},lc=s.div`
151
+ & > .rc-menu-item {
152
+ line-height: 38px;
153
+ }
154
+
155
+ & > .rc-menu-submenu {
156
+ &.rc-menu-submenu-selected {
157
+ background-color: #f5f5f5;
158
+ }
159
+
160
+ & > .rc-menu-submenu-title {
161
+ line-height: 38px;
162
+
163
+ &:hover {
164
+ background-color: #f0f0f0;
165
+ }
166
+ }
167
+
168
+ &.rc-menu-submenu-active > .rc-menu-submenu-title {
169
+ background-color: #f5f5f5;
170
+ }
171
+
172
+ & > .rc-menu-sub {
173
+ border-top: 1px solid #e6e6e6;
174
+ border-bottom: 1px solid #e6e6e6;
175
+
176
+ & > li {
177
+ &:first-child {
178
+ margin-top: 9px;
179
+ }
180
+
181
+ &:last-child {
182
+ margin-bottom: 9px;
183
+ }
184
+ }
185
+ }
186
+ }
187
+
188
+ `,ic=e=>e.map((e=>e.children.length>0?c(r,Object.assign({title:e.title},{children:ic(e.children)}),e.path):c(n,{children:c(l,Object.assign({to:e.path},{children:e.title}),void 0)},e.path))),tc=()=>({height:0}),rc=c=>({height:c.scrollHeight}),nc={motionName:"rc-menu-collapse",motionAppear:!0,onAppearStart:tc,onAppearActive:rc,onEnterStart:tc,onEnterActive:rc,onLeaveStart:rc,onLeaveActive:tc};function sc({routes:i,basename:t,title:r}){const n=o(i),s=u((()=>function(c,e="/"){return J(c,e)}(i,t)),[i,t]),{pathname:l}=a(),d=u((()=>{const c=[];return l.split("/").reduce(((e,i)=>(e.length>1&&c.push(e.join("/")),[...e,i])),[]),c}),[]);return e(Q,{children:[e(W,{children:[c(X,{children:r},void 0),c(ec,Object.assign({mode:"inline",motion:nc,defaultOpenKeys:d,selectedKeys:[l]},{children:ic(s)}),void 0)]},void 0),e(Z,{children:[c(cc,{children:n},void 0),c(Y,{},void 0)]},void 0)]},void 0)}const oc=C(k),ac={confirmButtonText:"确定",cancelButtonText:"取消"},lc={confirm:async c=>{const{isConfirmed:e}=await oc.fire({...ac,icon:"warning",showCancelButton:!0,...c});return e},error:c=>{oc.fire({...ac,toast:!0,position:"top",icon:"error",timer:3e3,showConfirmButton:!1,...c})}},dc=s.div`
143
189
  padding: 48px 32px;
144
190
  `,gc=s.div`
145
191
  margin-bottom: 24px;
@@ -150,12 +196,12 @@ import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMen
150
196
  font-size: 24px;
151
197
  line-height: 1.8;
152
198
  text-align: center;
153
- `,uc=s.div`
199
+ `,mc=s.div`
154
200
  margin-top: 32px;
155
201
  text-align: center;
156
- `,mc={success:c("i",{className:"bi bi-check-circle-fill text-success"},void 0),error:c("i",{className:"bi bi-exclamation-circle-fill text-danger"},void 0),info:c("i",{className:"bi bi-info-circle-fill text-info"},void 0),warning:c("i",{className:"bi bi-exclamation-triangle-fill text-warning"},void 0)};function vc({status:i,title:t,icon:r,extra:n}){return!r&&i&&(r=mc[i]),e(lc,{children:[r&&c(gc,{children:r},void 0),t&&c(hc,{children:t},void 0),n&&c(uc,{children:n},void 0)]},void 0)}const pc=s.a`
202
+ `,vc={success:c("i",{className:"bi bi-check-circle-fill text-success"},void 0),error:c("i",{className:"bi bi-exclamation-circle-fill text-danger"},void 0),info:c("i",{className:"bi bi-info-circle-fill text-info"},void 0),warning:c("i",{className:"bi bi-exclamation-triangle-fill text-warning"},void 0)};function uc({status:i,title:t,icon:r,extra:n}){return!r&&i&&(r=vc[i]),e(dc,{children:[r&&c(gc,{children:r},void 0),t&&c(hc,{children:t},void 0),n&&c(mc,{children:n},void 0)]},void 0)}const pc=s.a`
157
203
  cursor: pointer;
158
- `;function fc({children:i,menus:t}){return c("header",Object.assign({className:"navbar navbar-light bg-white border-bottom sticky-top"},{children:e("div",Object.assign({className:"container-fluid"},{children:[c("a",Object.assign({className:"navbar-brand",href:"https://www.topthink.com"},{children:c("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"},void 0)}),void 0),i,c("div",Object.assign({className:"d-flex align-items-center"},{children:e(C,Object.assign({navbar:!0},{children:[c(C.Toggle,Object.assign({as:pc,className:"nav-link"},{children:c("i",{className:"bi bi-person-circle"},void 0)}),void 0),c(C.Menu,Object.assign({className:"shadow-sm"},{children:t}),void 0)]}),void 0)}),void 0)]}),void 0)}),void 0)}s.div`
204
+ `;function fc({children:i,menus:t}){return c("header",Object.assign({className:"navbar navbar-light bg-white border-bottom sticky-top"},{children:e("div",Object.assign({className:"container-fluid"},{children:[c("a",Object.assign({className:"navbar-brand",href:"https://www.topthink.com"},{children:c("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"},void 0)}),void 0),i,c("div",Object.assign({className:"d-flex align-items-center"},{children:e(N,Object.assign({navbar:!0},{children:[c(N.Toggle,Object.assign({as:pc,className:"nav-link"},{children:c("i",{className:"bi bi-person-circle"},void 0)}),void 0),c(N.Menu,Object.assign({className:"shadow-sm"},{children:t}),void 0)]}),void 0)}),void 0)]}),void 0)}),void 0)}s.div`
159
205
  position: relative;
160
206
  `;const bc=s.div`
161
207
  display: ${c=>c.active?"flex":"none"};
@@ -179,20 +225,20 @@ import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMen
179
225
  user-select: none;
180
226
  will-change: opacity;
181
227
  z-index: 990;
182
- `;function xc({loading:i=!0,children:t,variant:r="success",animation:n="border",...s}){return i?(t&&(t=c("p",Object.assign({className:"mt-3 text-secondary"},{children:t}),void 0)),e(bc,Object.assign({inverted:!0,active:!0},{children:[c(S,Object.assign({animation:n,variant:r},s),void 0),t]}),void 0)):null}A.attach(),P.defaults.raxConfig={retryDelay:2e3,backoffType:"static",shouldRetry:c=>{var e,i;return"GET"===(null===(e=c.config.method)||void 0===e?void 0:e.toUpperCase())&&449===(null===(i=c.response)||void 0===i?void 0:i.status)}},P.defaults.baseURL="/api",P.interceptors.request.use((c=>{const e=sessionStorage.getItem("authorization");return e&&(c.headers.Authorization=`Bearer ${e}`),c}),(c=>Promise.reject(c))),P.interceptors.response.use((c=>(201===c.status&&c.data.location&&(window.location.href=c.data.location,c.data=void 0),c)),(c=>{if(P.isAxiosError(c)&&c.response){const{data:e,status:i}=c.response;if(401===i){const{url:i}=e;if(i){const c=window.location.origin+"/login";window.location.href=`${i}&redirect_uri=${c}`}c.errors="Unauthorized"}else{let t={};if(422===i&&"object"==typeof e)for(let c in e)t[c]=e[c];else t="object"==typeof e&&"message"in e?e.message:e;c.errors=t}}return Promise.reject(c)}));const yc=async function(c){c="string"==typeof c?{url:c}:c;const{data:e}=await P.request({...c});return e};function wc(){const e=o(),i=B.parse(e.hash.substr(1));return sessionStorage.setItem("authorization",i.access_token),c(u,{to:"/",replace:!0},void 0)}function _c(){return p((()=>{yc("/logout").catch((()=>{sessionStorage.removeItem("authorization")}))}),[]),c(xc,{},void 0)}function jc({children:i}){return c(m.StrictMode,{children:c(l,{children:e(g,{children:[c(h,{path:"*",element:i},void 0),c(h,{path:"login",element:c(wc,{},void 0)},void 0),c(h,{path:"logout",element:c(_c,{},void 0)},void 0)]},void 0)},void 0)},void 0)}const Oc=s($)`
228
+ `;function xc({loading:i=!0,children:t,variant:r="success",animation:n="border",...s}){return i?(t&&(t=c("p",Object.assign({className:"mt-3 text-secondary"},{children:t}),void 0)),e(bc,Object.assign({inverted:!0,active:!0},{children:[c(S,Object.assign({animation:n,variant:r},s),void 0),t]}),void 0)):null}L.attach(),F.defaults.raxConfig={retryDelay:2e3,backoffType:"static",shouldRetry:c=>{var e,i;return"GET"===(null===(e=c.config.method)||void 0===e?void 0:e.toUpperCase())&&449===(null===(i=c.response)||void 0===i?void 0:i.status)}},F.defaults.baseURL="/api",F.interceptors.request.use((c=>{const e=sessionStorage.getItem("authorization");return e&&(c.headers.Authorization=`Bearer ${e}`),c}),(c=>Promise.reject(c))),F.interceptors.response.use((c=>(201===c.status&&c.data.location&&(window.location.href=c.data.location,c.data=void 0),c)),(c=>{if(F.isAxiosError(c)&&c.response){const{data:e,status:i}=c.response;if(401===i){const{url:i}=e;if(i){const c=window.location.origin+"/login";window.location.href=`${i}&redirect_uri=${c}`}c.errors="Unauthorized"}else{let t={};if(422===i&&"object"==typeof e)for(let c in e)t[c]=e[c];else t="object"==typeof e&&"message"in e?e.message:e;c.errors=t}}return Promise.reject(c)}));const yc=async function(c){c="string"==typeof c?{url:c}:c;const{data:e}=await F.request({...c});return e};function _c(){const e=a(),i=B.parse(e.hash.substr(1));return sessionStorage.setItem("authorization",i.access_token),c(m,{to:"/",replace:!0},void 0)}function wc(){return p((()=>{yc("/logout").catch((()=>{sessionStorage.removeItem("authorization")}))}),[]),c(xc,{},void 0)}function jc({children:i}){return c(d,{children:e(g,{children:[c(h,{path:"*",element:i},void 0),c(h,{path:"login",element:c(_c,{},void 0)},void 0),c(h,{path:"logout",element:c(wc,{},void 0)},void 0)]},void 0)},void 0)}const zc=s(A)`
183
229
  margin-bottom: 1rem;
184
- `;function kc({children:i,title:t,border:r="light",...n}){return c(Oc,Object.assign({border:r},n,{children:e("div",Object.assign({className:"card-body"},{children:[t&&c("div",Object.assign({className:"card-title h5"},{children:t}),void 0),i]}),void 0)}),void 0)}function Nc({errors:e}){return e?c(F,Object.assign({variant:"danger"},{children:c("ul",Object.assign({className:"mb-0"},{children:"string"==typeof e?c("li",{children:e},void 0):Object.entries(e).map((([e,i])=>c("li",{children:i},e)))}),void 0)}),void 0):null}const zc=m.createContext(null),Cc=zc.Provider;function Sc(){const c=f(zc);if(!c)throw new Error("please use `useUser` in UserContext");return c}function $c({require:e,children:t,fallback:r}){const n=Sc();let s=!1;return"function"==typeof e?s=e(n):("string"==typeof e&&(e=[e]),s=L(n.roles,e).length>0),s||(t=r),c(i,{children:t},void 0)}function Fc({children:e,size:i="small"}){"string"==typeof i&&(i={small:8,middle:16,large:24}[i]);const t=b.map(e,(e=>c(Tc,Object.assign({size:i},{children:e}),void 0)));return c(Dc,{children:t},void 0)}const Dc=s.div`
230
+ `;function Oc({children:i,title:t,border:r="light",...n}){return c(zc,Object.assign({border:r},n,{children:e("div",Object.assign({className:"card-body"},{children:[t&&c("div",Object.assign({className:"card-title h5"},{children:t}),void 0),i]}),void 0)}),void 0)}function kc({errors:e}){return e?c(D,Object.assign({variant:"danger"},{children:c("ul",Object.assign({className:"mb-0"},{children:"string"==typeof e?c("li",{children:e},void 0):Object.entries(e).map((([e,i])=>c("li",{children:i},e)))}),void 0)}),void 0):null}const Cc=v.createContext(null),Nc=Cc.Provider;function Sc(){const c=f(Cc);if(!c)throw new Error("please use `useUser` in UserContext");return c}function Ac({require:e,children:t,fallback:r}){const n=Sc();let s=!1;return"function"==typeof e?s=e(n):("string"==typeof e&&(e=[e]),s=M(n.roles,e).length>0),s||(t=r),c(i,{children:t},void 0)}function Dc({children:e,size:i="small"}){"string"==typeof i&&(i={small:8,middle:16,large:24}[i]);const t=b.map(e,(e=>c($c,Object.assign({size:i},{children:e}),void 0)));return c(Ec,{children:t},void 0)}const Ec=s.div`
185
231
  display: inline-flex;
186
232
  align-items: center;
187
- `,Tc=s.div`
233
+ `,$c=s.div`
188
234
  margin-right: ${c=>c.size}px;
189
235
 
190
236
  &:last-child {
191
237
  margin-right: 0;
192
238
  }
193
- `;function qc({value:e,locale:t="zh-CN",currency:r=!0}){const n=v((()=>{let c={};return c=r?{style:"currency",currency:"CNY",...c}:{minimumFractionDigits:2},new Intl.NumberFormat(t,c)}),[r,t]);return c(i,{children:n.format(e)},void 0)}function Mc({loading:e,children:i,...t}){return c(D,Object.assign({},t,{disabled:e},{children:e?"Loading…":i}),void 0)}function Ec({url:c,method:e,confirm:i,onSuccess:t,children:r,as:n=D,...s}){const[a,o]=x(!1),d=y((async r=>{r.preventDefault();try{if(o(!0),i&&!await dc.confirm({text:i}))return;const r="string"==typeof c?{url:c,method:e}:{method:e,...c},n=await yc(r);t&&t(n)}catch(r){if(!P.isAxiosError(r))throw r;{let c=r.errors;"string"!=typeof r.errors&&(c=Object.values(r.errors).join("<br />")),dc.error({text:c})}}finally{o(!1)}}),[c,e]);return w(n,{...s,disabled:a,onClick:d},r)}function Ic(e){return c(D,Object.assign({},e,{children:c("i",{className:"bi bi-plus"},void 0)}),void 0)}const Bc={remove:c("i",{className:"bi bi-dash"},void 0),plus:c("i",{className:"bi bi-plus"},void 0),"arrow-up":c("i",{className:"bi bi-arrow-up"},void 0),"arrow-down":c("i",{className:"bi bi-arrow-down"},void 0)};function Pc(e){const{icon:i,className:t,...r}=e;return c(D,Object.assign({},r,{variant:"light",size:"sm"},{children:Bc[i]}),void 0)}const{isMultiSelect:Ac,getDefaultRegistry:Lc}=U;const Rc=({TitleField:e,idSchema:i,title:t,required:r})=>{if(!t)return null;const n=`${i.$id}__title`;return c(e,{id:n,title:t,required:r},void 0)},Uc=({DescriptionField:e,idSchema:i,description:t})=>{if(!t)return null;const r=`${i.$id}__description`;return c(e,{id:r,description:t},void 0)},Hc=i=>{const t={flex:1,paddingLeft:6,paddingRight:6,fontWeight:"bold"};return e("div",Object.assign({className:"d-flex justify-content-between"},{children:[c("div",Object.assign({className:"flex-grow-1"},{children:i.children}),void 0),i.hasToolbar&&c("div",Object.assign({className:"toolbar flex-shrink-0"},{children:e(q,{children:[(i.hasMoveUp||i.hasMoveDown)&&c(Pc,{icon:"arrow-up",className:"array-item-move-up",tabIndex:-1,style:t,disabled:i.disabled||i.readonly||!i.hasMoveUp,onClick:i.onReorderClick(i.index,i.index-1)},void 0),(i.hasMoveUp||i.hasMoveDown)&&c(Pc,{icon:"arrow-down",tabIndex:-1,style:t,disabled:i.disabled||i.readonly||!i.hasMoveDown,onClick:i.onReorderClick(i.index,i.index+1)},void 0),i.hasRemove&&c(Pc,{icon:"remove",tabIndex:-1,style:t,disabled:i.disabled||i.readonly,onClick:i.onDropIndexClick(i.index)},void 0)]},void 0)}),void 0)]}),i.index)},Kc=i=>e("fieldset",Object.assign({className:i.className,id:i.idSchema.$id},{children:[c(Rc,{TitleField:i.TitleField,idSchema:i.idSchema,title:i.uiSchema["ui:title"]||i.title,required:i.required},`array-field-title-${i.idSchema.$id}`),(i.uiSchema["ui:description"]||i.schema.description)&&c(Uc,{DescriptionField:i.DescriptionField,idSchema:i.idSchema,description:i.uiSchema["ui:description"]||i.schema.description},`array-field-description-${i.idSchema.$id}`),i.items&&i.items.map((c=>Hc(c))),i.canAdd&&c(T.Group,{children:c(Ic,{className:"array-item-add",onClick:i.onAddClick,disabled:i.disabled||i.readonly},void 0)},void 0)]}),void 0),Gc=i=>e("fieldset",Object.assign({className:i.className},{children:[c(Rc,{TitleField:i.TitleField,idSchema:i.idSchema,title:i.uiSchema["ui:title"]||i.title,required:i.required},`array-field-title-${i.idSchema.$id}`),(i.uiSchema["ui:description"]||i.schema.description)&&c("div",Object.assign({className:"field-description"},{children:i.uiSchema["ui:description"]||i.schema.description}),`field-description-${i.idSchema.$id}`),i.items&&i.items.map((c=>Hc(c))),i.canAdd&&c(Ic,{className:"array-item-add",onClick:i.onAddClick,disabled:i.disabled||i.readonly},void 0)]}),void 0),Vc=_((({id:t,placeholder:r,required:n,readonly:s,disabled:a,type:o,value:d,onChange:l,onBlur:g,onFocus:h,autofocus:u,options:m,schema:v,rawErrors:p=[]},f)=>{const b="string"===(o||v.type)?"text":`${o||v.type}`;return e(i,{children:[c(T.Control,{id:t,ref:f,placeholder:r,autoFocus:u,required:n,disabled:a,readOnly:s,className:p.length>0?"is-invalid":"",list:v.examples?`examples_${t}`:void 0,type:b,value:d||0===d?d:"",onChange:({target:{value:c}})=>l(""===c?m.emptyValue:c),onBlur:({target:{value:c}})=>g(t,c),onFocus:({target:{value:c}})=>h(t,c)},void 0),v.examples?c("datalist",Object.assign({id:`examples_${t}`},{children:v.examples.concat(v.default?[v.default]:[]).map((e=>c("option",{value:e},e)))}),void 0):null]},void 0)}));const{getDefaultRegistry:Wc}=U,{fields:Yc,widgets:Jc}=Wc();var Qc=H({className:"row g-3",FieldTemplate:function(i){const{children:t,displayLabel:r,rawErrors:n=[],rawHelp:s,rawDescription:a,label:o,schema:d,required:l,id:g}=i;return"root"===g?t:e(T.Group,Object.assign({className:"col-12"},{children:[r&&e(T.Label,Object.assign({className:n.length>0?"text-danger":""},{children:[o||d.title,(o||d.title)&&l?"*":null]}),void 0),t,r&&a?c(T.Text,Object.assign({className:n.length>0?"text-danger":"text-muted"},{children:a}),void 0):null,n.length>0&&n.map(((e,i)=>c(T.Control.Feedback,Object.assign({type:"invalid"},{children:e}),i))),s&&c(T.Text,Object.assign({muted:!0},{children:s}),void 0)]}),void 0)},ObjectFieldTemplate:function({DescriptionField:t,description:r,TitleField:n,title:s,properties:a,required:o,uiSchema:d,idSchema:l}){const g=e(i,{children:[(d["ui:title"]||s)&&c(n,{id:`${l.$id}-title`,title:s,required:o},void 0),r&&c(t,{id:`${l.$id}-description`,description:r},void 0),a.map((c=>c.content))]},void 0);return"root"===l.$id?g:c("fieldset",Object.assign({id:l.$id},{children:g}),void 0)},ArrayFieldTemplate:function(e){const{schema:i,registry:t=Lc()}=e;return Ac(i,t.rootSchema)?c(Gc,Object.assign({},e),void 0):c(Kc,Object.assign({},e),void 0)},widgets:{...Jc,TextWidget:Vc,CheckboxWidget:function(e){const{id:i,value:t,required:r,disabled:n,readonly:s,label:a,schema:o,autofocus:d,onChange:l,onBlur:g,onFocus:h}=e,u=a||o.description;return c(T.Check,{id:i,label:u,checked:void 0!==t&&t,required:r,disabled:n||s,autoFocus:d,onChange:({target:{checked:c}})=>l(c),type:"switch",onBlur:({target:{checked:c}})=>g(i,c),onFocus:({target:{checked:c}})=>h(i,c)},void 0)}},fields:{...Yc,DescriptionField:function({description:e}){return e?c("p",Object.assign({className:"text-black-50"},{children:e}),void 0):null}},ErrorList:function({errorSchema:e}){return c("div",Object.assign({className:"col-12"},{children:c(F,Object.assign({className:"mb-0",variant:"danger"},{children:c("ul",Object.assign({className:"mb-0"},{children:"__errors"in e?c("li",{children:e.__errors},void 0):Object.entries(e).map((([e,i])=>c("li",{children:i.__errors},e)))}),void 0)}),void 0)}),void 0)}});const Xc=require("ajv-i18n/localize/zh"),Zc=_((({action:e,method:i="post",onSuccess:t,formData:r,onSubmit:n,children:s,...a},o)=>{const[d,l]=x(),[g,h]=x(!1),[u,m]=x(r),v=j(),p=j();O(o,(()=>({submit(){if(!g)return v.current.formElement.dispatchEvent(new CustomEvent("submit",{bubbles:!0,cancelable:!0})),new Promise(((c,e)=>{p.current={resolve:c,reject:e}}))}})));const f=y((async(c,r)=>{if(e){const{formData:r}=c;try{var s;h(!0);const c=await yc({url:e,method:i,data:r});l(void 0),t&&await t(c),null===(s=p.current)||void 0===s||s.resolve(c)}catch(c){var a;if(null===(a=p.current)||void 0===a||a.reject(),!P.isAxiosError(c))throw c;l((c=>{const e=c.errors;return"string"==typeof e?{__errors:[e]}:R(e,(c=>({__errors:[c]})))})(c))}finally{h(!1),p.current=void 0}}else n&&n(c,r)}),[e,i,n,p]),b=y((({formData:c})=>{m(c)}),[m]),w=y((c=>(c=c.map((c=>({keyword:c.name,dataPath:c.property,...c}))),Xc(c),c)),[]);return c(Qc,Object.assign({ref:v,extraErrors:d,onSubmit:f,transformErrors:w,noHtml5Validate:!0,noValidate:!0},a,{formData:u,onChange:b},{children:s||c("div",Object.assign({className:"col-12"},{children:c(Mc,Object.assign({loading:g,type:"submit",variant:"primary"},{children:"提交"}),void 0)}),void 0)}),void 0)})),ce=s.div`
239
+ `;function Ic({value:e,locale:t="zh-CN",currency:r=!0}){const n=u((()=>{let c={};return c=r?{style:"currency",currency:"CNY",...c}:{minimumFractionDigits:2},new Intl.NumberFormat(t,c)}),[r,t]);return c(i,{children:n.format(e)},void 0)}function Pc({loading:e,children:i,...t}){return c(E,Object.assign({},t,{disabled:e},{children:e?"Loading…":i}),void 0)}function Bc({url:c,method:e,confirm:i,onSuccess:t,children:r,as:n=E,...s}){const[o,a]=x(!1),l=y((async r=>{r.preventDefault();try{if(a(!0),i&&!await lc.confirm({text:i}))return;const r="string"==typeof c?{url:c,method:e}:{method:e,...c},n=await yc(r);t&&t(n)}catch(r){if(!F.isAxiosError(r))throw r;{let c=r.errors;"string"!=typeof r.errors&&(c=Object.values(r.errors).join("<br />")),lc.error({text:c})}}finally{a(!1)}}),[c,e]);return _(n,{...s,disabled:o,onClick:l},r)}const Fc=require("ajv-i18n/localize/zh"),Lc=w((({action:e,method:i="post",onSuccess:t,formData:r,onSubmit:n,children:s,...o},a)=>{const[l,d]=x(),[g,h]=x(!1),[m,v]=x(r),u=y((async(c,r)=>{try{if(h(!0),e){const{formData:r}=c;try{const c=await yc({url:e,method:i,data:r});d(void 0),t&&await t(c)}catch(c){throw F.isAxiosError(c)&&d((c=>{const e=c.errors;return"string"==typeof e?{__errors:[e]}:T(e,(c=>({__errors:[c]})))})(c)),c}}else n&&await n(c,r)}finally{h(!1)}}),[e,i,n]),p=y((({formData:c})=>{v(c)}),[v]),f=y((c=>(c=c.map((c=>({keyword:c.name,dataPath:c.property,...c}))),Fc(c),c)),[]);return c(q,Object.assign({ref:a,extraErrors:l,onSubmit:u,transformErrors:f,noHtml5Validate:!0,noValidate:!0},o,{formData:m,onChange:p},{children:s||c("div",Object.assign({className:"col-12"},{children:c(Pc,Object.assign({loading:g,type:"submit",variant:"primary"},{children:"提交"}),void 0)}),void 0)}),void 0)})),Mc=s.div`
194
240
  width: 100%;
195
- `,ee=s.div`
241
+ `,Tc=s.div`
196
242
  background-color: #fff;
197
243
  display: flex;
198
244
 
@@ -202,26 +248,26 @@ import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMen
202
248
  justify-content: space-between;
203
249
  align-items: center;
204
250
  }
205
- `,ie=s.div`
251
+ `,qc=s.div`
206
252
  margin-top: 24px;
207
- `,te=s.div`
253
+ `,Hc=s.div`
208
254
  font-size: 22px;
209
255
  line-height: 64px;
210
256
  height: 64px;
211
- `,re=s.div`
257
+ `,Uc=s.div`
212
258
 
213
- `;function ne({title:i,children:t,extra:r}){return e(ce,{children:[c(ee,{children:e("div",Object.assign({className:"container"},{children:[c(te,{children:i},void 0),c(re,{children:r},void 0)]}),void 0)},void 0),c(ie,Object.assign({className:"container"},{children:t}),void 0)]},void 0)}function se(){}function ae(c){return"number"==typeof c&&isFinite(c)&&Math.floor(c)===c}const oe={table:e=>c(E,Object.assign({},e,{className:"align-middle table-hover"}),void 0)},de=s((function({total:e=0,onChange:i=se,defaultCurrent:t=1,defaultPageSize:r=10,className:n,...s}){const[a,o]=x(t),[d,l]=x(r);p((()=>{ae(s.current)&&o(s.current)}),[s.current]),p((()=>{ae(s.pageSize)&&l(s.pageSize)}),[s.pageSize]);const g=v((()=>Math.floor((e-1)/d)+1),[e,d]),h=y((c=>()=>{c!==a&&(o(c),i(c,d))}),[i,a,d]),u=a-1>0?a-1:0,m=a+1<g?a+1:g,f=[];let b=null,w=null,_=null,j=null;if(g<=7)for(let e=1;e<=g;e+=1){const i=a===e;f.push(c(M.Item,Object.assign({active:i,onClick:h(e)},{children:e}),e))}else{j=c(M.Last,{onClick:h(g)},void 0),_=c(M.First,{onClick:h(1)},void 0),b=c(M.Prev,{onClick:h(u)},void 0),w=c(M.Next,{onClick:h(m)},void 0);let e=Math.max(1,a-2),i=Math.min(a+2,g);a-1<=2&&(i=5),g-a<=2&&(e=g-4);for(let t=e;t<=i;t+=1){const e=a===t;f.push(c(M.Item,Object.assign({active:e,onClick:h(t)},{children:t}),t))}a-1>=4&&3!==a&&f.unshift(b),g-a>=4&&a!==g-2&&f.push(w),1!==e&&f.unshift(_),i!==g&&f.push(j)}return c(M,Object.assign({className:n},{children:f}),void 0)}))`
259
+ `;function Kc({title:i,children:t,extra:r}){return e(Mc,{children:[c(Tc,{children:e("div",Object.assign({className:"container"},{children:[c(Hc,{children:i},void 0),c(Uc,{children:r},void 0)]}),void 0)},void 0),c(qc,Object.assign({className:"container"},{children:t}),void 0)]},void 0)}function Rc(){}function Vc(c){return"number"==typeof c&&isFinite(c)&&Math.floor(c)===c}const Gc={table:e=>c(I,Object.assign({},e,{className:"align-middle table-hover"}),void 0)},Yc=s((function({total:e=0,onChange:i=Rc,defaultCurrent:t=1,defaultPageSize:r=10,className:n,...s}){const[o,a]=x(t),[l,d]=x(r);p((()=>{Vc(s.current)&&a(s.current)}),[s.current]),p((()=>{Vc(s.pageSize)&&d(s.pageSize)}),[s.pageSize]);const g=u((()=>Math.floor((e-1)/l)+1),[e,l]),h=y((c=>()=>{c!==o&&(a(c),i(c,l))}),[i,o,l]),m=o-1>0?o-1:0,v=o+1<g?o+1:g,f=[];let b=null,_=null,w=null,j=null;if(g<=7)for(let e=1;e<=g;e+=1){const i=o===e;f.push(c($.Item,Object.assign({active:i,onClick:h(e)},{children:e}),e))}else{j=c($.Last,{onClick:h(g)},"last"),w=c($.First,{onClick:h(1)},"first"),b=c($.Prev,{onClick:h(m)},"prev"),_=c($.Next,{onClick:h(v)},"next");let e=Math.max(1,o-2),i=Math.min(o+2,g);o-1<=2&&(i=5),g-o<=2&&(e=g-4);for(let t=e;t<=i;t+=1){const e=o===t;f.push(c($.Item,Object.assign({active:e,onClick:h(t)},{children:t}),t))}o-1>=4&&3!==o&&f.unshift(b),g-o>=4&&o!==g-2&&f.push(_),1!==e&&f.unshift(w),i!==g&&f.push(j)}return c($,Object.assign({className:n},{children:f}),void 0)}))`
214
260
  margin-bottom: 0;
215
261
  justify-content: flex-end;
216
- `;const le=_((({source:i,rowKey:t="id",paginate:r=!0,toolBarRender:n,columns:s=[],...a},o)=>{const[d,l]=x([]),[g,h]=x(r?{total:0,current:1,pageSize:10}:null),[u,m]=x(!0),f=y((async(c={})=>{m(!0);try{let e;if("string"==typeof i){const t={};g&&(t.page=c.page||g.current),e=await yc({url:i,params:t})}else e=await i();r&&function(c){return"current_page"in c}(e)&&(h({total:e.total,current:e.current_page,pageSize:e.per_page}),e=e.data),l(e)}catch(c){}finally{m(!1)}}),[i,l,g]);p((()=>{f()}),[]);const b=j({reload:f});p((()=>{b.current={reload:f}}),[f]),O(o,(()=>b.current));const w=v((()=>s.map((c=>{const e={...c,render:void 0};if("render"in c&&c.render){const i=c.render;e.render=(c,e,t)=>i({value:c,record:e,index:t,action:b.current})}return e}))),[s,b]),_=y((c=>{f({page:c})}),[]);return e(kc,{children:[c(xc,{loading:u},void 0),e(ge,{children:[c(ue,{children:n&&n(b.current)},void 0),c(he,{children:c(me,Object.assign({onClick:b.current.reload},{children:c("i",{className:"bi bi-arrow-repeat"},void 0)}),void 0)},void 0)]},void 0),c(K,Object.assign({},a,{rowKey:t,columns:w,components:oe,data:d}),void 0),g&&c(de,Object.assign({},g,{onChange:_}),void 0)]},void 0)})),ge=s.div`
262
+ `;const Jc=w((({source:i,rowKey:t="id",paginate:r=!0,toolBarRender:n,columns:s=[],...o},a)=>{const[l,d]=x([]),[g,h]=x(r?{total:0,current:1,pageSize:10}:null),[m,v]=x(!0),f=y((async(c={})=>{v(!0);try{let e;if("string"==typeof i){const t={};g&&(t.page=c.page||g.current),e=await yc({url:i,params:t})}else e=await i();r&&function(c){return"current_page"in c}(e)&&(h({total:e.total,current:e.current_page,pageSize:e.per_page}),e=e.data),d(e)}catch(c){}finally{v(!1)}}),[i,d,g]);p((()=>{f()}),[]);const b=j({reload:f});p((()=>{b.current={reload:f}}),[f]),z(a,(()=>b.current));const _=u((()=>s.map((c=>{const e={...c,render:void 0};if("render"in c&&c.render){const i=c.render;e.render=(c,e,t)=>i({value:c,record:e,index:t,action:b.current})}return e}))),[s,b]),w=y((c=>{f({page:c})}),[]);return e(Oc,{children:[c(xc,{loading:m},void 0),e(Qc,{children:[c(Xc,{children:n&&n(b.current)},void 0),c(Wc,{children:c(Zc,Object.assign({onClick:b.current.reload},{children:c("i",{className:"bi bi-arrow-repeat"},void 0)}),void 0)},void 0)]},void 0),c(H,Object.assign({},o,{rowKey:t,columns:_,components:Gc,data:l}),void 0),g&&c(Yc,Object.assign({},g,{onChange:w}),void 0)]},void 0)})),Qc=s.div`
217
263
  display: flex;
218
264
  justify-content: space-between;
219
265
  padding-bottom: 1rem;
220
- `,he=s(Fc)`
266
+ `,Wc=s(Dc)`
221
267
 
222
- `,ue=s(Fc)`
268
+ `,Xc=s(Dc)`
223
269
 
224
- `,me=s.span`
270
+ `,Zc=s.span`
225
271
  cursor: pointer;
226
272
  font-size: 20px;
227
273
  line-height: 1;
@@ -229,5 +275,5 @@ import{jsx as c,jsxs as e,Fragment as i}from"react/jsx-runtime";import t,{SubMen
229
275
  &:hover {
230
276
  color: var(--bs-primary);
231
277
  }
232
- `,ve=_((({text:t,variant:r="primary",header:n=t,footer:s=!0,onOk:a,children:o},d)=>{const[l,g]=x(!1),[h,u]=x(!1),m=()=>g(!1);O(d,(()=>({close:m})));return e(i,{children:[c(D,Object.assign({variant:r,onClick:()=>g(!0)},{children:t}),void 0),e(I,Object.assign({show:l,onHide:m},{children:[n&&c(I.Header,Object.assign({closeButton:!0},{children:c(I.Title,Object.assign({as:"h5"},{children:n}),void 0)}),void 0),c(I.Body,{children:o},void 0),s&&e(I.Footer,{children:[c(D,Object.assign({variant:"secondary",onClick:m},{children:"取消"}),void 0),c(Mc,Object.assign({loading:h,variant:"primary",onClick:async()=>{if(a){u(!0);const c=await a();if(u(!1),!1===c)return}m()}},{children:"确定"}),void 0)]},void 0)]}),void 0)]},void 0)}));function pe({text:e,header:i,schema:t,uiSchema:r,action:n,method:s,formData:a,variant:o,onSuccess:d}){const l=j(null),g=j(null),h=y((async()=>{try{var c;const e=await(null===(c=l.current)||void 0===c?void 0:c.submit());return d&&d(e),!0}catch{return!1}}),[]);return c(ve,Object.assign({ref:g,text:e,onOk:h,header:i,variant:o},{children:c(Zc,Object.assign({ref:l,schema:t,uiSchema:r,action:n,method:s,formData:a},{children:c(k,{},void 0)}),void 0)}),void 0)}function fe(c,{manual:e,refreshDeps:i,...t}={}){const{execute:r,currentParams:n,error:s,...a}=G((async e=>(c="string"==typeof c?{url:c}:c,await yc({...c,...e}))),t);p((()=>{e||i||r()}),[]),p((()=>{i&&o()}),i);const o=y((()=>{n?r(...n):r()}),[r,n]);return{refresh:o,execute:r,...a}}export{$c as Access,kc as Card,ne as Content,Nc as Error,Q as Footer,Zc as Form,fc as Header,xc as Loader,Mc as LoadingButton,dc as Message,ve as ModalButton,pe as ModalForm,qc as NumberFormat,Ec as RequestButton,vc as Result,jc as Root,sc as SiderLayout,Fc as Space,le as Table,Cc as UserProvider,yc as request,fe as useRequest,Sc as useUser};
278
+ `,ce=w((({text:t,variant:r="primary",header:n=t,footer:s=!0,onOk:o,size:a,children:l},d)=>{const[g,h]=x(!1),[m,v]=x(!1),u=()=>h(!1);z(d,(()=>({close:u})));return e(i,{children:[c(E,Object.assign({variant:r,onClick:()=>h(!0)},{children:t}),void 0),e(P,Object.assign({size:a,show:g,onHide:u},{children:[n&&c(P.Header,Object.assign({closeButton:!0},{children:c(P.Title,Object.assign({as:"h5"},{children:n}),void 0)}),void 0),c(P.Body,{children:l},void 0),s&&e(P.Footer,{children:[c(E,Object.assign({variant:"secondary",onClick:u},{children:"取消"}),void 0),c(Pc,Object.assign({loading:m,variant:"primary",onClick:async()=>{if(o){v(!0);const c=await o();if(v(!1),!1===c)return}u()}},{children:"确定"}),void 0)]},void 0)]}),void 0)]},void 0)}));function ee({text:e,header:i,schema:t,uiSchema:r,action:n,method:s,formData:o,variant:a,onSuccess:l,size:d}){const g=j(null),h=j(null),m=y((async()=>{try{var c;const e=await(null===(c=g.current)||void 0===c?void 0:c.submit());return l&&l(e),!0}catch{return!1}}),[]);return c(ce,Object.assign({ref:h,text:e,onOk:m,header:i,variant:a,size:d},{children:c(Lc,Object.assign({ref:g,schema:t,uiSchema:r,action:n,method:s,formData:o},{children:c(O,{},void 0)}),void 0)}),void 0)}function ie(c,{manual:e,refreshDeps:i,...t}={}){const{execute:r,currentParams:n,error:s,...o}=U((async e=>(c="string"==typeof c?{url:c}:c,await yc({...c,...e}))),t);p((()=>{e||i||r()}),[]),p((()=>{i&&a()}),i);const a=y((()=>{n?r(...n):r()}),[r,n]);return{refresh:a,execute:r,...o}}export{Ac as Access,Oc as Card,Kc as Content,kc as Error,Y as Footer,Lc as Form,fc as Header,xc as Loader,Pc as LoadingButton,lc as Message,ce as ModalButton,ee as ModalForm,Ic as NumberFormat,Bc as RequestButton,uc as Result,jc as Root,sc as SiderLayout,Dc as Space,Jc as Table,Nc as UserProvider,yc as request,ie as useRequest,Sc as useUser};
233
279
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/footer.tsx","../src/images/logo_dark.svg","../src/utils/get-menu-data.ts","../src/layout/sider.tsx","../src/utils/message.ts","../src/components/result.tsx","../src/components/header.tsx","../src/images/logo.svg","../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/json-form/add-button.tsx","../src/components/json-form/icon-button.tsx","../src/components/json-form/templates/array-field-template.tsx","../src/components/json-form/widgets/text-widget.tsx","../src/components/json-form/index.tsx","../src/components/json-form/templates/field-template.tsx","../src/components/json-form/templates/object-field-template.tsx","../src/components/json-form/widgets/checkbox-widget.tsx","../src/components/json-form/fileds/description-field.tsx","../src/components/json-form/error-list.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"],"sourcesContent":["import styled from 'styled-components';\r\nimport logo from '../images/logo_dark.svg';\r\n\r\nconst FooterWrapper = styled.footer`\r\n background-color: #505050;\r\n color: #9f9f9f;\r\n padding: 65px 0 30px 0;\r\n\r\n .container {\r\n padding: 0 100px;\r\n }\r\n`;\r\n\r\nconst FooterInner = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n`;\r\n\r\nconst FooterLinks = styled.ul`\r\n display: flex;\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n\r\n li {\r\n margin-left: 60px;\r\n\r\n a {\r\n text-decoration: none;\r\n color: #9f9f9f;\r\n font-size: 20px;\r\n }\r\n }\r\n`;\r\n\r\nconst Copyright = styled.div`\r\n text-align: center;\r\n margin-top: 75px;\r\n`;\r\n\r\n\r\nexport default function Footer() {\r\n return <FooterWrapper>\r\n <div className='container'>\r\n <FooterInner>\r\n <img src={logo} height='40' />\r\n <FooterLinks>\r\n <li><a href='#'>关于我们</a></li>\r\n <li><a href='#'>联系我们</a></li>\r\n <li><a href='#'>加入我们</a></li>\r\n <li><a href='#'>合作伙伴</a></li>\r\n </FooterLinks>\r\n </FooterInner>\r\n <Copyright>\r\n © 2021 上海顶想信息科技有限公司 沪ICP备12007941号-1\r\n </Copyright>\r\n </div>\r\n </FooterWrapper>;\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:%239f9f9f%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 { PartialRouteObject } 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: PartialRouteObject[],\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: PartialRouteObject[], 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 { PartialRouteObject } from 'react-router';\r\nimport getMenuData, { MenuData } from '../utils/get-menu-data';\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: 60px 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-top: 10px;\r\n height: 54px;\r\n line-height: 44px;\r\n text-indent: 24px;\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 - 60px);\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: 10px 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 padding: 10px 0;\r\n background-color: #eee;\r\n border-top: 1px solid #e6e6e6;\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: #f0f0f0;\r\n }\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-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: 38px;\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\r\n .rc-menu-submenu-selected {\r\n background-color: #f5f5f5;\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`;\r\n\r\ninterface Props {\r\n title: string\r\n routes: PartialRouteObject[]\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\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 }, []);\r\n\r\n return <Container>\r\n <Sidebar>\r\n <Header>{title}</Header>\r\n <Menu mode='inline' defaultOpenKeys={openKeys} selectedKeys={[pathname]}>\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","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","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 <header 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-sm'}>\r\n {menus}\r\n </Dropdown.Menu>\r\n </Dropdown>\r\n </div>\r\n </div>\r\n </header>;\r\n}\r\n","var img = \"data:image/svg+xml,%3csvg width='485' height='132' xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='enable-background:new 0 0 531.69 198.43%3b' version='1.1'%3e %3cstyle type='text/css'%3e.st0%7bfill:%233C60FF%3b%7d%3c/style%3e %3cg%3e %3ctitle%3ebackground%3c/title%3e %3crect fill='none' id='canvas_background' height='134' width='487' y='-1' x='-1'/%3e %3c/g%3e %3cg%3e %3ctitle%3eLayer 1%3c/title%3e %3cpath id='svg_1' d='m132.29%2c62.34c-1.19%2c-18.77 -10.34%2c-35.36 -24.11%2c-46.46c-11.15%2c-8.99 -25.34%2c-14.38 -40.79%2c-14.38c-0.55%2c0 -1.09%2c0.01 -1.63%2c0.02c-3.32%2c0.08 -6.57%2c0.41 -9.75%2c0.98c-30.49%2c5.38 -53.65%2c32 -53.65%2c64.04c0%2c1.87 0.08%2c3.73 0.24%2c5.57c2.5%2c29.51 24.7%2c53.4 53.41%2c58.47c2.38%2c0.42 4.8%2c0.72 7.26%2c0.86c0.83%2c0.05 1.66%2c0.09 2.5%2c0.11c0.54%2c0.01 1.08%2c0.02 1.63%2c0.02c34.04%2c0 61.97%2c-26.16 64.79%2c-59.46c0.16%2c-1.83 0.24%2c-3.69 0.24%2c-5.57c0%2c-1.42 -0.05%2c-2.82 -0.14%2c-4.2zm-76.27%2c32.5c-0.26%2c0.01 -0.53%2c0.01 -0.79%2c0.01c-14.56%2c0 -26.88%2c-9.57 -31.03%2c-22.76c-0.97%2c-3.08 -1.49%2c-6.35 -1.49%2c-9.75c0%2c-17.95 14.56%2c-32.52 32.51%2c-32.52c0.26%2c0 0.53%2c0 0.79%2c0.01c3.41%2c0.08 6.69%2c0.68 9.75%2c1.74c6.5%2c2.22 12.06%2c6.45 15.97%2c11.94c1.98%2c2.78 3.54%2c5.9 4.57%2c9.25c0.94%2c3.03 1.44%2c6.24 1.44%2c9.58l-9.75%2c0c0%2c-2.18 -0.31%2c-4.29 -0.88%2c-6.28c-0.92%2c-3.23 -2.55%2c-6.17 -4.69%2c-8.64c-1.86%2c-2.14 -4.12%2c-3.93 -6.65%2c-5.25c-2.93%2c-1.54 -6.24%2c-2.46 -9.75%2c-2.58c-0.26%2c-0.01 -0.52%2c-0.01 -0.79%2c-0.01c-12.57%2c0 -22.76%2c10.19 -22.76%2c22.76c0%2c3.49 0.79%2c6.8 2.19%2c9.75c3.65%2c7.69 11.49%2c13.01 20.57%2c13.01c0.27%2c0 0.53%2c-0.01 0.79%2c-0.01l0%2c9.75zm55.7%2c-17.92c-3.35%2c10.5 -13.18%2c18.09 -24.78%2c18.09c-3.13%2c0 -6.13%2c-0.55 -8.91%2c-1.57c-2.18%2c-0.8 -4.24%2c-1.88 -6.11%2c-3.21c-2.38%2c-1.68 -4.47%2c-3.76 -6.16%2c-6.13c-0.28%2c-0.39 -0.55%2c-0.79 -0.81%2c-1.2c-2.03%2c-3.2 -3.38%2c-6.87 -3.85%2c-10.82l9.87%2c0c0.33%2c1.71 0.92%2c3.32 1.74%2c4.8c1.61%2c2.91 4.09%2c5.26 7.09%2c6.72c0.57%2c0.28 1.15%2c0.53 1.76%2c0.73c1.68%2c0.6 3.49%2c0.92 5.37%2c0.92c7.92%2c0 14.52%2c-5.67 15.96%2c-13.17c0.2%2c-1 0.3%2c-2.04 0.3%2c-3.09c0%2c-2.37 -0.51%2c-4.63 -1.43%2c-6.67c-1.66%2c-3.71 -4.68%2c-6.68 -8.43%2c-8.28l3.54%2c-9.1c7.43%2c3.08 13.13%2c9.49 15.21%2c17.38c0.44%2c1.64 0.72%2c3.34 0.81%2c5.09c0.04%2c0.52 0.05%2c1.05 0.05%2c1.58c0%2c1.05 -0.07%2c2.07 -0.18%2c3.09c-0.18%2c1.68 -0.54%2c3.3 -1.04%2c4.84z' class='st0'/%3e %3cg id='svg_2'%3e %3cg id='svg_3'%3e %3crect id='svg_4' height='6.34' width='94.12' class='st0' y='20.46' x='163.29'/%3e %3c/g%3e %3cg id='svg_5'%3e %3cpath id='svg_6' d='m169.31%2c113.72l0%2c-6.34c6.49%2c0 11.77%2c-5.28 11.77%2c-11.77l0%2c-71.98l6.34%2c0l0%2c71.98c0%2c9.98 -8.12%2c18.11 -18.11%2c18.11z' class='st0'/%3e %3c/g%3e %3cg id='svg_7'%3e %3cpath id='svg_8' d='m255.49%2c91.27l-6.34%2c0l0%2c-38.2c0%2c-5.06 -4.12%2c-9.18 -9.18%2c-9.18l-19.37%2c0c-5.06%2c0 -9.18%2c4.12 -9.18%2c9.18l0%2c38.2l-6.34%2c0l0%2c-38.2c0%2c-8.55 6.96%2c-15.51 15.51%2c-15.51l19.38%2c0c8.55%2c0 15.51%2c6.96 15.51%2c15.51l0%2c38.2l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_9'%3e %3crect id='svg_10' height='17.09' width='6.34' class='st0' y='23.63' x='227.12'/%3e %3c/g%3e %3cg id='svg_11'%3e %3cpath id='svg_12' d='m206.43%2c113.84l-3.34%2c0l0%2c-6.34l3.34%2c0c6.3%2c0 12.9%2c-3.56 15.35%2c-8.29c3.49%2c-6.71 5.33%2c-14.25 5.33%2c-21.81l0%2c-26.13l6.34%2c0l0%2c26.13c0%2c8.58 -2.09%2c17.13 -6.05%2c24.74c-3.98%2c7.68 -13.57%2c11.7 -20.97%2c11.7z' class='st0'/%3e %3c/g%3e %3cg id='svg_13'%3e %3cpath id='svg_14' d='m257.48%2c113.84l-3.34%2c0c-7.4%2c0 -16.98%2c-4.02 -20.98%2c-11.7c-3.96%2c-7.61 -6.05%2c-16.16 -6.05%2c-24.74l6.34%2c0c0%2c7.56 1.84%2c15.1 5.33%2c21.81c2.46%2c4.73 9.06%2c8.29 15.35%2c8.29l3.34%2c0l0%2c6.34l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_15'%3e %3crect id='svg_16' height='6.34' width='42.87' class='st0' y='27.89' x='274.07'/%3e %3c/g%3e %3cg id='svg_17'%3e %3crect id='svg_18' height='61.38' width='6.34' class='st0' y='14.89' x='293.05'/%3e %3c/g%3e %3cg id='svg_19'%3e %3crect id='svg_20' height='6.34' width='33.26' class='st0' transform='matrix(0.11%2c-0.9939%2c0.9939%2c0.11%2c194.7608%2c392.0006) ' y='46.985071' x='325.728637'/%3e %3c/g%3e %3cg id='svg_21'%3e %3crect id='svg_22' height='33.26' width='6.34' class='st0' transform='matrix(0.9939%2c-0.11%2c0.11%2c0.9939%2c-7.5075%2c38.3801) ' y='37.060893' x='310.495485'/%3e %3c/g%3e %3cg id='svg_23'%3e %3cpath id='svg_24' d='m352.9%2c77.14l-15.15%2c0c-7.52%2c0 -13.64%2c-6.12 -13.64%2c-13.63l0%2c-29.61c0%2c-7.52 6.12%2c-13.64 13.64%2c-13.64l15.15%2c0c7.52%2c0 13.64%2c6.12 13.64%2c13.64l0%2c29.61c0%2c7.52 -6.12%2c13.63 -13.64%2c13.63zm-15.15%2c-50.54c-4.02%2c0 -7.3%2c3.27 -7.3%2c7.3l0%2c29.61c0%2c4.02 3.27%2c7.3 7.3%2c7.3l15.15%2c0c4.02%2c0 7.3%2c-3.27 7.3%2c-7.3l0%2c-29.61c0%2c-4.02 -3.27%2c-7.3 -7.3%2c-7.3l-15.15%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_25'%3e %3cg id='svg_26'%3e %3crect id='svg_27' height='6.34' width='17.8' class='st0' y='37.2' x='336.43'/%3e %3c/g%3e %3cg id='svg_28'%3e %3crect id='svg_29' height='6.34' width='17.8' class='st0' y='53.87' x='336.43'/%3e %3c/g%3e %3c/g%3e %3cg id='svg_30'%3e %3cpath id='svg_31' d='m352.7%2c113.84l-37.98%2c0c-8%2c0 -14.5%2c-6.51 -14.5%2c-14.5l0%2c-16.14l6.34%2c0l0%2c16.13c0%2c4.5 3.66%2c8.17 8.17%2c8.17l37.98%2c0l0%2c6.34l-0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_32'%3e %3crect id='svg_33' height='6.34' width='23.57' class='st0' transform='matrix(0.2529%2c-0.9675%2c0.9675%2c0.2529%2c114.4986%2c402.9877) ' y='83.698593' x='326.836101'/%3e %3c/g%3e %3cg id='svg_34'%3e %3crect id='svg_35' height='6.34' width='20.52' class='st0' y='86.2' x='321.58'/%3e %3c/g%3e %3cg id='svg_36'%3e %3crect id='svg_37' height='24.75' width='6.34' class='st0' transform='matrix(0.9556%2c-0.2946%2c0.2946%2c0.9556%2c-19.7967%2c122.424) ' y='75.874073' x='369.686666'/%3e %3c/g%3e %3cg id='svg_38'%3e %3crect id='svg_39' height='6.34' width='71.83' class='st0' y='20.46' x='395.51'/%3e %3c/g%3e %3cg id='svg_40'%3e %3crect id='svg_41' height='6.34' width='90.81' class='st0' y='57.44' x='386.02'/%3e %3c/g%3e %3cg id='svg_42'%3e %3cpath id='svg_43' d='m463.12%2c113.64l-56%2c0c-4.5%2c0 -8.59%2c-2.29 -10.94%2c-6.14c-2.35%2c-3.84 -2.52%2c-8.53 -0.46%2c-12.53l17.68%2c-35.81l5.64%2c2.89l-17.68%2c35.81c-1.04%2c2.02 -0.95%2c4.39 0.23%2c6.33c1.19%2c1.94 3.25%2c3.1 5.53%2c3.1l56%2c0c1.51%2c0 2.88%2c-0.71 3.74%2c-1.95c0.81%2c-1.16 1.03%2c-2.57 0.63%2c-3.91l-7.8%2c-12.34l5.36%2c-3.39l8.18%2c12.94l0.12%2c0.31c1.24%2c3.34 0.76%2c7.08 -1.28%2c10.01c-2.04%2c2.94 -5.39%2c4.68 -8.95%2c4.68z' class='st0'/%3e %3c/g%3e %3c/g%3e %3c/g%3e%3c/svg%3e\";\n export default img;","import styled from 'styled-components';\r\n\r\nexport const Dimmable = styled.div`\r\n position: relative;\r\n`;\r\n\r\ninterface DimmerProps {\r\n active?: boolean\r\n inverted?: boolean\r\n}\r\n\r\nconst Dimmer = styled.div<DimmerProps>`\r\n display: ${props => props.active ? 'flex' : 'none'};\r\n position: absolute;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n vertical-align: middle;\r\n padding: 1em;\r\n background-color: ${props => props.inverted ? 'rgba(255, 255, 255, .85)' : 'rgba(0, 0, 0, .85)'};\r\n opacity: ${props => props.active ? 1 : 0};\r\n line-height: 1;\r\n animation-fill-mode: both;\r\n animation-duration: .5s;\r\n transition: background-color .5s linear;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n user-select: none;\r\n will-change: opacity;\r\n z-index: 990;\r\n`;\r\n\r\nexport default Dimmer;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Spinner, SpinnerProps } from 'react-bootstrap';\r\nimport Dimmer from './dimmer';\r\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 const redirectUri = window.location.origin + '/login';\r\n window.location.href = `${url}&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 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 React, { 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 return <Navigate to='/' 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 <React.StrictMode>\r\n <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 </React.StrictMode>;\r\n}\r\n","import { PropsWithChildren } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Card as BsCard, CardProps as BsCardProps } from 'react-bootstrap';\r\n\r\ninterface CardProps extends BsCardProps {\r\n title?: string;\r\n}\r\n\r\nconst Wrap = styled(BsCard)`\r\n margin-bottom: 1rem;\r\n`;\r\n\r\nexport default function Card({ children, title, border = 'light', ...props }: PropsWithChildren<CardProps>) {\r\n\r\n return <Wrap border={border} {...props}>\r\n <div className='card-body'>\r\n {title && <div className='card-title h5'>{title}</div>}\r\n {children}\r\n </div>\r\n </Wrap>;\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, { useContext } from 'react';\r\n\r\nexport interface User {\r\n id: number\r\n name: string\r\n email: string\r\n mobile: string\r\n is_certified: boolean\r\n roles: []\r\n}\r\n\r\nconst UserContext = React.createContext<User | null>(null);\r\n\r\nconst UserProvider = UserContext.Provider;\r\n\r\nexport function useUser() {\r\n const user = useContext(UserContext);\r\n if (!user) {\r\n throw new Error('please use `useUser` in UserContext');\r\n }\r\n\r\n return user;\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, useCallback, useState, MouseEvent } from 'react';\r\nimport Message from '../utils/message';\r\nimport axios, { AxiosRequestConfig } from 'axios';\r\n\r\ninterface Props extends ButtonProps {\r\n url: Config;\r\n method?: AxiosRequestConfig['method'];\r\n confirm?: string;\r\n onSuccess?: (result: any) => void;\r\n}\r\n\r\nexport default function RequestButton({ url, method, confirm, onSuccess, children, as = Button, ...props }: Props) {\r\n\r\n const [disabled, setDisabled] = useState(false);\r\n\r\n const handleClick = useCallback(async (e: MouseEvent) => {\r\n e.preventDefault();\r\n try {\r\n setDisabled(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 setDisabled(false);\r\n }\r\n }, [url, method]);\r\n\r\n return createElement(as, {\r\n ...props,\r\n disabled,\r\n onClick: handleClick\r\n }, children);\r\n}\r\n","import { AddButtonProps } from '@rjsf/core';\r\nimport { Button } from 'react-bootstrap';\r\n\r\nexport default function AddButton(props: AddButtonProps) {\r\n return <Button {...props}>\r\n <i className='bi bi-plus' />\r\n </Button>;\r\n}\r\n","import { Button } from 'react-bootstrap';\r\n\r\ntype IconButtonProps = {\r\n icon: string;\r\n className?: string;\r\n tabIndex?: number;\r\n style?: any;\r\n disabled?: any;\r\n onClick?: any;\r\n};\r\n\r\nconst mappings: any = {\r\n remove: <i className='bi bi-dash' />,\r\n plus: <i className='bi bi-plus' />,\r\n 'arrow-up': <i className='bi bi-arrow-up' />,\r\n 'arrow-down': <i className='bi bi-arrow-down' />,\r\n};\r\n\r\nexport default function IconButton(props: IconButtonProps) {\r\n const { icon, className, ...otherProps } = props;\r\n return <Button {...otherProps} variant='light' size='sm'>\r\n {mappings[icon]}\r\n </Button>;\r\n}\r\n","import { ArrayFieldTemplateProps, IdSchema, utils } from '@rjsf/core';\r\nimport { ButtonGroup, Form } from 'react-bootstrap';\r\nimport AddButton from '../add-button';\r\nimport IconButton from '../icon-button';\r\n\r\nconst { isMultiSelect, getDefaultRegistry } = utils;\r\n\r\nexport default function ArrayFieldTemplate(props: ArrayFieldTemplateProps) {\r\n const { schema, registry = getDefaultRegistry() } = props;\r\n\r\n if (isMultiSelect(schema, (registry as any).rootSchema)) {\r\n return <DefaultFixedArrayFieldTemplate {...props} />;\r\n } else {\r\n return <DefaultNormalArrayFieldTemplate {...props} />;\r\n }\r\n}\r\n\r\ntype ArrayFieldTitleProps = {\r\n TitleField: any;\r\n idSchema: IdSchema;\r\n title: string;\r\n required: boolean;\r\n};\r\n\r\nconst ArrayFieldTitle = ({\r\n TitleField,\r\n idSchema,\r\n title,\r\n required,\r\n}: ArrayFieldTitleProps) => {\r\n if (!title) {\r\n return null;\r\n }\r\n\r\n const id = `${idSchema.$id}__title`;\r\n return <TitleField id={id} title={title} required={required} />;\r\n};\r\n\r\ntype ArrayFieldDescriptionProps = {\r\n DescriptionField: any;\r\n idSchema: IdSchema;\r\n description: string;\r\n};\r\n\r\nconst ArrayFieldDescription = ({\r\n DescriptionField,\r\n idSchema,\r\n description,\r\n}: ArrayFieldDescriptionProps) => {\r\n if (!description) {\r\n return null;\r\n }\r\n\r\n const id = `${idSchema.$id}__description`;\r\n return <DescriptionField id={id} description={description} />;\r\n};\r\n\r\ntype ArrayElement<ArrayType extends readonly unknown[]> = ArrayType[number];\r\n\r\nconst DefaultArrayItem = (props: ArrayElement<ArrayFieldTemplateProps['items']>) => {\r\n\r\n const btnStyle = {\r\n flex: 1,\r\n paddingLeft: 6,\r\n paddingRight: 6,\r\n fontWeight: 'bold',\r\n };\r\n return <div key={props.index} className=\"d-flex justify-content-between\">\r\n <div className=\"flex-grow-1\">{props.children}</div>\r\n {props.hasToolbar && <div className=\"toolbar flex-shrink-0\">\r\n <ButtonGroup>\r\n {(props.hasMoveUp || props.hasMoveDown) && (\r\n <IconButton\r\n icon=\"arrow-up\"\r\n className=\"array-item-move-up\"\r\n tabIndex={-1}\r\n style={btnStyle}\r\n disabled={\r\n props.disabled || props.readonly || !props.hasMoveUp\r\n }\r\n onClick={props.onReorderClick(props.index, props.index - 1)}\r\n />\r\n )}\r\n {(props.hasMoveUp || props.hasMoveDown) && (\r\n <IconButton\r\n icon=\"arrow-down\"\r\n tabIndex={-1}\r\n style={btnStyle}\r\n disabled={\r\n props.disabled || props.readonly || !props.hasMoveDown\r\n }\r\n onClick={props.onReorderClick(props.index, props.index + 1)}\r\n />\r\n )}\r\n {props.hasRemove && (\r\n <IconButton\r\n icon=\"remove\"\r\n tabIndex={-1}\r\n style={btnStyle}\r\n disabled={props.disabled || props.readonly}\r\n onClick={props.onDropIndexClick(props.index)}\r\n />\r\n )}\r\n </ButtonGroup>\r\n </div>}\r\n </div>;\r\n};\r\n\r\nconst DefaultNormalArrayFieldTemplate = (props: ArrayFieldTemplateProps) => {\r\n return <fieldset className={props.className} id={props.idSchema.$id}>\r\n <ArrayFieldTitle\r\n key={`array-field-title-${props.idSchema.$id}`}\r\n TitleField={props.TitleField}\r\n idSchema={props.idSchema}\r\n title={props.uiSchema['ui:title'] || props.title}\r\n required={props.required}\r\n />\r\n\r\n {(props.uiSchema['ui:description'] || props.schema.description) && (\r\n <ArrayFieldDescription\r\n key={`array-field-description-${props.idSchema.$id}`}\r\n DescriptionField={props.DescriptionField}\r\n idSchema={props.idSchema}\r\n description={\r\n props.uiSchema['ui:description'] || props.schema.description\r\n }\r\n />\r\n )}\r\n\r\n {props.items && props.items.map(p => DefaultArrayItem(p))}\r\n\r\n {props.canAdd && (\r\n <Form.Group>\r\n <AddButton\r\n className=\"array-item-add\"\r\n onClick={props.onAddClick}\r\n disabled={props.disabled || props.readonly}\r\n />\r\n </Form.Group>\r\n )}\r\n\r\n </fieldset>;\r\n};\r\n\r\nconst DefaultFixedArrayFieldTemplate = (props: ArrayFieldTemplateProps) => {\r\n return (\r\n <fieldset className={props.className}>\r\n <ArrayFieldTitle\r\n key={`array-field-title-${props.idSchema.$id}`}\r\n TitleField={props.TitleField}\r\n idSchema={props.idSchema}\r\n title={props.uiSchema['ui:title'] || props.title}\r\n required={props.required}\r\n />\r\n\r\n {(props.uiSchema['ui:description'] || props.schema.description) && (\r\n <div\r\n className=\"field-description\"\r\n key={`field-description-${props.idSchema.$id}`}>\r\n {props.uiSchema['ui:description'] || props.schema.description}\r\n </div>\r\n )}\r\n\r\n {props.items && props.items.map(p => DefaultArrayItem(p))}\r\n\r\n {props.canAdd && (\r\n <AddButton\r\n className=\"array-item-add\"\r\n onClick={props.onAddClick}\r\n disabled={props.disabled || props.readonly}\r\n />\r\n )}\r\n </fieldset>\r\n );\r\n};\r\n","import { WidgetProps } from '@rjsf/core';\r\nimport { Form } from 'react-bootstrap';\r\nimport { ChangeEvent, FocusEvent, ForwardedRef, forwardRef } from 'react';\r\n\r\n\r\nexport interface TextWidgetProps extends WidgetProps {\r\n type?: string;\r\n}\r\n\r\nconst TextWidget = forwardRef(({\r\n id,\r\n placeholder,\r\n required,\r\n readonly,\r\n disabled,\r\n type,\r\n value,\r\n onChange,\r\n onBlur,\r\n onFocus,\r\n autofocus,\r\n options,\r\n schema,\r\n rawErrors = [],\r\n}: TextWidgetProps, ref: ForwardedRef<HTMLInputElement>) => {\r\n const _onChange = ({\r\n target: { value },\r\n }: ChangeEvent<HTMLInputElement>) =>\r\n onChange(value === '' ? options.emptyValue : value);\r\n const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) =>\r\n onBlur(id, value);\r\n const _onFocus = ({\r\n target: { value },\r\n }: FocusEvent<HTMLInputElement>) => onFocus(id, value);\r\n const inputType = (type || schema.type) === 'string' ? 'text' : `${type || schema.type}`;\r\n\r\n return (\r\n <>\r\n <Form.Control\r\n id={id}\r\n ref={ref}\r\n placeholder={placeholder}\r\n autoFocus={autofocus}\r\n required={required}\r\n disabled={disabled}\r\n readOnly={readonly}\r\n className={rawErrors.length > 0 ? 'is-invalid' : ''}\r\n list={schema.examples ? `examples_${id}` : undefined}\r\n type={inputType}\r\n value={value || value === 0 ? value : ''}\r\n onChange={_onChange}\r\n onBlur={_onBlur}\r\n onFocus={_onFocus}\r\n />\r\n {schema.examples ? (\r\n <datalist id={`examples_${id}`}>\r\n {(schema.examples as string[])\r\n .concat(schema.default ? ([schema.default] as string[]) : [])\r\n .map((example: any) => {\r\n return <option key={example} value={example} />;\r\n })}\r\n </datalist>\r\n ) : null}\r\n </>\r\n );\r\n});\r\n\r\nexport default TextWidget;\r\n","import { ThemeProps, utils, withTheme } from '@rjsf/core';\r\nimport FieldTemplate from './templates/field-template';\r\nimport ObjectFieldTemplate from './templates/object-field-template';\r\nimport ArrayFieldTemplate from './templates/array-field-template';\r\nimport TextWidget from './widgets/text-widget';\r\nimport DescriptionField from './fileds/description-field';\r\nimport CheckboxWidget from './widgets/checkbox-widget';\r\nimport ErrorList from './error-list';\r\n\r\nconst { getDefaultRegistry } = utils;\r\nconst { fields, widgets } = getDefaultRegistry();\r\n\r\nconst Theme: ThemeProps = {\r\n className: 'row g-3',\r\n FieldTemplate: FieldTemplate,\r\n ObjectFieldTemplate: ObjectFieldTemplate,\r\n ArrayFieldTemplate: ArrayFieldTemplate,\r\n widgets: {\r\n ...widgets,\r\n TextWidget,\r\n CheckboxWidget,\r\n },\r\n fields: {\r\n ...fields,\r\n DescriptionField,\r\n },\r\n ErrorList: ErrorList\r\n};\r\n\r\nexport default withTheme(Theme);\r\n","import { FieldTemplateProps } from '@rjsf/core';\r\nimport { Form } from 'react-bootstrap';\r\n\r\nexport default function FieldTemplate(props: FieldTemplateProps) {\r\n const {\r\n children,\r\n displayLabel,\r\n rawErrors = [],\r\n rawHelp,\r\n rawDescription,\r\n label,\r\n schema,\r\n required,\r\n id\r\n } = props;\r\n\r\n if (id === 'root') {\r\n return children;\r\n }\r\n\r\n return <Form.Group className='col-12'>\r\n {displayLabel && <Form.Label className={rawErrors.length > 0 ? 'text-danger' : ''}>\r\n {label || schema.title}\r\n {(label || schema.title) && required ? '*' : null}\r\n </Form.Label>}\r\n {children}\r\n {displayLabel && rawDescription ? (\r\n <Form.Text className={rawErrors.length > 0 ? 'text-danger' : 'text-muted'}>\r\n {rawDescription}\r\n </Form.Text>\r\n ) : null}\r\n {rawErrors.length > 0 && (\r\n rawErrors.map((error: string, index: number) => {\r\n return (<Form.Control.Feedback key={index} type='invalid'>\r\n {error}\r\n </Form.Control.Feedback>);\r\n })\r\n )}\r\n {rawHelp && (\r\n <Form.Text muted>{rawHelp}</Form.Text>\r\n )}\r\n </Form.Group>;\r\n}\r\n","import { ObjectFieldTemplateProps } from '@rjsf/core';\r\n\r\nexport default function ObjectFieldTemplate({\r\n DescriptionField,\r\n description,\r\n TitleField,\r\n title,\r\n properties,\r\n required,\r\n uiSchema,\r\n idSchema\r\n}: ObjectFieldTemplateProps) {\r\n const children = <>\r\n {(uiSchema['ui:title'] || title) && (\r\n <TitleField\r\n id={`${idSchema.$id}-title`}\r\n title={title}\r\n required={required}\r\n />\r\n )}\r\n {description && (\r\n <DescriptionField\r\n id={`${idSchema.$id}-description`}\r\n description={description}\r\n />\r\n )}\r\n {properties.map((element) => (\r\n element.content\r\n ))}\r\n </>;\r\n\r\n return idSchema.$id === 'root' ? children :\r\n <fieldset id={idSchema.$id}>\r\n {children}\r\n </fieldset>;\r\n}\r\n","import { WidgetProps } from '@rjsf/core';\r\nimport { Form } from 'react-bootstrap';\r\nimport { FocusEvent } from 'react';\r\n\r\nexport default function CheckboxWidget(props: WidgetProps) {\r\n const {\r\n id,\r\n value,\r\n required,\r\n disabled,\r\n readonly,\r\n label,\r\n schema,\r\n autofocus,\r\n onChange,\r\n onBlur,\r\n onFocus,\r\n } = props;\r\n\r\n const _onChange = ({\r\n target: { checked },\r\n }: FocusEvent<HTMLInputElement>) => onChange(checked);\r\n const _onBlur = ({\r\n target: { checked },\r\n }: FocusEvent<HTMLInputElement>) => onBlur(id, checked);\r\n const _onFocus = ({\r\n target: { checked },\r\n }: FocusEvent<HTMLInputElement>) => onFocus(id, checked);\r\n\r\n const desc = label || schema.description;\r\n\r\n return <Form.Check\r\n id={id}\r\n label={desc}\r\n checked={typeof value === 'undefined' ? false : value}\r\n required={required}\r\n disabled={disabled || readonly}\r\n autoFocus={autofocus}\r\n onChange={_onChange}\r\n type=\"switch\"\r\n onBlur={_onBlur}\r\n onFocus={_onFocus}\r\n />;\r\n}\r\n","import { FieldProps } from '@rjsf/core';\r\n\r\nexport interface DescriptionFieldProps extends Partial<FieldProps> {\r\n description?: string;\r\n}\r\n\r\nexport default function DescriptionField({ description }: Partial<DescriptionFieldProps>) {\r\n if (description) {\r\n return <p className='text-black-50'>\r\n {description}\r\n </p>;\r\n }\r\n\r\n return null;\r\n}\r\n","import { ErrorListProps } from '@rjsf/core';\r\nimport { Alert } from 'react-bootstrap';\r\n\r\nexport default function ErrorList({ errorSchema }: ErrorListProps) {\r\n return <div className='col-12'>\r\n <Alert className='mb-0' variant='danger'>\r\n <ul className='mb-0'>\r\n {'__errors' in errorSchema\r\n ? <li>{errorSchema.__errors}</li>\r\n : Object.entries(errorSchema).map(([name, error]) => <li key={name}>{error.__errors}</li>)\r\n }\r\n </ul>\r\n </Alert>\r\n </div>;\r\n}\r\n","import { AjvError, default as IForm, FormProps as IFormProps, ISubmitEvent } from '@rjsf/core';\r\nimport JsonForm from './json-form';\r\nimport * as React from 'react';\r\nimport {\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n PropsWithoutRef,\r\n RefAttributes,\r\n useCallback,\r\n useImperativeHandle,\r\n useRef,\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\n\r\nconst localize = require('ajv-i18n/localize/zh');\r\n\r\nexport interface FormProps<T = any> extends IFormProps<T> {\r\n onSuccess?: (data: any) => void;\r\n method?: Method;\r\n}\r\n\r\ndeclare module '@rjsf/core' {\r\n export default interface Form<T> {\r\n formElement: HTMLFormElement;\r\n }\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 type FormType = {\r\n submit: () => unknown\r\n}\r\n\r\ntype CustomForm<T = any> = ForwardRefExoticComponent<PropsWithoutRef<FormProps<T>> & RefAttributes<FormType>>\r\n\r\nconst Form: CustomForm = forwardRef(({\r\n action,\r\n method = 'post',\r\n onSuccess,\r\n formData,\r\n onSubmit,\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 formRef = useRef<IForm<any>>();\r\n\r\n const callbackRef = useRef<{\r\n resolve: (value: unknown) => void,\r\n reject: () => void\r\n }>();\r\n\r\n useImperativeHandle(ref, () => {\r\n return {\r\n submit() {\r\n if (!loading) {\r\n formRef.current!.formElement.dispatchEvent(new CustomEvent('submit', {\r\n bubbles: true,\r\n cancelable: true\r\n }));\r\n return new Promise((resolve, reject) => {\r\n callbackRef.current = {\r\n resolve,\r\n reject\r\n };\r\n });\r\n }\r\n }\r\n } as IForm<any>;\r\n });\r\n\r\n const handleSubmit = useCallback(async (e: ISubmitEvent<any>, nativeEvent: React.FormEvent<HTMLFormElement>) => {\r\n if (action) {\r\n const { formData } = e;\r\n try {\r\n setLoading(true);\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 callbackRef.current?.resolve(data);\r\n } catch (e) {\r\n callbackRef.current?.reject();\r\n if (axios.isAxiosError(e)) {\r\n setExtraErrors(toExtraErrors(e));\r\n } else {\r\n throw e;\r\n }\r\n } finally {\r\n setLoading(false);\r\n callbackRef.current = undefined;\r\n }\r\n\r\n } else if (onSubmit) {\r\n onSubmit(e, nativeEvent);\r\n }\r\n\r\n }, [action, method, onSubmit, callbackRef]);\r\n\r\n const handleChange = useCallback(({ formData }: ISubmitEvent<any>) => {\r\n setData(formData);\r\n }, [setData]);\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 return errors;\r\n }, []);\r\n\r\n return <JsonForm\r\n ref={formRef}\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 onClick={handleChange(allPages)} />;\r\n firstPager = <BsPagination.First onClick={handleChange(1)} />;\r\n jumpPrev = <BsPagination.Prev onClick={handleChange(prevPage)} />;\r\n jumpNext = <BsPagination.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 = (props: BsTableProps) => {\r\n return <BsTable {...props} className='align-middle table-hover' />;\r\n};\r\n\r\nconst components: RcTableProps['components'] = {\r\n table: CustomTable,\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 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 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'> &\r\n Pick<FormProps<T>, 'schema' | 'formData' | 'uiSchema' | 'action' | 'method' | 'onSuccess'>\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}: 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 const result = await form.current?.submit();\r\n if (onSuccess) {\r\n onSuccess(result);\r\n }\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}>\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 >\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"],"names":["FooterWrapper","styled","footer","FooterInner","div","FooterLinks","ul","Copyright","Footer","_jsx","_jsxs","className","src","height","href","formatRelativePath","routes","parent","menus","route","meta","_route$meta","hideInMenu","title","_route$meta2","path","replace","menu","children","_route$meta3","hideChildrenInMenu","length","push","Container","Sidebar","nav","Header","Content","Main","main","Menu","RcMenu","renderMenuItems","items","map","item","SubMenu","MenuItem","Link","to","SiderLayout","basename","useRoutes","useMemo","base","getMenuData","pathname","useLocation","openKeys","keys","split","reduce","pre","curr","join","mode","defaultOpenKeys","selectedKeys","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","Dropdown","navbar","Toggle","as","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","redirectUri","origin","errors","name","Login","parsed","queryString","parse","hash","substr","setItem","access_token","Navigate","Logout","useEffect","catch","removeItem","Root","React","StrictMode","BrowserRouter","Routes","Route","element","Wrap","BsCard","Card","border","Error","Alert","Object","entries","UserContext","createContext","UserProvider","Provider","useUser","user","useContext","Access","require","fallback","passed","intersection","roles","Space","size","small","middle","large","Children","child","Item","NumberFormat","value","locale","currency","formatter","style","minimumFractionDigits","Intl","format","LoadingButton","Button","disabled","RequestButton","onSuccess","setDisabled","useState","handleClick","useCallback","preventDefault","text","result","values","createElement","onClick","AddButton","mappings","remove","plus","IconButton","otherProps","isMultiSelect","getDefaultRegistry","utils","ArrayFieldTitle","TitleField","idSchema","required","id","$id","ArrayFieldDescription","DescriptionField","description","DefaultArrayItem","btnStyle","flex","paddingLeft","paddingRight","fontWeight","hasToolbar","ButtonGroup","hasMoveUp","hasMoveDown","tabIndex","readonly","onReorderClick","index","hasRemove","onDropIndexClick","DefaultNormalArrayFieldTemplate","uiSchema","schema","p","canAdd","Form","Group","onAddClick","DefaultFixedArrayFieldTemplate","TextWidget","forwardRef","placeholder","type","onChange","onBlur","onFocus","autofocus","rawErrors","ref","inputType","Control","autoFocus","readOnly","list","examples","target","emptyValue","concat","default","example","fields","widgets","withTheme","FieldTemplate","displayLabel","rawHelp","rawDescription","label","Label","Text","Feedback","muted","ObjectFieldTemplate","properties","content","ArrayFieldTemplate","registry","rootSchema","CheckboxWidget","desc","Check","checked","ErrorList","errorSchema","__errors","localize","action","formData","onSubmit","extraErrors","setExtraErrors","setLoading","setData","formRef","useRef","callbackRef","useImperativeHandle","submit","current","formElement","dispatchEvent","CustomEvent","bubbles","cancelable","resolve","handleSubmit","nativeEvent","mapValues","toExtraErrors","handleChange","transformErrors","keyword","dataPath","property","JsonForm","noHtml5Validate","noValidate","Body","noop","isInteger","isFinite","Math","floor","components","table","BsTable","CustomPagination","total","defaultCurrent","defaultPageSize","setCurrent","pageSize","setPageSize","allPages","prevPage","nextPage","pagerList","jumpPrev","jumpNext","firstPager","lastPager","i","BsPagination","Last","First","Prev","Next","left","max","right","min","pageBufferSize","unshift","Table","source","rowKey","paginate","toolBarRender","columns","pagination","setPagination","fetchData","params","page","isPagination","current_page","per_page","reload","customColumns","column","customColumn","render","defaultRender","record","handlePageChange","LeftTools","RightTools","Action","RcTable","span","ModalButton","header","onOk","show","setShow","handleClose","close","Modal","onHide","closeButton","ModalForm","form","modal","handleOk","_form$current","Fragment","useRequest","manual","refreshDeps","execute","currentParams","others","useAsyncCallback","refresh"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/footer.tsx","../src/images/logo_dark.svg","../src/utils/get-menu-data.ts","../src/layout/sider.tsx","../src/utils/message.ts","../src/components/result.tsx","../src/components/header.tsx","../src/images/logo.svg","../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"],"sourcesContent":["import styled from 'styled-components';\r\nimport logo from '../images/logo_dark.svg';\r\n\r\nconst FooterWrapper = styled.footer`\r\n background-color: #505050;\r\n color: #9f9f9f;\r\n padding: 65px 0 30px 0;\r\n\r\n .container {\r\n padding: 0 100px;\r\n }\r\n`;\r\n\r\nconst FooterInner = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n`;\r\n\r\nconst FooterLinks = styled.ul`\r\n display: flex;\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n\r\n li {\r\n margin-left: 60px;\r\n\r\n a {\r\n text-decoration: none;\r\n color: #9f9f9f;\r\n font-size: 20px;\r\n }\r\n }\r\n`;\r\n\r\nconst Copyright = styled.div`\r\n text-align: center;\r\n margin-top: 75px;\r\n`;\r\n\r\n\r\nexport default function Footer() {\r\n return <FooterWrapper>\r\n <div className='container'>\r\n <FooterInner>\r\n <img src={logo} height='40' />\r\n <FooterLinks>\r\n <li><a href='#'>关于我们</a></li>\r\n <li><a href='#'>联系我们</a></li>\r\n <li><a href='#'>加入我们</a></li>\r\n <li><a href='#'>合作伙伴</a></li>\r\n </FooterLinks>\r\n </FooterInner>\r\n <Copyright>\r\n © 2021 上海顶想信息科技有限公司 沪ICP备12007941号-1\r\n </Copyright>\r\n </div>\r\n </FooterWrapper>;\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:%239f9f9f%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 { PartialRouteObject } 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: PartialRouteObject[],\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: PartialRouteObject[], 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 { PartialRouteObject } from 'react-router';\r\nimport getMenuData, { MenuData } from '../utils/get-menu-data';\r\nimport type { CSSMotionProps } from 'rc-motion';\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: 60px 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-top: 10px;\r\n height: 54px;\r\n line-height: 44px;\r\n text-indent: 24px;\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 - 60px);\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: 10px 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\r\ninterface Props {\r\n title: string;\r\n routes: PartialRouteObject[];\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 }, []);\r\n\r\n return <Container>\r\n <Sidebar>\r\n <Header>{title}</Header>\r\n <Menu mode='inline' motion={motion} defaultOpenKeys={openKeys} selectedKeys={[pathname]}>\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","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","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 <header 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-sm'}>\r\n {menus}\r\n </Dropdown.Menu>\r\n </Dropdown>\r\n </div>\r\n </div>\r\n </header>;\r\n}\r\n","var img = \"data:image/svg+xml,%3csvg width='485' height='132' xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='enable-background:new 0 0 531.69 198.43%3b' version='1.1'%3e %3cstyle type='text/css'%3e.st0%7bfill:%233C60FF%3b%7d%3c/style%3e %3cg%3e %3ctitle%3ebackground%3c/title%3e %3crect fill='none' id='canvas_background' height='134' width='487' y='-1' x='-1'/%3e %3c/g%3e %3cg%3e %3ctitle%3eLayer 1%3c/title%3e %3cpath id='svg_1' d='m132.29%2c62.34c-1.19%2c-18.77 -10.34%2c-35.36 -24.11%2c-46.46c-11.15%2c-8.99 -25.34%2c-14.38 -40.79%2c-14.38c-0.55%2c0 -1.09%2c0.01 -1.63%2c0.02c-3.32%2c0.08 -6.57%2c0.41 -9.75%2c0.98c-30.49%2c5.38 -53.65%2c32 -53.65%2c64.04c0%2c1.87 0.08%2c3.73 0.24%2c5.57c2.5%2c29.51 24.7%2c53.4 53.41%2c58.47c2.38%2c0.42 4.8%2c0.72 7.26%2c0.86c0.83%2c0.05 1.66%2c0.09 2.5%2c0.11c0.54%2c0.01 1.08%2c0.02 1.63%2c0.02c34.04%2c0 61.97%2c-26.16 64.79%2c-59.46c0.16%2c-1.83 0.24%2c-3.69 0.24%2c-5.57c0%2c-1.42 -0.05%2c-2.82 -0.14%2c-4.2zm-76.27%2c32.5c-0.26%2c0.01 -0.53%2c0.01 -0.79%2c0.01c-14.56%2c0 -26.88%2c-9.57 -31.03%2c-22.76c-0.97%2c-3.08 -1.49%2c-6.35 -1.49%2c-9.75c0%2c-17.95 14.56%2c-32.52 32.51%2c-32.52c0.26%2c0 0.53%2c0 0.79%2c0.01c3.41%2c0.08 6.69%2c0.68 9.75%2c1.74c6.5%2c2.22 12.06%2c6.45 15.97%2c11.94c1.98%2c2.78 3.54%2c5.9 4.57%2c9.25c0.94%2c3.03 1.44%2c6.24 1.44%2c9.58l-9.75%2c0c0%2c-2.18 -0.31%2c-4.29 -0.88%2c-6.28c-0.92%2c-3.23 -2.55%2c-6.17 -4.69%2c-8.64c-1.86%2c-2.14 -4.12%2c-3.93 -6.65%2c-5.25c-2.93%2c-1.54 -6.24%2c-2.46 -9.75%2c-2.58c-0.26%2c-0.01 -0.52%2c-0.01 -0.79%2c-0.01c-12.57%2c0 -22.76%2c10.19 -22.76%2c22.76c0%2c3.49 0.79%2c6.8 2.19%2c9.75c3.65%2c7.69 11.49%2c13.01 20.57%2c13.01c0.27%2c0 0.53%2c-0.01 0.79%2c-0.01l0%2c9.75zm55.7%2c-17.92c-3.35%2c10.5 -13.18%2c18.09 -24.78%2c18.09c-3.13%2c0 -6.13%2c-0.55 -8.91%2c-1.57c-2.18%2c-0.8 -4.24%2c-1.88 -6.11%2c-3.21c-2.38%2c-1.68 -4.47%2c-3.76 -6.16%2c-6.13c-0.28%2c-0.39 -0.55%2c-0.79 -0.81%2c-1.2c-2.03%2c-3.2 -3.38%2c-6.87 -3.85%2c-10.82l9.87%2c0c0.33%2c1.71 0.92%2c3.32 1.74%2c4.8c1.61%2c2.91 4.09%2c5.26 7.09%2c6.72c0.57%2c0.28 1.15%2c0.53 1.76%2c0.73c1.68%2c0.6 3.49%2c0.92 5.37%2c0.92c7.92%2c0 14.52%2c-5.67 15.96%2c-13.17c0.2%2c-1 0.3%2c-2.04 0.3%2c-3.09c0%2c-2.37 -0.51%2c-4.63 -1.43%2c-6.67c-1.66%2c-3.71 -4.68%2c-6.68 -8.43%2c-8.28l3.54%2c-9.1c7.43%2c3.08 13.13%2c9.49 15.21%2c17.38c0.44%2c1.64 0.72%2c3.34 0.81%2c5.09c0.04%2c0.52 0.05%2c1.05 0.05%2c1.58c0%2c1.05 -0.07%2c2.07 -0.18%2c3.09c-0.18%2c1.68 -0.54%2c3.3 -1.04%2c4.84z' class='st0'/%3e %3cg id='svg_2'%3e %3cg id='svg_3'%3e %3crect id='svg_4' height='6.34' width='94.12' class='st0' y='20.46' x='163.29'/%3e %3c/g%3e %3cg id='svg_5'%3e %3cpath id='svg_6' d='m169.31%2c113.72l0%2c-6.34c6.49%2c0 11.77%2c-5.28 11.77%2c-11.77l0%2c-71.98l6.34%2c0l0%2c71.98c0%2c9.98 -8.12%2c18.11 -18.11%2c18.11z' class='st0'/%3e %3c/g%3e %3cg id='svg_7'%3e %3cpath id='svg_8' d='m255.49%2c91.27l-6.34%2c0l0%2c-38.2c0%2c-5.06 -4.12%2c-9.18 -9.18%2c-9.18l-19.37%2c0c-5.06%2c0 -9.18%2c4.12 -9.18%2c9.18l0%2c38.2l-6.34%2c0l0%2c-38.2c0%2c-8.55 6.96%2c-15.51 15.51%2c-15.51l19.38%2c0c8.55%2c0 15.51%2c6.96 15.51%2c15.51l0%2c38.2l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_9'%3e %3crect id='svg_10' height='17.09' width='6.34' class='st0' y='23.63' x='227.12'/%3e %3c/g%3e %3cg id='svg_11'%3e %3cpath id='svg_12' d='m206.43%2c113.84l-3.34%2c0l0%2c-6.34l3.34%2c0c6.3%2c0 12.9%2c-3.56 15.35%2c-8.29c3.49%2c-6.71 5.33%2c-14.25 5.33%2c-21.81l0%2c-26.13l6.34%2c0l0%2c26.13c0%2c8.58 -2.09%2c17.13 -6.05%2c24.74c-3.98%2c7.68 -13.57%2c11.7 -20.97%2c11.7z' class='st0'/%3e %3c/g%3e %3cg id='svg_13'%3e %3cpath id='svg_14' d='m257.48%2c113.84l-3.34%2c0c-7.4%2c0 -16.98%2c-4.02 -20.98%2c-11.7c-3.96%2c-7.61 -6.05%2c-16.16 -6.05%2c-24.74l6.34%2c0c0%2c7.56 1.84%2c15.1 5.33%2c21.81c2.46%2c4.73 9.06%2c8.29 15.35%2c8.29l3.34%2c0l0%2c6.34l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_15'%3e %3crect id='svg_16' height='6.34' width='42.87' class='st0' y='27.89' x='274.07'/%3e %3c/g%3e %3cg id='svg_17'%3e %3crect id='svg_18' height='61.38' width='6.34' class='st0' y='14.89' x='293.05'/%3e %3c/g%3e %3cg id='svg_19'%3e %3crect id='svg_20' height='6.34' width='33.26' class='st0' transform='matrix(0.11%2c-0.9939%2c0.9939%2c0.11%2c194.7608%2c392.0006) ' y='46.985071' x='325.728637'/%3e %3c/g%3e %3cg id='svg_21'%3e %3crect id='svg_22' height='33.26' width='6.34' class='st0' transform='matrix(0.9939%2c-0.11%2c0.11%2c0.9939%2c-7.5075%2c38.3801) ' y='37.060893' x='310.495485'/%3e %3c/g%3e %3cg id='svg_23'%3e %3cpath id='svg_24' d='m352.9%2c77.14l-15.15%2c0c-7.52%2c0 -13.64%2c-6.12 -13.64%2c-13.63l0%2c-29.61c0%2c-7.52 6.12%2c-13.64 13.64%2c-13.64l15.15%2c0c7.52%2c0 13.64%2c6.12 13.64%2c13.64l0%2c29.61c0%2c7.52 -6.12%2c13.63 -13.64%2c13.63zm-15.15%2c-50.54c-4.02%2c0 -7.3%2c3.27 -7.3%2c7.3l0%2c29.61c0%2c4.02 3.27%2c7.3 7.3%2c7.3l15.15%2c0c4.02%2c0 7.3%2c-3.27 7.3%2c-7.3l0%2c-29.61c0%2c-4.02 -3.27%2c-7.3 -7.3%2c-7.3l-15.15%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_25'%3e %3cg id='svg_26'%3e %3crect id='svg_27' height='6.34' width='17.8' class='st0' y='37.2' x='336.43'/%3e %3c/g%3e %3cg id='svg_28'%3e %3crect id='svg_29' height='6.34' width='17.8' class='st0' y='53.87' x='336.43'/%3e %3c/g%3e %3c/g%3e %3cg id='svg_30'%3e %3cpath id='svg_31' d='m352.7%2c113.84l-37.98%2c0c-8%2c0 -14.5%2c-6.51 -14.5%2c-14.5l0%2c-16.14l6.34%2c0l0%2c16.13c0%2c4.5 3.66%2c8.17 8.17%2c8.17l37.98%2c0l0%2c6.34l-0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_32'%3e %3crect id='svg_33' height='6.34' width='23.57' class='st0' transform='matrix(0.2529%2c-0.9675%2c0.9675%2c0.2529%2c114.4986%2c402.9877) ' y='83.698593' x='326.836101'/%3e %3c/g%3e %3cg id='svg_34'%3e %3crect id='svg_35' height='6.34' width='20.52' class='st0' y='86.2' x='321.58'/%3e %3c/g%3e %3cg id='svg_36'%3e %3crect id='svg_37' height='24.75' width='6.34' class='st0' transform='matrix(0.9556%2c-0.2946%2c0.2946%2c0.9556%2c-19.7967%2c122.424) ' y='75.874073' x='369.686666'/%3e %3c/g%3e %3cg id='svg_38'%3e %3crect id='svg_39' height='6.34' width='71.83' class='st0' y='20.46' x='395.51'/%3e %3c/g%3e %3cg id='svg_40'%3e %3crect id='svg_41' height='6.34' width='90.81' class='st0' y='57.44' x='386.02'/%3e %3c/g%3e %3cg id='svg_42'%3e %3cpath id='svg_43' d='m463.12%2c113.64l-56%2c0c-4.5%2c0 -8.59%2c-2.29 -10.94%2c-6.14c-2.35%2c-3.84 -2.52%2c-8.53 -0.46%2c-12.53l17.68%2c-35.81l5.64%2c2.89l-17.68%2c35.81c-1.04%2c2.02 -0.95%2c4.39 0.23%2c6.33c1.19%2c1.94 3.25%2c3.1 5.53%2c3.1l56%2c0c1.51%2c0 2.88%2c-0.71 3.74%2c-1.95c0.81%2c-1.16 1.03%2c-2.57 0.63%2c-3.91l-7.8%2c-12.34l5.36%2c-3.39l8.18%2c12.94l0.12%2c0.31c1.24%2c3.34 0.76%2c7.08 -1.28%2c10.01c-2.04%2c2.94 -5.39%2c4.68 -8.95%2c4.68z' class='st0'/%3e %3c/g%3e %3c/g%3e %3c/g%3e%3c/svg%3e\";\n export default img;","import styled from 'styled-components';\r\n\r\nexport const Dimmable = styled.div`\r\n position: relative;\r\n`;\r\n\r\ninterface DimmerProps {\r\n active?: boolean\r\n inverted?: boolean\r\n}\r\n\r\nconst Dimmer = styled.div<DimmerProps>`\r\n display: ${props => props.active ? 'flex' : 'none'};\r\n position: absolute;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n vertical-align: middle;\r\n padding: 1em;\r\n background-color: ${props => props.inverted ? 'rgba(255, 255, 255, .85)' : 'rgba(0, 0, 0, .85)'};\r\n opacity: ${props => props.active ? 1 : 0};\r\n line-height: 1;\r\n animation-fill-mode: both;\r\n animation-duration: .5s;\r\n transition: background-color .5s linear;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n user-select: none;\r\n will-change: opacity;\r\n z-index: 990;\r\n`;\r\n\r\nexport default Dimmer;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Spinner, SpinnerProps } from 'react-bootstrap';\r\nimport Dimmer from './dimmer';\r\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 const redirectUri = window.location.origin + '/login';\r\n window.location.href = `${url}&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 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 return <Navigate to='/' 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 styled from 'styled-components';\r\nimport { Card as BsCard, CardProps as BsCardProps } from 'react-bootstrap';\r\n\r\ninterface CardProps extends BsCardProps {\r\n title?: string;\r\n}\r\n\r\nconst Wrap = styled(BsCard)`\r\n margin-bottom: 1rem;\r\n`;\r\n\r\nexport default function Card({ children, title, border = 'light', ...props }: PropsWithChildren<CardProps>) {\r\n\r\n return <Wrap border={border} {...props}>\r\n <div className='card-body'>\r\n {title && <div className='card-title h5'>{title}</div>}\r\n {children}\r\n </div>\r\n </Wrap>;\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, { useContext } from 'react';\r\n\r\nexport interface User {\r\n id: number\r\n name: string\r\n email: string\r\n mobile: string\r\n is_certified: boolean\r\n roles: []\r\n}\r\n\r\nconst UserContext = React.createContext<User | null>(null);\r\n\r\nconst UserProvider = UserContext.Provider;\r\n\r\nexport function useUser() {\r\n const user = useContext(UserContext);\r\n if (!user) {\r\n throw new Error('please use `useUser` in UserContext');\r\n }\r\n\r\n return user;\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, useCallback, useState, MouseEvent } from 'react';\r\nimport Message from '../utils/message';\r\nimport axios, { AxiosRequestConfig } from 'axios';\r\n\r\ninterface Props extends ButtonProps {\r\n url: Config;\r\n method?: AxiosRequestConfig['method'];\r\n confirm?: string;\r\n onSuccess?: (result: any) => void;\r\n}\r\n\r\nexport default function RequestButton({ url, method, confirm, onSuccess, children, as = Button, ...props }: Props) {\r\n\r\n const [disabled, setDisabled] = useState(false);\r\n\r\n const handleClick = useCallback(async (e: MouseEvent) => {\r\n e.preventDefault();\r\n try {\r\n setDisabled(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 setDisabled(false);\r\n }\r\n }, [url, method]);\r\n\r\n return createElement(as, {\r\n ...props,\r\n disabled,\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 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(({ formData }: ISubmitEvent<any>) => {\r\n setData(formData);\r\n }, [setData]);\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 = (props: BsTableProps) => {\r\n return <BsTable {...props} className='align-middle table-hover' />;\r\n};\r\n\r\nconst components: RcTableProps['components'] = {\r\n table: CustomTable,\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'>\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 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 const result = await form.current?.submit();\r\n if (onSuccess) {\r\n onSuccess(result);\r\n }\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 >\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"],"names":["FooterWrapper","styled","footer","FooterInner","div","FooterLinks","ul","Copyright","Footer","_jsx","_jsxs","className","src","height","href","formatRelativePath","routes","parent","menus","route","meta","_route$meta","hideInMenu","title","_route$meta2","path","replace","menu","children","_route$meta3","hideChildrenInMenu","length","push","Container","Sidebar","nav","Header","Content","Main","main","Menu","RcMenu","renderMenuItems","items","map","item","SubMenu","MenuItem","Link","to","collapseNode","expandNode","node","scrollHeight","motion","motionName","motionAppear","onAppearStart","onAppearActive","onEnterStart","onEnterActive","onLeaveStart","onLeaveActive","SiderLayout","basename","useRoutes","useMemo","base","getMenuData","pathname","useLocation","openKeys","keys","split","reduce","pre","curr","join","mode","defaultOpenKeys","selectedKeys","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","Dropdown","navbar","Toggle","as","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","redirectUri","origin","errors","name","Login","parsed","queryString","parse","hash","substr","setItem","access_token","Navigate","Logout","useEffect","catch","removeItem","Root","BrowserRouter","Routes","Route","element","Wrap","BsCard","Card","border","Error","Alert","Object","entries","UserContext","React","createContext","UserProvider","Provider","useUser","user","useContext","Access","require","fallback","passed","intersection","roles","Space","size","small","middle","large","Children","child","Item","NumberFormat","value","locale","currency","formatter","style","minimumFractionDigits","Intl","format","LoadingButton","Button","disabled","RequestButton","onSuccess","setDisabled","useState","handleClick","useCallback","preventDefault","text","result","values","createElement","onClick","localize","Form","forwardRef","action","formData","onSubmit","ref","extraErrors","setExtraErrors","setLoading","setData","handleSubmit","nativeEvent","__errors","mapValues","toExtraErrors","handleChange","transformErrors","keyword","dataPath","property","JsonForm","noHtml5Validate","noValidate","onChange","type","Body","noop","isInteger","isFinite","Math","floor","components","table","BsTable","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","Table","source","rowKey","paginate","toolBarRender","columns","pagination","setPagination","fetchData","params","page","isPagination","current_page","per_page","useRef","reload","useImperativeHandle","customColumns","column","customColumn","render","defaultRender","record","index","handlePageChange","LeftTools","RightTools","Action","RcTable","span","ModalButton","header","onOk","show","setShow","handleClose","close","Modal","onHide","closeButton","ModalForm","schema","uiSchema","form","modal","handleOk","_form$current","submit","Fragment","useRequest","manual","refreshDeps","execute","currentParams","others","useAsyncCallback","refresh"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topthink/common",
3
- "version": "1.0.8",
3
+ "version": "1.0.12",
4
4
  "scripts": {
5
5
  "build": "rollup -c --environment NODE_ENV:production",
6
6
  "build:dev": "rollup -c",
@@ -15,8 +15,8 @@
15
15
  "scss"
16
16
  ],
17
17
  "dependencies": {
18
- "@rjsf/core": "^3.0.0",
19
18
  "@topthink/bootstrap": "^1.0.4",
19
+ "@topthink/json-form": "^1.0.5",
20
20
  "@types/lodash": "^4.14.161",
21
21
  "ajv-i18n": "^4.0.0",
22
22
  "axios": "^0.21.1",
@@ -64,5 +64,5 @@
64
64
  },
65
65
  "author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
66
66
  "license": "MIT",
67
- "gitHead": "3e7cbb2c092f77ed99ad2c006f2ac0c2efb4be54"
67
+ "gitHead": "33306ae25be41d8fb8eba7aa6b2caca0b771be0c"
68
68
  }
@@ -1,18 +1,12 @@
1
- import { FormProps as IFormProps } from '@rjsf/core';
1
+ import { JsonFormProps, JsonFormType } from '@topthink/json-form';
2
2
  import { ForwardRefExoticComponent, PropsWithoutRef, RefAttributes } from 'react';
3
3
  import { Method } from 'axios';
4
- export interface FormProps<T = any> extends IFormProps<T> {
4
+ export interface FormProps<T = any> extends JsonFormProps<T> {
5
5
  onSuccess?: (data: any) => void;
6
6
  method?: Method;
7
7
  }
8
- declare module '@rjsf/core' {
9
- export default interface Form<T> {
10
- formElement: HTMLFormElement;
11
- }
8
+ export interface FormType extends JsonFormType {
12
9
  }
13
- export declare type FormType = {
14
- submit: () => unknown;
15
- };
16
- declare type CustomForm<T = any> = ForwardRefExoticComponent<PropsWithoutRef<FormProps<T>> & RefAttributes<FormType>>;
17
- declare const Form: CustomForm;
10
+ declare type Form<T = any> = ForwardRefExoticComponent<PropsWithoutRef<FormProps<T>> & RefAttributes<FormType>>;
11
+ declare const Form: Form;
18
12
  export default Form;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { ModalButtonProps } from './modal-button';
3
3
  import { FormProps } from './form';
4
- export declare type ModalFormProps<T = any> = Pick<ModalButtonProps, 'text' | 'variant' | 'header'> & Pick<FormProps<T>, 'schema' | 'formData' | 'uiSchema' | 'action' | 'method' | 'onSuccess'>;
5
- export default function ModalForm<T = any>({ text, header, schema, uiSchema, action, method, formData, variant, onSuccess }: ModalFormProps<T>): JSX.Element;
4
+ export declare type ModalFormProps<T = any> = Pick<ModalButtonProps, 'text' | 'variant' | 'header' | 'size'> & Pick<FormProps<T>, 'schema' | 'formData' | 'uiSchema' | 'action' | 'method' | 'onSuccess'>;
5
+ export default function ModalForm<T = any>({ text, header, schema, uiSchema, action, method, formData, variant, onSuccess, size }: ModalFormProps<T>): JSX.Element;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import 'rc-menu/assets/index.css';
3
- import { PartialRouteObject } from 'react-router';
3
+ import type { PartialRouteObject } from 'react-router';
4
4
  interface Props {
5
5
  title: string;
6
6
  routes: PartialRouteObject[];