@topthink/common 1.0.12 → 1.0.13-alpha.0
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,279 +1,2 @@
|
|
|
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
|
-
background-color: #505050;
|
|
3
|
-
color: #9f9f9f;
|
|
4
|
-
padding: 65px 0 30px 0;
|
|
5
|
-
|
|
6
|
-
.container {
|
|
7
|
-
padding: 0 100px;
|
|
8
|
-
}
|
|
9
|
-
`,R=s.div`
|
|
10
|
-
display: flex;
|
|
11
|
-
justify-content: space-between;
|
|
12
|
-
align-items: center;
|
|
13
|
-
`,V=s.ul`
|
|
14
|
-
display: flex;
|
|
15
|
-
list-style: none;
|
|
16
|
-
margin: 0;
|
|
17
|
-
padding: 0;
|
|
18
|
-
|
|
19
|
-
li {
|
|
20
|
-
margin-left: 60px;
|
|
21
|
-
|
|
22
|
-
a {
|
|
23
|
-
text-decoration: none;
|
|
24
|
-
color: #9f9f9f;
|
|
25
|
-
font-size: 20px;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
`,G=s.div`
|
|
29
|
-
text-align: center;
|
|
30
|
-
margin-top: 75px;
|
|
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
|
-
display: flex;
|
|
33
|
-
flex-wrap: nowrap;
|
|
34
|
-
width: 100%;
|
|
35
|
-
`,W=s.nav`
|
|
36
|
-
position: fixed;
|
|
37
|
-
top: 0;
|
|
38
|
-
bottom: 0;
|
|
39
|
-
left: 0;
|
|
40
|
-
z-index: 100;
|
|
41
|
-
padding: 60px 0 0;
|
|
42
|
-
border-right: 1px solid #e3e3e3;
|
|
43
|
-
width: 230px;
|
|
44
|
-
background-color: #f5f5f5;
|
|
45
|
-
`,X=s.div`
|
|
46
|
-
padding-top: 10px;
|
|
47
|
-
height: 54px;
|
|
48
|
-
line-height: 44px;
|
|
49
|
-
text-indent: 24px;
|
|
50
|
-
`,Z=s.div`
|
|
51
|
-
margin-left: 230px;
|
|
52
|
-
flex: 1;
|
|
53
|
-
`,cc=s.main`
|
|
54
|
-
min-height: calc(100vh - 60px);
|
|
55
|
-
position: relative;
|
|
56
|
-
`,ec=s(t)`
|
|
57
|
-
border: none;
|
|
58
|
-
box-shadow: none;
|
|
59
|
-
padding: 10px 0;
|
|
60
|
-
|
|
61
|
-
.rc-menu-item {
|
|
62
|
-
display: flex;
|
|
63
|
-
|
|
64
|
-
&:hover {
|
|
65
|
-
background-color: #f0f0f0;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
a {
|
|
69
|
-
flex: 1;
|
|
70
|
-
text-decoration: none;
|
|
71
|
-
color: inherit;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.rc-menu-sub {
|
|
76
|
-
background-color: #eee;
|
|
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
|
-
}
|
|
89
|
-
|
|
90
|
-
.rc-menu-item-selected {
|
|
91
|
-
background-color: #eee;
|
|
92
|
-
color: var(--bs-primary);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
.rc-menu-item-active {
|
|
96
|
-
background-color: #eee;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
.rc-menu-item {
|
|
100
|
-
&:hover {
|
|
101
|
-
background-color: #e7e7e7;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
.rc-menu-submenu {
|
|
107
|
-
& > .rc-menu-submenu-title {
|
|
108
|
-
&:hover {
|
|
109
|
-
background-color: #e7e7e7;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
.rc-menu-submenu-active > .rc-menu-submenu-title {
|
|
115
|
-
background-color: #eee;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
.rc-menu-item,
|
|
119
|
-
.rc-menu-submenu > .rc-menu-submenu-title {
|
|
120
|
-
padding: 0 8px 0 24px;
|
|
121
|
-
font-size: 14px;
|
|
122
|
-
line-height: 36px;
|
|
123
|
-
cursor: pointer;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
.rc-menu-sub > .rc-menu-item,
|
|
127
|
-
.rc-menu-sub > .rc-menu-submenu > .rc-menu-submenu-title {
|
|
128
|
-
padding-top: 0;
|
|
129
|
-
padding-bottom: 0;
|
|
130
|
-
padding-right: 0;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
.rc-menu-submenu-arrow {
|
|
134
|
-
line-height: 38px;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
.rc-menu-item-selected {
|
|
138
|
-
background-color: #f5f5f5;
|
|
139
|
-
color: var(--bs-primary);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
.rc-menu-submenu-selected {
|
|
143
|
-
background-color: #eee;
|
|
144
|
-
|
|
145
|
-
.rc-menu-submenu-title {
|
|
146
|
-
color: var(--bs-primary);
|
|
147
|
-
font-weight: 500;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
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`
|
|
189
|
-
padding: 48px 32px;
|
|
190
|
-
`,gc=s.div`
|
|
191
|
-
margin-bottom: 24px;
|
|
192
|
-
text-align: center;
|
|
193
|
-
font-size: 72px;
|
|
194
|
-
`,hc=s.div`
|
|
195
|
-
color: rgba(0, 0, 0, .85);
|
|
196
|
-
font-size: 24px;
|
|
197
|
-
line-height: 1.8;
|
|
198
|
-
text-align: center;
|
|
199
|
-
`,mc=s.div`
|
|
200
|
-
margin-top: 32px;
|
|
201
|
-
text-align: center;
|
|
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`
|
|
203
|
-
cursor: pointer;
|
|
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`
|
|
205
|
-
position: relative;
|
|
206
|
-
`;const bc=s.div`
|
|
207
|
-
display: ${c=>c.active?"flex":"none"};
|
|
208
|
-
position: absolute;
|
|
209
|
-
top: 0 !important;
|
|
210
|
-
left: 0 !important;
|
|
211
|
-
width: 100%;
|
|
212
|
-
height: 100%;
|
|
213
|
-
text-align: center;
|
|
214
|
-
vertical-align: middle;
|
|
215
|
-
padding: 1em;
|
|
216
|
-
background-color: ${c=>c.inverted?"rgba(255, 255, 255, .85)":"rgba(0, 0, 0, .85)"};
|
|
217
|
-
opacity: ${c=>c.active?1:0};
|
|
218
|
-
line-height: 1;
|
|
219
|
-
animation-fill-mode: both;
|
|
220
|
-
animation-duration: .5s;
|
|
221
|
-
transition: background-color .5s linear;
|
|
222
|
-
flex-direction: column;
|
|
223
|
-
align-items: center;
|
|
224
|
-
justify-content: center;
|
|
225
|
-
user-select: none;
|
|
226
|
-
will-change: opacity;
|
|
227
|
-
z-index: 990;
|
|
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)`
|
|
229
|
-
margin-bottom: 1rem;
|
|
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`
|
|
231
|
-
display: inline-flex;
|
|
232
|
-
align-items: center;
|
|
233
|
-
`,$c=s.div`
|
|
234
|
-
margin-right: ${c=>c.size}px;
|
|
235
|
-
|
|
236
|
-
&:last-child {
|
|
237
|
-
margin-right: 0;
|
|
238
|
-
}
|
|
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`
|
|
240
|
-
width: 100%;
|
|
241
|
-
`,Tc=s.div`
|
|
242
|
-
background-color: #fff;
|
|
243
|
-
display: flex;
|
|
244
|
-
|
|
245
|
-
.container {
|
|
246
|
-
padding: 0 24px;
|
|
247
|
-
display: flex;
|
|
248
|
-
justify-content: space-between;
|
|
249
|
-
align-items: center;
|
|
250
|
-
}
|
|
251
|
-
`,qc=s.div`
|
|
252
|
-
margin-top: 24px;
|
|
253
|
-
`,Hc=s.div`
|
|
254
|
-
font-size: 22px;
|
|
255
|
-
line-height: 64px;
|
|
256
|
-
height: 64px;
|
|
257
|
-
`,Uc=s.div`
|
|
258
|
-
|
|
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)}))`
|
|
260
|
-
margin-bottom: 0;
|
|
261
|
-
justify-content: flex-end;
|
|
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`
|
|
263
|
-
display: flex;
|
|
264
|
-
justify-content: space-between;
|
|
265
|
-
padding-bottom: 1rem;
|
|
266
|
-
`,Wc=s(Dc)`
|
|
267
|
-
|
|
268
|
-
`,Xc=s(Dc)`
|
|
269
|
-
|
|
270
|
-
`,Zc=s.span`
|
|
271
|
-
cursor: pointer;
|
|
272
|
-
font-size: 20px;
|
|
273
|
-
line-height: 1;
|
|
274
|
-
|
|
275
|
-
&:hover {
|
|
276
|
-
color: var(--bs-primary);
|
|
277
|
-
}
|
|
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};
|
|
1
|
+
import{jsx as c,jsxs as e,Fragment as n}from"react/jsx-runtime";import t,{SubMenu as i,MenuItem as r}from"rc-menu";import o from"styled-components";import{useRoutes as s,useLocation as l,Link as a,BrowserRouter as d,Routes as g,Route as h,Navigate as v}from"react-router-dom";import m,{useMemo as u,useEffect as p,useContext as f,Children as x,useState as b,useCallback as y,createElement as _,forwardRef as w,useRef as z,useImperativeHandle as k,Fragment as C}from"react";import"rc-menu/assets/index.css";import N from"sweetalert2/dist/sweetalert2.js";import j from"sweetalert2-react-content";import{Dropdown as S,Spinner as A,Card as D,Alert as E,Button as P,Pagination as I,Table as B,Modal as F}from"react-bootstrap";import O from"query-string";import L from"axios";import*as M from"retry-axios";import{intersection as T,mapValues as q}from"lodash";import H from"@topthink/json-form";import U from"rc-table";import{useAsyncCallback as K}from"react-async-hook";function R(c,e){return e||(e=c.slice(0)),Object.freeze(Object.defineProperties(c,{raw:{value:Object.freeze(e)}}))}var V,G,Y,$;const J=o.footer(V||(V=R(["\n background-color: #505050;\n color: #9f9f9f;\n padding: 65px 0 30px 0;\n\n .container {\n padding: 0 100px;\n }\n"]))),Q=o.div(G||(G=R(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n"]))),W=o.ul(Y||(Y=R(["\n display: flex;\n list-style: none;\n margin: 0;\n padding: 0;\n\n li {\n margin-left: 60px;\n\n a {\n text-decoration: none;\n color: #9f9f9f;\n font-size: 20px;\n }\n }\n"]))),X=o.div($||($=R(["\n text-align: center;\n margin-top: 75px;\n"])));function Z(){return c(J,{children:e("div",{className:"container",children:[e(Q,{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(W,{children:[c("li",{children:c("a",{href:"#",children:"关于我们"},void 0)},void 0),c("li",{children:c("a",{href:"#",children:"联系我们"},void 0)},void 0),c("li",{children:c("a",{href:"#",children:"加入我们"},void 0)},void 0),c("li",{children:c("a",{href:"#",children:"合作伙伴"},void 0)},void 0)]},void 0)]},void 0),c(X,{children:"© 2021 上海顶想信息科技有限公司 沪ICP备12007941号-1"},void 0)]},void 0)},void 0)}const cc=function(c){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/";const n=[];for(const o of c){var t,i,r;if(null!==(t=o.meta)&&void 0!==t&&t.hideInMenu)continue;const c=null===(i=o.meta)||void 0===i?void 0:i.title;if(!c)continue;let s=o.path||"";s="".concat(e,"/").concat(s),s=s.replace(/\/+/,"/").replace(/\/$/,"");const l={title:c,path:s,children:[]};null!==(r=o.meta)&&void 0!==r&&r.hideChildrenInMenu||o.children&&o.children.length>0&&(l.children=cc(o.children,s)),n.push(l)}return n};var ec,nc,tc,ic,rc,oc;const sc=o.div(ec||(ec=R(["\n display: flex;\n flex-wrap: nowrap;\n width: 100%;\n"]))),lc=o.nav(nc||(nc=R(["\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n z-index: 100;\n padding: 60px 0 0;\n border-right: 1px solid #e3e3e3;\n width: 230px;\n background-color: #f5f5f5;\n"]))),ac=o.div(tc||(tc=R(["\n padding-top: 10px;\n height: 54px;\n line-height: 44px;\n text-indent: 24px;\n"]))),dc=o.div(ic||(ic=R(["\n margin-left: 230px;\n flex: 1;\n"]))),gc=o.main(rc||(rc=R(["\n min-height: calc(100vh - 60px);\n position: relative;\n"]))),hc=o(t)(oc||(oc=R(["\n border: none;\n box-shadow: none;\n padding: 10px 0;\n\n .rc-menu-item {\n display: flex;\n\n &:hover {\n background-color: #f0f0f0;\n }\n\n a {\n flex: 1;\n text-decoration: none;\n color: inherit;\n }\n }\n\n .rc-menu-sub {\n background-color: #eee;\n border-top: 1px solid #eee;\n border-bottom: 1px solid #eee;\n\n & > li {\n &:first-child {\n margin-top: 4px;\n }\n\n &:last-child {\n margin-bottom: 4px;\n }\n }\n\n .rc-menu-item-selected {\n background-color: #eee;\n color: var(--bs-primary);\n }\n\n .rc-menu-item-active {\n background-color: #eee;\n }\n\n .rc-menu-item {\n &:hover {\n background-color: #e7e7e7;\n }\n }\n }\n\n .rc-menu-submenu {\n & > .rc-menu-submenu-title {\n &:hover {\n background-color: #e7e7e7;\n }\n }\n }\n\n .rc-menu-submenu-active > .rc-menu-submenu-title {\n background-color: #eee;\n }\n\n .rc-menu-item,\n .rc-menu-submenu > .rc-menu-submenu-title {\n padding: 0 8px 0 24px;\n font-size: 14px;\n line-height: 36px;\n cursor: pointer;\n }\n\n .rc-menu-sub > .rc-menu-item,\n .rc-menu-sub > .rc-menu-submenu > .rc-menu-submenu-title {\n padding-top: 0;\n padding-bottom: 0;\n padding-right: 0;\n }\n\n .rc-menu-submenu-arrow {\n line-height: 38px;\n }\n\n .rc-menu-item-selected {\n background-color: #f5f5f5;\n color: var(--bs-primary);\n }\n\n .rc-menu-submenu-selected {\n background-color: #eee;\n\n .rc-menu-submenu-title {\n color: var(--bs-primary);\n font-weight: 500;\n }\n }\n\n & > .rc-menu-item {\n line-height: 38px;\n }\n\n & > .rc-menu-submenu {\n &.rc-menu-submenu-selected {\n background-color: #f5f5f5;\n }\n\n & > .rc-menu-submenu-title {\n line-height: 38px;\n\n &:hover {\n background-color: #f0f0f0;\n }\n }\n\n &.rc-menu-submenu-active > .rc-menu-submenu-title {\n background-color: #f5f5f5;\n }\n\n & > .rc-menu-sub {\n border-top: 1px solid #e6e6e6;\n border-bottom: 1px solid #e6e6e6;\n\n & > li {\n &:first-child {\n margin-top: 9px;\n }\n\n &:last-child {\n margin-bottom: 9px;\n }\n }\n }\n }\n\n"]))),vc=e=>e.map((e=>e.children.length>0?c(i,{title:e.title,children:vc(e.children)},e.path):c(r,{children:c(a,{to:e.path,children:e.title},void 0)},e.path))),mc=()=>({height:0}),uc=c=>({height:c.scrollHeight}),pc={motionName:"rc-menu-collapse",motionAppear:!0,onAppearStart:mc,onAppearActive:uc,onEnterStart:mc,onEnterActive:uc,onLeaveStart:uc,onLeaveActive:mc};function fc(n){let{routes:t,basename:i,title:r}=n;const o=s(t),a=u((()=>function(c){return cc(c,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/")}(t,i)),[t,i]),{pathname:d}=l(),g=u((()=>{const c=[];return d.split("/").reduce(((e,n)=>(e.length>1&&c.push(e.join("/")),[...e,n])),[]),c}),[]);return e(sc,{children:[e(lc,{children:[c(ac,{children:r},void 0),c(hc,{mode:"inline",motion:pc,defaultOpenKeys:g,selectedKeys:[d],children:vc(a)},void 0)]},void 0),e(dc,{children:[c(gc,{children:o},void 0),c(Z,{},void 0)]},void 0)]},void 0)}const xc=j(N),bc={confirmButtonText:"确定",cancelButtonText:"取消"},yc={confirm:async c=>{const{isConfirmed:e}=await xc.fire({...bc,icon:"warning",showCancelButton:!0,...c});return e},error:c=>{xc.fire({...bc,toast:!0,position:"top",icon:"error",timer:3e3,showConfirmButton:!1,...c})}};var _c,wc,zc,kc;const Cc=o.div(_c||(_c=R(["\n padding: 48px 32px;\n"]))),Nc=o.div(wc||(wc=R(["\n margin-bottom: 24px;\n text-align: center;\n font-size: 72px;\n"]))),jc=o.div(zc||(zc=R(["\n color: rgba(0, 0, 0, .85);\n font-size: 24px;\n line-height: 1.8;\n text-align: center;\n"]))),Sc=o.div(kc||(kc=R(["\n margin-top: 32px;\n text-align: center;\n"]))),Ac={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 Dc(n){let{status:t,title:i,icon:r,extra:o}=n;return!r&&t&&(r=Ac[t]),e(Cc,{children:[r&&c(Nc,{children:r},void 0),i&&c(jc,{children:i},void 0),o&&c(Sc,{children:o},void 0)]},void 0)}var Ec;const Pc=o.a(Ec||(Ec=R(["\n cursor: pointer;\n"])));function Ic(n){let{children:t,menus:i}=n;return c("header",{className:"navbar navbar-light bg-white border-bottom sticky-top",children:e("div",{className:"container-fluid",children:[c("a",{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),t,c("div",{className:"d-flex align-items-center",children:e(S,{navbar:!0,children:[c(S.Toggle,{as:Pc,className:"nav-link",children:c("i",{className:"bi bi-person-circle"},void 0)},void 0),c(S.Menu,{className:"shadow-sm",children:i},void 0)]},void 0)},void 0)]},void 0)},void 0)}var Bc,Fc;o.div(Bc||(Bc=R(["\n position: relative;\n"])));const Oc=o.div(Fc||(Fc=R(["\n display: ",";\n position: absolute;\n top: 0 !important;\n left: 0 !important;\n width: 100%;\n height: 100%;\n text-align: center;\n vertical-align: middle;\n padding: 1em;\n background-color: ",";\n opacity: ",";\n line-height: 1;\n animation-fill-mode: both;\n animation-duration: .5s;\n transition: background-color .5s linear;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n user-select: none;\n will-change: opacity;\n z-index: 990;\n"])),(c=>c.active?"flex":"none"),(c=>c.inverted?"rgba(255, 255, 255, .85)":"rgba(0, 0, 0, .85)"),(c=>c.active?1:0));function Lc(n){let{loading:t=!0,children:i,variant:r="success",animation:o="border",...s}=n;return t?(i&&(i=c("p",{className:"mt-3 text-secondary",children:i},void 0)),e(Oc,{inverted:!0,active:!0,children:[c(A,{animation:o,variant:r,...s},void 0),i]},void 0)):null}M.attach(),L.defaults.raxConfig={retryDelay:2e3,backoffType:"static",shouldRetry:c=>{var e,n;return"GET"===(null===(e=c.config.method)||void 0===e?void 0:e.toUpperCase())&&449===(null===(n=c.response)||void 0===n?void 0:n.status)}},L.defaults.baseURL="/api",L.interceptors.request.use((c=>{const e=sessionStorage.getItem("authorization");return e&&(c.headers.Authorization="Bearer ".concat(e)),c}),(c=>Promise.reject(c))),L.interceptors.response.use((c=>(201===c.status&&c.data.location&&(window.location.href=c.data.location,c.data=void 0),c)),(c=>{if(L.isAxiosError(c)&&c.response){const{data:e,status:n}=c.response;if(401===n){const{url:n}=e;if(n){const c=window.location.origin+"/login";window.location.href="".concat(n,"&redirect_uri=").concat(c)}c.errors="Unauthorized"}else{let t={};if(422===n&&"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 Mc=async function(c){c="string"==typeof c?{url:c}:c;const{data:e}=await L.request({...c});return e};function Tc(){const e=l(),n=O.parse(e.hash.substr(1));return sessionStorage.setItem("authorization",n.access_token),c(v,{to:"/",replace:!0},void 0)}function qc(){return p((()=>{Mc("/logout").catch((()=>{sessionStorage.removeItem("authorization")}))}),[]),c(Lc,{},void 0)}function Hc(n){let{children:t}=n;return c(d,{children:e(g,{children:[c(h,{path:"*",element:t},void 0),c(h,{path:"login",element:c(Tc,{},void 0)},void 0),c(h,{path:"logout",element:c(qc,{},void 0)},void 0)]},void 0)},void 0)}var Uc;const Kc=o(D)(Uc||(Uc=R(["\n margin-bottom: 1rem;\n"])));function Rc(n){let{children:t,title:i,border:r="light",...o}=n;return c(Kc,{border:r,...o,children:e("div",{className:"card-body",children:[i&&c("div",{className:"card-title h5",children:i},void 0),t]},void 0)},void 0)}function Vc(e){let{errors:n}=e;return n?c(E,{variant:"danger",children:c("ul",{className:"mb-0",children:"string"==typeof n?c("li",{children:n},void 0):Object.entries(n).map((e=>{let[n,t]=e;return c("li",{children:t},n)}))},void 0)},void 0):null}const Gc=m.createContext(null),Yc=Gc.Provider;function $c(){const c=f(Gc);if(!c)throw new Error("please use `useUser` in UserContext");return c}function Jc(e){let{require:t,children:i,fallback:r}=e;const o=$c();let s=!1;return"function"==typeof t?s=t(o):("string"==typeof t&&(t=[t]),s=T(o.roles,t).length>0),s||(i=r),c(n,{children:i},void 0)}var Qc,Wc;function Xc(e){let{children:n,size:t="small"}=e;"string"==typeof t&&(t={small:8,middle:16,large:24}[t]);const i=x.map(n,(e=>c(ce,{size:t,children:e},void 0)));return c(Zc,{children:i},void 0)}const Zc=o.div(Qc||(Qc=R(["\n display: inline-flex;\n align-items: center;\n"]))),ce=o.div(Wc||(Wc=R(["\n margin-right: ","px;\n\n &:last-child {\n margin-right: 0;\n }\n"])),(c=>c.size));function ee(e){let{value:t,locale:i="zh-CN",currency:r=!0}=e;const o=u((()=>{let c={};return c=r?{style:"currency",currency:"CNY",...c}:{minimumFractionDigits:2},new Intl.NumberFormat(i,c)}),[r,i]);return c(n,{children:o.format(t)},void 0)}function ne(e){let{loading:n,children:t,...i}=e;return c(P,{...i,disabled:n,children:n?"Loading…":t},void 0)}function te(c){let{url:e,method:n,confirm:t,onSuccess:i,children:r,as:o=P,...s}=c;const[l,a]=b(!1),d=y((async c=>{c.preventDefault();try{if(a(!0),t&&!await yc.confirm({text:t}))return;const c="string"==typeof e?{url:e,method:n}:{method:n,...e},r=await Mc(c);i&&i(r)}catch(c){if(!L.isAxiosError(c))throw c;{let e=c.errors;"string"!=typeof c.errors&&(e=Object.values(c.errors).join("<br />")),yc.error({text:e})}}finally{a(!1)}}),[e,n]);return _(o,{...s,disabled:l,onClick:d},r)}const ie=require("ajv-i18n/localize/zh"),re=w(((e,n)=>{let{action:t,method:i="post",onSuccess:r,formData:o,onSubmit:s,children:l,...a}=e;const[d,g]=b(),[h,v]=b(!1),[m,u]=b(o),p=y((async(c,e)=>{try{if(v(!0),t){const{formData:e}=c;try{const c=await Mc({url:t,method:i,data:e});g(void 0),r&&await r(c)}catch(c){throw L.isAxiosError(c)&&g((c=>{const e=c.errors;return"string"==typeof e?{__errors:[e]}:q(e,(c=>({__errors:[c]})))})(c)),c}}else s&&await s(c,e)}finally{v(!1)}}),[t,i,s]),f=y((c=>{let{formData:e}=c;u(e)}),[u]),x=y((c=>(c=c.map((c=>({keyword:c.name,dataPath:c.property,...c}))),ie(c),c)),[]);return c(H,{ref:n,extraErrors:d,onSubmit:p,transformErrors:x,noHtml5Validate:!0,noValidate:!0,...a,formData:m,onChange:f,children:l||c("div",{className:"col-12",children:c(ne,{loading:h,type:"submit",variant:"primary",children:"提交"},void 0)},void 0)},void 0)}));var oe,se,le,ae,de;const ge=o.div(oe||(oe=R(["\n width: 100%;\n"]))),he=o.div(se||(se=R(["\n background-color: #fff;\n display: flex;\n\n .container {\n padding: 0 24px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n"]))),ve=o.div(le||(le=R(["\n margin-top: 24px;\n"]))),me=o.div(ae||(ae=R(["\n font-size: 22px;\n line-height: 64px;\n height: 64px;\n"]))),ue=o.div(de||(de=R(["\n\n"])));function pe(n){let{title:t,children:i,extra:r}=n;return e(ge,{children:[c(he,{children:e("div",{className:"container",children:[c(me,{children:t},void 0),c(ue,{children:r},void 0)]},void 0)},void 0),c(ve,{className:"container",children:i},void 0)]},void 0)}function fe(){}function xe(c){return"number"==typeof c&&isFinite(c)&&Math.floor(c)===c}var be,ye,_e,we,ze;const ke={table:e=>c(B,{...e,className:"align-middle table-hover"},void 0)},Ce=o((function(e){let{total:n=0,onChange:t=fe,defaultCurrent:i=1,defaultPageSize:r=10,className:o,...s}=e;const[l,a]=b(i),[d,g]=b(r);p((()=>{xe(s.current)&&a(s.current)}),[s.current]),p((()=>{xe(s.pageSize)&&g(s.pageSize)}),[s.pageSize]);const h=u((()=>Math.floor((n-1)/d)+1),[n,d]),v=y((c=>()=>{c!==l&&(a(c),t(c,d))}),[t,l,d]),m=l-1>0?l-1:0,f=l+1<h?l+1:h,x=[];let _=null,w=null,z=null,k=null;if(h<=7)for(let e=1;e<=h;e+=1){const n=l===e;x.push(c(I.Item,{active:n,onClick:v(e),children:e},e))}else{k=c(I.Last,{onClick:v(h)},"last"),z=c(I.First,{onClick:v(1)},"first"),_=c(I.Prev,{onClick:v(m)},"prev"),w=c(I.Next,{onClick:v(f)},"next");let e=Math.max(1,l-2),n=Math.min(l+2,h);l-1<=2&&(n=5),h-l<=2&&(e=h-4);for(let t=e;t<=n;t+=1){const e=l===t;x.push(c(I.Item,{active:e,onClick:v(t),children:t},t))}l-1>=4&&3!==l&&x.unshift(_),h-l>=4&&l!==h-2&&x.push(w),1!==e&&x.unshift(z),n!==h&&x.push(k)}return c(I,{className:o,children:x},void 0)}))(be||(be=R(["\n margin-bottom: 0;\n justify-content: flex-end;\n"])));function Ne(c){return"current_page"in c}const je=w(((n,t)=>{let{source:i,rowKey:r="id",paginate:o=!0,toolBarRender:s,columns:l=[],...a}=n;const[d,g]=b([]),[h,v]=b(o?{total:0,current:1,pageSize:10}:null),[m,f]=b(!0),x=y((async function(){let c=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};f(!0);try{let e;if("string"==typeof i){const n={};h&&(n.page=c.page||h.current),e=await Mc({url:i,params:n})}else e=await i();o&&Ne(e)&&(v({total:e.total,current:e.current_page,pageSize:e.per_page}),e=e.data),g(e)}catch(c){}finally{f(!1)}}),[i,g,h]);p((()=>{x()}),[]);const _=z({reload:x});p((()=>{_.current={reload:x}}),[x]),k(t,(()=>_.current));const w=u((()=>l.map((c=>{const e={...c,render:void 0};if("render"in c&&c.render){const n=c.render;e.render=(c,e,t)=>n({value:c,record:e,index:t,action:_.current})}return e}))),[l,_]),C=y((c=>{x({page:c})}),[]);return e(Rc,{children:[c(Lc,{loading:m},void 0),e(Se,{children:[c(De,{children:s&&s(_.current)},void 0),c(Ae,{children:c(Ee,{onClick:_.current.reload,children:c("i",{className:"bi bi-arrow-repeat"},void 0)},void 0)},void 0)]},void 0),c(U,{...a,rowKey:r,columns:w,components:ke,data:d},void 0),h&&c(Ce,{...h,onChange:C},void 0)]},void 0)})),Se=o.div(ye||(ye=R(["\n display: flex;\n justify-content: space-between;\n padding-bottom: 1rem;\n"]))),Ae=o(Xc)(_e||(_e=R(["\n\n"]))),De=o(Xc)(we||(we=R(["\n\n"]))),Ee=o.span(ze||(ze=R(["\n cursor: pointer;\n font-size: 20px;\n line-height: 1;\n\n &:hover {\n color: var(--bs-primary);\n }\n"]))),Pe=w(((t,i)=>{let{text:r,variant:o="primary",header:s=r,footer:l=!0,onOk:a,size:d,children:g}=t;const[h,v]=b(!1),[m,u]=b(!1),p=()=>v(!1);k(i,(()=>({close:p})));return e(n,{children:[c(P,{variant:o,onClick:()=>v(!0),children:r},void 0),e(F,{size:d,show:h,onHide:p,children:[s&&c(F.Header,{closeButton:!0,children:c(F.Title,{as:"h5",children:s},void 0)},void 0),c(F.Body,{children:g},void 0),l&&e(F.Footer,{children:[c(P,{variant:"secondary",onClick:p,children:"取消"},void 0),c(ne,{loading:m,variant:"primary",onClick:async()=>{if(a){u(!0);const c=await a();if(u(!1),!1===c)return}p()},children:"确定"},void 0)]},void 0)]},void 0)]},void 0)}));function Ie(e){let{text:n,header:t,schema:i,uiSchema:r,action:o,method:s,formData:l,variant:a,onSuccess:d,size:g}=e;const h=z(null),v=z(null),m=y((async()=>{try{var c;const e=await(null===(c=h.current)||void 0===c?void 0:c.submit());return d&&d(e),!0}catch{return!1}}),[]);return c(Pe,{ref:v,text:n,onOk:m,header:t,variant:a,size:g,children:c(re,{ref:h,schema:i,uiSchema:r,action:o,method:s,formData:l,children:c(C,{},void 0)},void 0)},void 0)}function Be(c){let{manual:e,refreshDeps:n,...t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{execute:i,currentParams:r,error:o,...s}=K((async e=>(c="string"==typeof c?{url:c}:c,await Mc({...c,...e}))),t);p((()=>{e||n||i()}),[]),p((()=>{n&&l()}),n);const l=y((()=>{r?i(...r):i()}),[i,r]);return{refresh:l,execute:i,...s}}export{Jc as Access,Rc as Card,pe as Content,Vc as Error,Z as Footer,re as Form,Ic as Header,Lc as Loader,ne as LoadingButton,yc as Message,Pe as ModalButton,Ie as ModalForm,ee as NumberFormat,te as RequestButton,Dc as Result,Hc as Root,fc as SiderLayout,Xc as Space,je as Table,Yc as UserProvider,Mc as request,Be as useRequest,$c as useUser};
|
|
279
2
|
//# 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/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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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../src/images/logo_dark.svg","../src/components/footer.tsx","../src/utils/get-menu-data.ts","../src/layout/sider.tsx","../src/utils/message.ts","../src/components/result.tsx","../src/images/logo.svg","../src/components/header.tsx","../src/components/dimmer.tsx","../src/components/loader.tsx","../src/request.ts","../src/components/root.tsx","../src/components/card.tsx","../src/components/error.tsx","../src/components/user-provider.tsx","../src/components/access.tsx","../src/components/space.tsx","../src/components/number-format.tsx","../src/components/loading-button.tsx","../src/components/request-button.tsx","../src/components/form.tsx","../src/components/content.tsx","../src/components/pagination.tsx","../src/components/table.tsx","../src/components/modal-button.tsx","../src/components/modal-form.tsx","../src/hooks/use-request.ts"],"sourcesContent":["export default function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}","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 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","import type { RouteObject } from 'react-router';\r\n\r\nexport interface MenuData {\r\n path: string;\r\n title: string;\r\n children: MenuData[];\r\n}\r\n\r\nconst formatRelativePath = (\r\n routes: RouteObject[],\r\n parent: string = '/',\r\n): MenuData[] => {\r\n\r\n const menus: MenuData[] = [];\r\n\r\n for (const route of routes) {\r\n\r\n if (route.meta?.hideInMenu) {\r\n continue;\r\n }\r\n\r\n const title = route.meta?.title;\r\n if (!title) {\r\n continue;\r\n }\r\n\r\n let path = route.path || '';\r\n\r\n path = `${parent}/${path}`;\r\n\r\n path = path.replace(/\\/+/, '/').replace(/\\/$/, '');\r\n\r\n const menu: MenuData = {\r\n title,\r\n path,\r\n children: []\r\n };\r\n\r\n if (!route.meta?.hideChildrenInMenu) {\r\n if (route.children && route.children.length > 0) {\r\n menu.children = formatRelativePath(route.children, path);\r\n }\r\n }\r\n\r\n menus.push(menu);\r\n }\r\n\r\n return menus;\r\n};\r\n\r\nexport default function getMenuData(routes: RouteObject[], base: string = '/'): MenuData[] {\r\n return formatRelativePath(routes, base);\r\n}\r\n","import RcMenu, { MenuItem, SubMenu } from 'rc-menu';\r\nimport Footer from '../components/footer';\r\nimport { Link, useLocation, useRoutes } from 'react-router-dom';\r\nimport { useMemo } from 'react';\r\nimport styled from 'styled-components';\r\nimport 'rc-menu/assets/index.css';\r\nimport type { RouteObject } from 'react-router';\r\nimport getMenuData, { MenuData } from '../utils/get-menu-data';\r\nimport type { CSSMotionProps } from 'rc-motion';\r\n\r\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: RouteObject[];\r\n basename: string;\r\n}\r\n\r\nconst renderMenuItems = (items: MenuData[]) => {\r\n return items.map((item) => {\r\n if (item.children.length > 0) {\r\n return <SubMenu title={item.title} key={item.path}>\r\n {renderMenuItems(item.children)}\r\n </SubMenu>;\r\n } else {\r\n return <MenuItem key={item.path}>\r\n <Link to={item.path}>{item.title}</Link>\r\n </MenuItem>;\r\n }\r\n });\r\n};\r\n\r\nconst collapseNode = () => {\r\n return { height: 0 };\r\n};\r\nconst expandNode = (node: HTMLElement) => {\r\n return { height: node.scrollHeight };\r\n};\r\n\r\nconst motion: CSSMotionProps = {\r\n motionName: 'rc-menu-collapse',\r\n motionAppear: true,\r\n onAppearStart: collapseNode,\r\n onAppearActive: expandNode,\r\n onEnterStart: collapseNode,\r\n onEnterActive: expandNode,\r\n onLeaveStart: expandNode,\r\n onLeaveActive: collapseNode,\r\n};\r\n\r\n\r\nexport default function SiderLayout({ routes, basename, title }: Props) {\r\n\r\n const children = useRoutes(routes);\r\n\r\n const menu = useMemo(() => getMenuData(routes, basename), [routes, basename]);\r\n\r\n const { pathname } = useLocation();\r\n\r\n const openKeys = useMemo(() => {\r\n const keys: string[] = [];\r\n const parts = pathname.split('/');\r\n parts.reduce<string[]>((pre, curr) => {\r\n if (pre.length > 1) {\r\n keys.push(pre.join('/'));\r\n }\r\n return [...pre, curr];\r\n }, []);\r\n\r\n return keys;\r\n }, []);\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","var img = \"data:image/svg+xml,%3csvg width='485' height='132' xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='enable-background:new 0 0 531.69 198.43%3b' version='1.1'%3e %3cstyle type='text/css'%3e.st0%7bfill:%233C60FF%3b%7d%3c/style%3e %3cg%3e %3ctitle%3ebackground%3c/title%3e %3crect fill='none' id='canvas_background' height='134' width='487' y='-1' x='-1'/%3e %3c/g%3e %3cg%3e %3ctitle%3eLayer 1%3c/title%3e %3cpath id='svg_1' d='m132.29%2c62.34c-1.19%2c-18.77 -10.34%2c-35.36 -24.11%2c-46.46c-11.15%2c-8.99 -25.34%2c-14.38 -40.79%2c-14.38c-0.55%2c0 -1.09%2c0.01 -1.63%2c0.02c-3.32%2c0.08 -6.57%2c0.41 -9.75%2c0.98c-30.49%2c5.38 -53.65%2c32 -53.65%2c64.04c0%2c1.87 0.08%2c3.73 0.24%2c5.57c2.5%2c29.51 24.7%2c53.4 53.41%2c58.47c2.38%2c0.42 4.8%2c0.72 7.26%2c0.86c0.83%2c0.05 1.66%2c0.09 2.5%2c0.11c0.54%2c0.01 1.08%2c0.02 1.63%2c0.02c34.04%2c0 61.97%2c-26.16 64.79%2c-59.46c0.16%2c-1.83 0.24%2c-3.69 0.24%2c-5.57c0%2c-1.42 -0.05%2c-2.82 -0.14%2c-4.2zm-76.27%2c32.5c-0.26%2c0.01 -0.53%2c0.01 -0.79%2c0.01c-14.56%2c0 -26.88%2c-9.57 -31.03%2c-22.76c-0.97%2c-3.08 -1.49%2c-6.35 -1.49%2c-9.75c0%2c-17.95 14.56%2c-32.52 32.51%2c-32.52c0.26%2c0 0.53%2c0 0.79%2c0.01c3.41%2c0.08 6.69%2c0.68 9.75%2c1.74c6.5%2c2.22 12.06%2c6.45 15.97%2c11.94c1.98%2c2.78 3.54%2c5.9 4.57%2c9.25c0.94%2c3.03 1.44%2c6.24 1.44%2c9.58l-9.75%2c0c0%2c-2.18 -0.31%2c-4.29 -0.88%2c-6.28c-0.92%2c-3.23 -2.55%2c-6.17 -4.69%2c-8.64c-1.86%2c-2.14 -4.12%2c-3.93 -6.65%2c-5.25c-2.93%2c-1.54 -6.24%2c-2.46 -9.75%2c-2.58c-0.26%2c-0.01 -0.52%2c-0.01 -0.79%2c-0.01c-12.57%2c0 -22.76%2c10.19 -22.76%2c22.76c0%2c3.49 0.79%2c6.8 2.19%2c9.75c3.65%2c7.69 11.49%2c13.01 20.57%2c13.01c0.27%2c0 0.53%2c-0.01 0.79%2c-0.01l0%2c9.75zm55.7%2c-17.92c-3.35%2c10.5 -13.18%2c18.09 -24.78%2c18.09c-3.13%2c0 -6.13%2c-0.55 -8.91%2c-1.57c-2.18%2c-0.8 -4.24%2c-1.88 -6.11%2c-3.21c-2.38%2c-1.68 -4.47%2c-3.76 -6.16%2c-6.13c-0.28%2c-0.39 -0.55%2c-0.79 -0.81%2c-1.2c-2.03%2c-3.2 -3.38%2c-6.87 -3.85%2c-10.82l9.87%2c0c0.33%2c1.71 0.92%2c3.32 1.74%2c4.8c1.61%2c2.91 4.09%2c5.26 7.09%2c6.72c0.57%2c0.28 1.15%2c0.53 1.76%2c0.73c1.68%2c0.6 3.49%2c0.92 5.37%2c0.92c7.92%2c0 14.52%2c-5.67 15.96%2c-13.17c0.2%2c-1 0.3%2c-2.04 0.3%2c-3.09c0%2c-2.37 -0.51%2c-4.63 -1.43%2c-6.67c-1.66%2c-3.71 -4.68%2c-6.68 -8.43%2c-8.28l3.54%2c-9.1c7.43%2c3.08 13.13%2c9.49 15.21%2c17.38c0.44%2c1.64 0.72%2c3.34 0.81%2c5.09c0.04%2c0.52 0.05%2c1.05 0.05%2c1.58c0%2c1.05 -0.07%2c2.07 -0.18%2c3.09c-0.18%2c1.68 -0.54%2c3.3 -1.04%2c4.84z' class='st0'/%3e %3cg id='svg_2'%3e %3cg id='svg_3'%3e %3crect id='svg_4' height='6.34' width='94.12' class='st0' y='20.46' x='163.29'/%3e %3c/g%3e %3cg id='svg_5'%3e %3cpath id='svg_6' d='m169.31%2c113.72l0%2c-6.34c6.49%2c0 11.77%2c-5.28 11.77%2c-11.77l0%2c-71.98l6.34%2c0l0%2c71.98c0%2c9.98 -8.12%2c18.11 -18.11%2c18.11z' class='st0'/%3e %3c/g%3e %3cg id='svg_7'%3e %3cpath id='svg_8' d='m255.49%2c91.27l-6.34%2c0l0%2c-38.2c0%2c-5.06 -4.12%2c-9.18 -9.18%2c-9.18l-19.37%2c0c-5.06%2c0 -9.18%2c4.12 -9.18%2c9.18l0%2c38.2l-6.34%2c0l0%2c-38.2c0%2c-8.55 6.96%2c-15.51 15.51%2c-15.51l19.38%2c0c8.55%2c0 15.51%2c6.96 15.51%2c15.51l0%2c38.2l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_9'%3e %3crect id='svg_10' height='17.09' width='6.34' class='st0' y='23.63' x='227.12'/%3e %3c/g%3e %3cg id='svg_11'%3e %3cpath id='svg_12' d='m206.43%2c113.84l-3.34%2c0l0%2c-6.34l3.34%2c0c6.3%2c0 12.9%2c-3.56 15.35%2c-8.29c3.49%2c-6.71 5.33%2c-14.25 5.33%2c-21.81l0%2c-26.13l6.34%2c0l0%2c26.13c0%2c8.58 -2.09%2c17.13 -6.05%2c24.74c-3.98%2c7.68 -13.57%2c11.7 -20.97%2c11.7z' class='st0'/%3e %3c/g%3e %3cg id='svg_13'%3e %3cpath id='svg_14' d='m257.48%2c113.84l-3.34%2c0c-7.4%2c0 -16.98%2c-4.02 -20.98%2c-11.7c-3.96%2c-7.61 -6.05%2c-16.16 -6.05%2c-24.74l6.34%2c0c0%2c7.56 1.84%2c15.1 5.33%2c21.81c2.46%2c4.73 9.06%2c8.29 15.35%2c8.29l3.34%2c0l0%2c6.34l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_15'%3e %3crect id='svg_16' height='6.34' width='42.87' class='st0' y='27.89' x='274.07'/%3e %3c/g%3e %3cg id='svg_17'%3e %3crect id='svg_18' height='61.38' width='6.34' class='st0' y='14.89' x='293.05'/%3e %3c/g%3e %3cg id='svg_19'%3e %3crect id='svg_20' height='6.34' width='33.26' class='st0' transform='matrix(0.11%2c-0.9939%2c0.9939%2c0.11%2c194.7608%2c392.0006) ' y='46.985071' x='325.728637'/%3e %3c/g%3e %3cg id='svg_21'%3e %3crect id='svg_22' height='33.26' width='6.34' class='st0' transform='matrix(0.9939%2c-0.11%2c0.11%2c0.9939%2c-7.5075%2c38.3801) ' y='37.060893' x='310.495485'/%3e %3c/g%3e %3cg id='svg_23'%3e %3cpath id='svg_24' d='m352.9%2c77.14l-15.15%2c0c-7.52%2c0 -13.64%2c-6.12 -13.64%2c-13.63l0%2c-29.61c0%2c-7.52 6.12%2c-13.64 13.64%2c-13.64l15.15%2c0c7.52%2c0 13.64%2c6.12 13.64%2c13.64l0%2c29.61c0%2c7.52 -6.12%2c13.63 -13.64%2c13.63zm-15.15%2c-50.54c-4.02%2c0 -7.3%2c3.27 -7.3%2c7.3l0%2c29.61c0%2c4.02 3.27%2c7.3 7.3%2c7.3l15.15%2c0c4.02%2c0 7.3%2c-3.27 7.3%2c-7.3l0%2c-29.61c0%2c-4.02 -3.27%2c-7.3 -7.3%2c-7.3l-15.15%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_25'%3e %3cg id='svg_26'%3e %3crect id='svg_27' height='6.34' width='17.8' class='st0' y='37.2' x='336.43'/%3e %3c/g%3e %3cg id='svg_28'%3e %3crect id='svg_29' height='6.34' width='17.8' class='st0' y='53.87' x='336.43'/%3e %3c/g%3e %3c/g%3e %3cg id='svg_30'%3e %3cpath id='svg_31' d='m352.7%2c113.84l-37.98%2c0c-8%2c0 -14.5%2c-6.51 -14.5%2c-14.5l0%2c-16.14l6.34%2c0l0%2c16.13c0%2c4.5 3.66%2c8.17 8.17%2c8.17l37.98%2c0l0%2c6.34l-0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_32'%3e %3crect id='svg_33' height='6.34' width='23.57' class='st0' transform='matrix(0.2529%2c-0.9675%2c0.9675%2c0.2529%2c114.4986%2c402.9877) ' y='83.698593' x='326.836101'/%3e %3c/g%3e %3cg id='svg_34'%3e %3crect id='svg_35' height='6.34' width='20.52' class='st0' y='86.2' x='321.58'/%3e %3c/g%3e %3cg id='svg_36'%3e %3crect id='svg_37' height='24.75' width='6.34' class='st0' transform='matrix(0.9556%2c-0.2946%2c0.2946%2c0.9556%2c-19.7967%2c122.424) ' y='75.874073' x='369.686666'/%3e %3c/g%3e %3cg id='svg_38'%3e %3crect id='svg_39' height='6.34' width='71.83' class='st0' y='20.46' x='395.51'/%3e %3c/g%3e %3cg id='svg_40'%3e %3crect id='svg_41' height='6.34' width='90.81' class='st0' y='57.44' x='386.02'/%3e %3c/g%3e %3cg id='svg_42'%3e %3cpath id='svg_43' d='m463.12%2c113.64l-56%2c0c-4.5%2c0 -8.59%2c-2.29 -10.94%2c-6.14c-2.35%2c-3.84 -2.52%2c-8.53 -0.46%2c-12.53l17.68%2c-35.81l5.64%2c2.89l-17.68%2c35.81c-1.04%2c2.02 -0.95%2c4.39 0.23%2c6.33c1.19%2c1.94 3.25%2c3.1 5.53%2c3.1l56%2c0c1.51%2c0 2.88%2c-0.71 3.74%2c-1.95c0.81%2c-1.16 1.03%2c-2.57 0.63%2c-3.91l-7.8%2c-12.34l5.36%2c-3.39l8.18%2c12.94l0.12%2c0.31c1.24%2c3.34 0.76%2c7.08 -1.28%2c10.01c-2.04%2c2.94 -5.39%2c4.68 -8.95%2c4.68z' class='st0'/%3e %3c/g%3e %3c/g%3e %3c/g%3e%3c/svg%3e\";\n export default img;","import logo from '../images/logo.svg';\r\nimport { Dropdown } from 'react-bootstrap';\r\nimport styled from 'styled-components';\r\nimport { PropsWithChildren, ReactNode } from 'react';\r\n\r\nconst Avatar = styled.a`\r\n cursor: pointer;\r\n`;\r\n\r\ninterface Props {\r\n menus: ReactNode\r\n}\r\n\r\nexport default function Header({ children, menus }: PropsWithChildren<Props>) {\r\n\r\n return <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","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, ElementType, MouseEvent, useCallback, useState } from 'react';\r\nimport Message from '../utils/message';\r\nimport axios, { AxiosRequestConfig } from 'axios';\r\n\r\ninterface Props extends Omit<ButtonProps, 'as'> {\r\n url: Config;\r\n method?: AxiosRequestConfig['method'];\r\n confirm?: string;\r\n onSuccess?: (result: any) => void;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport default function RequestButton({ 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":["_taggedTemplateLiteral","strings","raw","slice","Object","freeze","defineProperties","value","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","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","entries","_ref2","UserContext","React","createContext","UserProvider","Provider","useUser","user","useContext","Access","require","fallback","passed","intersection","roles","Space","size","small","middle","large","Children","child","Item","NumberFormat","locale","currency","formatter","style","minimumFractionDigits","Intl","format","LoadingButton","Button","disabled","RequestButton","onSuccess","setDisabled","useState","handleClick","useCallback","preventDefault","text","result","values","createElement","onClick","localize","Form","forwardRef","ref","action","formData","onSubmit","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","isPagination","Table","source","rowKey","paginate","toolBarRender","columns","pagination","setPagination","fetchData","params","page","current_page","per_page","useRef","reload","useImperativeHandle","customColumns","column","customColumn","render","defaultRender","record","index","handlePageChange","LeftTools","RightTools","Action","RcTable","span","ModalButton","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.
|
|
3
|
+
"version": "1.0.13-alpha.0",
|
|
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
|
-
"@topthink/bootstrap": "^1.0.
|
|
19
|
-
"@topthink/json-form": "^1.0.
|
|
18
|
+
"@topthink/bootstrap": "^1.0.5",
|
|
19
|
+
"@topthink/json-form": "^1.0.6-alpha.0",
|
|
20
20
|
"@types/lodash": "^4.14.161",
|
|
21
21
|
"ajv-i18n": "^4.0.0",
|
|
22
22
|
"axios": "^0.21.1",
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
"bootstrap": "^5.0.2",
|
|
56
56
|
"history": "^5.0.0",
|
|
57
57
|
"react-bootstrap": "^2.0.0-beta.2",
|
|
58
|
-
"react-router": "^6.0.0-beta.
|
|
59
|
-
"react-router-dom": "^6.0.0-beta.
|
|
58
|
+
"react-router": "^6.0.0-beta.6",
|
|
59
|
+
"react-router-dom": "^6.0.0-beta.6",
|
|
60
60
|
"rollup": "^2.26.11",
|
|
61
61
|
"rollup-plugin-terser": "^7.0.2",
|
|
62
62
|
"rollup-plugin-typescript2": "^0.30.0",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
},
|
|
65
65
|
"author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
|
|
66
66
|
"license": "MIT",
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "f95fc9bddd6f2eefb5074fba5f124510979d6636"
|
|
68
68
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { ButtonProps } from 'react-bootstrap';
|
|
3
2
|
import { Config } from '../request';
|
|
3
|
+
import { ElementType } from 'react';
|
|
4
4
|
import { AxiosRequestConfig } from 'axios';
|
|
5
|
-
interface Props extends ButtonProps {
|
|
5
|
+
interface Props extends Omit<ButtonProps, 'as'> {
|
|
6
6
|
url: Config;
|
|
7
7
|
method?: AxiosRequestConfig['method'];
|
|
8
8
|
confirm?: string;
|
|
9
9
|
onSuccess?: (result: any) => void;
|
|
10
|
+
as?: ElementType | ButtonProps['as'];
|
|
10
11
|
}
|
|
11
12
|
export default function RequestButton({ url, method, confirm, onSuccess, children, as, ...props }: Props): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
|
|
12
13
|
export {};
|
package/types/index.d.ts
CHANGED
package/types/layout/sider.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import 'rc-menu/assets/index.css';
|
|
3
|
-
import type {
|
|
3
|
+
import type { RouteObject } from 'react-router';
|
|
4
4
|
interface Props {
|
|
5
5
|
title: string;
|
|
6
|
-
routes:
|
|
6
|
+
routes: RouteObject[];
|
|
7
7
|
basename: string;
|
|
8
8
|
}
|
|
9
9
|
export default function SiderLayout({ routes, basename, title }: Props): JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { RouteObject } from 'react-router';
|
|
2
2
|
export interface MenuData {
|
|
3
3
|
path: string;
|
|
4
4
|
title: string;
|
|
5
5
|
children: MenuData[];
|
|
6
6
|
}
|
|
7
|
-
export default function getMenuData(routes:
|
|
7
|
+
export default function getMenuData(routes: RouteObject[], base?: string): MenuData[];
|