Yansen 2 years ago
parent
commit
2ac5e31650

+ 8
- 0
jsconfig.json View File

@@ -0,0 +1,8 @@
1
+{
2
+  "compilerOptions": {
3
+    "baseUrl": ".",
4
+    "paths": {
5
+      "@/*": ["./src/*"]
6
+    }
7
+  }
8
+}

+ 2
- 1
package.json View File

@@ -13,11 +13,12 @@
13 13
     "@ant-design/pro-components": "^2.3.13",
14 14
     "@zjxpcyc/react-tiny-store": "^2.0.1",
15 15
     "antd": "^4.23.4",
16
+    "classnames": "^2.3.2",
16 17
     "echarts": "^5.4.0",
17 18
     "react": "18.1.0",
18 19
     "react-dom": "18.1.0",
19 20
     "react-helmet": "^6.1.0",
20
-    "react-router-dom": "6",
21
+    "react-router-dom": "^6.4.2",
21 22
     "react-transition-group": "^4.4.5"
22 23
   },
23 24
   "devDependencies": {

+ 61
- 64
pnpm-lock.yaml View File

@@ -8,12 +8,13 @@ specifiers:
8 8
   '@vitejs/plugin-react': ^2.0.0
9 9
   '@zjxpcyc/react-tiny-store': ^2.0.1
10 10
   antd: ^4.23.4
11
+  classnames: ^2.3.2
11 12
   echarts: ^5.4.0
12 13
   less: ^4.1.3
13 14
   react: 18.1.0
14 15
   react-dom: 18.1.0
15 16
   react-helmet: ^6.1.0
16
-  react-router-dom: '6'
17
+  react-router-dom: ^6.4.2
17 18
   react-transition-group: ^4.4.5
18 19
   vite: ^3.0.0
19 20
   vite-plugin-imp: ^2.2.0
@@ -23,11 +24,12 @@ dependencies:
23 24
   '@ant-design/pro-components': registry.npmmirror.com/@ant-design/pro-components/2.3.13_4ahbtacxshq5zvmbq25uec6w6a
24 25
   '@zjxpcyc/react-tiny-store': registry.npmmirror.com/@zjxpcyc/react-tiny-store/2.0.1
25 26
   antd: registry.npmmirror.com/antd/4.23.4_ef5jwxihqo6n7gxfmzogljlgcm
27
+  classnames: registry.npmmirror.com/classnames/2.3.2
26 28
   echarts: registry.npmmirror.com/echarts/5.4.0
27 29
   react: registry.npmmirror.com/react/18.1.0
28 30
   react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
29 31
   react-helmet: registry.npmmirror.com/react-helmet/6.1.0_react@18.1.0
30
-  react-router-dom: registry.npmmirror.com/react-router-dom/6.3.0_ef5jwxihqo6n7gxfmzogljlgcm
32
+  react-router-dom: registry.npmmirror.com/react-router-dom/6.4.2_ef5jwxihqo6n7gxfmzogljlgcm
31 33
   react-transition-group: registry.npmmirror.com/react-transition-group/4.4.5_ef5jwxihqo6n7gxfmzogljlgcm
32 34
 
33 35
 devDependencies:
@@ -97,7 +99,7 @@ packages:
97 99
       '@ant-design/colors': registry.npmmirror.com/@ant-design/colors/6.0.0
98 100
       '@ant-design/icons-svg': registry.npmmirror.com/@ant-design/icons-svg/4.2.1
99 101
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
100
-      classnames: registry.npmmirror.com/classnames/2.3.1
102
+      classnames: registry.npmmirror.com/classnames/2.3.2
101 103
       rc-util: registry.npmmirror.com/rc-util/5.23.0_ef5jwxihqo6n7gxfmzogljlgcm
102 104
       react: registry.npmmirror.com/react/18.1.0
103 105
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
@@ -396,7 +398,7 @@ packages:
396 398
       react: '>=16.9.0'
397 399
     dependencies:
398 400
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
399
-      classnames: registry.npmmirror.com/classnames/2.3.1
401
+      classnames: registry.npmmirror.com/classnames/2.3.2
400 402
       json2mq: registry.npmmirror.com/json2mq/0.2.0
401 403
       lodash: registry.npmmirror.com/lodash/4.17.21
402 404
       react: registry.npmmirror.com/react/18.1.0
@@ -832,6 +834,13 @@ packages:
832 834
     version: 6.1.0
833 835
     dev: false
834 836
 
837
+  registry.npmmirror.com/@remix-run/router/1.0.2:
838
+    resolution: {integrity: sha512-GRSOFhJzjGN+d4sKHTMSvNeUPoZiDHWmRnXfzaxrqe7dE/Nzlc8BiMSJdLDESZlndM7jIUrZ/F4yWqVYlI0rwQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@remix-run/router/-/router-1.0.2.tgz}
839
+    name: '@remix-run/router'
840
+    version: 1.0.2
841
+    engines: {node: '>=14'}
842
+    dev: false
843
+
835 844
   registry.npmmirror.com/@types/prop-types/15.7.5:
836 845
     resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.5.tgz}
837 846
     name: '@types/prop-types'
@@ -957,7 +966,7 @@ packages:
957 966
       '@ant-design/react-slick': registry.npmmirror.com/@ant-design/react-slick/0.29.2_react@18.1.0
958 967
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
959 968
       '@ctrl/tinycolor': registry.npmmirror.com/@ctrl/tinycolor/3.4.1
960
-      classnames: registry.npmmirror.com/classnames/2.3.1
969
+      classnames: registry.npmmirror.com/classnames/2.3.2
961 970
       copy-to-clipboard: registry.npmmirror.com/copy-to-clipboard/3.3.2
962 971
       lodash: registry.npmmirror.com/lodash/4.17.21
963 972
       memoize-one: registry.npmmirror.com/memoize-one/6.0.0
@@ -1052,12 +1061,6 @@ packages:
1052 1061
       supports-color: registry.npmmirror.com/supports-color/7.2.0
1053 1062
     dev: true
1054 1063
 
1055
-  registry.npmmirror.com/classnames/2.3.1:
1056
-    resolution: {integrity: sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/classnames/-/classnames-2.3.1.tgz}
1057
-    name: classnames
1058
-    version: 2.3.1
1059
-    dev: false
1060
-
1061 1064
   registry.npmmirror.com/classnames/2.3.2:
1062 1065
     resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/classnames/-/classnames-2.3.2.tgz}
1063 1066
     name: classnames
@@ -1551,14 +1554,6 @@ packages:
1551 1554
       function-bind: registry.npmmirror.com/function-bind/1.1.1
1552 1555
     dev: true
1553 1556
 
1554
-  registry.npmmirror.com/history/5.3.0:
1555
-    resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/history/-/history-5.3.0.tgz}
1556
-    name: history
1557
-    version: 5.3.0
1558
-    dependencies:
1559
-      '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
1560
-    dev: false
1561
-
1562 1557
   registry.npmmirror.com/iconv-lite/0.6.3:
1563 1558
     resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz}
1564 1559
     name: iconv-lite
@@ -1902,7 +1897,7 @@ packages:
1902 1897
       react-dom: '>=16.9.0'
1903 1898
     dependencies:
1904 1899
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
1905
-      classnames: registry.npmmirror.com/classnames/2.3.1
1900
+      classnames: registry.npmmirror.com/classnames/2.3.2
1906 1901
       dom-align: registry.npmmirror.com/dom-align/1.12.3
1907 1902
       lodash: registry.npmmirror.com/lodash/4.17.21
1908 1903
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
@@ -1922,7 +1917,7 @@ packages:
1922 1917
     dependencies:
1923 1918
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
1924 1919
       array-tree-filter: registry.npmmirror.com/array-tree-filter/2.1.0
1925
-      classnames: registry.npmmirror.com/classnames/2.3.1
1920
+      classnames: registry.npmmirror.com/classnames/2.3.2
1926 1921
       rc-select: registry.npmmirror.com/rc-select/14.1.13_ef5jwxihqo6n7gxfmzogljlgcm
1927 1922
       rc-tree: registry.npmmirror.com/rc-tree/5.7.0_ef5jwxihqo6n7gxfmzogljlgcm
1928 1923
       rc-util: registry.npmmirror.com/rc-util/5.23.0_ef5jwxihqo6n7gxfmzogljlgcm
@@ -1940,7 +1935,7 @@ packages:
1940 1935
       react-dom: '>=16.9.0'
1941 1936
     dependencies:
1942 1937
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
1943
-      classnames: registry.npmmirror.com/classnames/2.3.1
1938
+      classnames: registry.npmmirror.com/classnames/2.3.2
1944 1939
       react: registry.npmmirror.com/react/18.1.0
1945 1940
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
1946 1941
     dev: false
@@ -1955,7 +1950,7 @@ packages:
1955 1950
       react-dom: '>=16.9.0'
1956 1951
     dependencies:
1957 1952
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
1958
-      classnames: registry.npmmirror.com/classnames/2.3.1
1953
+      classnames: registry.npmmirror.com/classnames/2.3.2
1959 1954
       rc-motion: registry.npmmirror.com/rc-motion/2.6.2_ef5jwxihqo6n7gxfmzogljlgcm
1960 1955
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
1961 1956
       react: registry.npmmirror.com/react/18.1.0
@@ -1973,7 +1968,7 @@ packages:
1973 1968
       react-dom: '>=16.9.0'
1974 1969
     dependencies:
1975 1970
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
1976
-      classnames: registry.npmmirror.com/classnames/2.3.1
1971
+      classnames: registry.npmmirror.com/classnames/2.3.2
1977 1972
       rc-motion: registry.npmmirror.com/rc-motion/2.6.2_ef5jwxihqo6n7gxfmzogljlgcm
1978 1973
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
1979 1974
       react: registry.npmmirror.com/react/18.1.0
@@ -1990,7 +1985,7 @@ packages:
1990 1985
       react-dom: '>=16.9.0'
1991 1986
     dependencies:
1992 1987
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
1993
-      classnames: registry.npmmirror.com/classnames/2.3.1
1988
+      classnames: registry.npmmirror.com/classnames/2.3.2
1994 1989
       rc-motion: registry.npmmirror.com/rc-motion/2.6.2_ef5jwxihqo6n7gxfmzogljlgcm
1995 1990
       rc-util: registry.npmmirror.com/rc-util/5.23.0_ef5jwxihqo6n7gxfmzogljlgcm
1996 1991
       react: registry.npmmirror.com/react/18.1.0
@@ -2007,7 +2002,7 @@ packages:
2007 2002
       react-dom: '>=16.11.0'
2008 2003
     dependencies:
2009 2004
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2010
-      classnames: registry.npmmirror.com/classnames/2.3.1
2005
+      classnames: registry.npmmirror.com/classnames/2.3.2
2011 2006
       rc-trigger: registry.npmmirror.com/rc-trigger/5.3.1_ef5jwxihqo6n7gxfmzogljlgcm
2012 2007
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
2013 2008
       react: registry.npmmirror.com/react/18.1.0
@@ -2041,7 +2036,7 @@ packages:
2041 2036
       react-dom: '>=16.9.0'
2042 2037
     dependencies:
2043 2038
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2044
-      classnames: registry.npmmirror.com/classnames/2.3.1
2039
+      classnames: registry.npmmirror.com/classnames/2.3.2
2045 2040
       rc-dialog: registry.npmmirror.com/rc-dialog/8.9.0_ef5jwxihqo6n7gxfmzogljlgcm
2046 2041
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
2047 2042
       react: registry.npmmirror.com/react/18.1.0
@@ -2058,7 +2053,7 @@ packages:
2058 2053
       react-dom: '>=16.9.0'
2059 2054
     dependencies:
2060 2055
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2061
-      classnames: registry.npmmirror.com/classnames/2.3.1
2056
+      classnames: registry.npmmirror.com/classnames/2.3.2
2062 2057
       rc-util: registry.npmmirror.com/rc-util/5.23.0_ef5jwxihqo6n7gxfmzogljlgcm
2063 2058
       react: registry.npmmirror.com/react/18.1.0
2064 2059
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
@@ -2074,7 +2069,7 @@ packages:
2074 2069
       react-dom: '>=16.0.0'
2075 2070
     dependencies:
2076 2071
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2077
-      classnames: registry.npmmirror.com/classnames/2.3.1
2072
+      classnames: registry.npmmirror.com/classnames/2.3.2
2078 2073
       rc-util: registry.npmmirror.com/rc-util/5.23.0_ef5jwxihqo6n7gxfmzogljlgcm
2079 2074
       react: registry.npmmirror.com/react/18.1.0
2080 2075
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
@@ -2090,7 +2085,7 @@ packages:
2090 2085
       react-dom: '>=16.9.0'
2091 2086
     dependencies:
2092 2087
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2093
-      classnames: registry.npmmirror.com/classnames/2.3.1
2088
+      classnames: registry.npmmirror.com/classnames/2.3.2
2094 2089
       rc-menu: registry.npmmirror.com/rc-menu/9.6.4_ef5jwxihqo6n7gxfmzogljlgcm
2095 2090
       rc-textarea: registry.npmmirror.com/rc-textarea/0.3.7_ef5jwxihqo6n7gxfmzogljlgcm
2096 2091
       rc-trigger: registry.npmmirror.com/rc-trigger/5.3.1_ef5jwxihqo6n7gxfmzogljlgcm
@@ -2109,7 +2104,7 @@ packages:
2109 2104
       react-dom: '>=16.9.0'
2110 2105
     dependencies:
2111 2106
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2112
-      classnames: registry.npmmirror.com/classnames/2.3.1
2107
+      classnames: registry.npmmirror.com/classnames/2.3.2
2113 2108
       rc-motion: registry.npmmirror.com/rc-motion/2.6.2_ef5jwxihqo6n7gxfmzogljlgcm
2114 2109
       rc-overflow: registry.npmmirror.com/rc-overflow/1.2.8_ef5jwxihqo6n7gxfmzogljlgcm
2115 2110
       rc-trigger: registry.npmmirror.com/rc-trigger/5.3.1_ef5jwxihqo6n7gxfmzogljlgcm
@@ -2129,7 +2124,7 @@ packages:
2129 2124
       react-dom: '>=16.9.0'
2130 2125
     dependencies:
2131 2126
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2132
-      classnames: registry.npmmirror.com/classnames/2.3.1
2127
+      classnames: registry.npmmirror.com/classnames/2.3.2
2133 2128
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
2134 2129
       react: registry.npmmirror.com/react/18.1.0
2135 2130
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
@@ -2146,7 +2141,7 @@ packages:
2146 2141
       react-dom: '>=16.9.0'
2147 2142
     dependencies:
2148 2143
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2149
-      classnames: registry.npmmirror.com/classnames/2.3.1
2144
+      classnames: registry.npmmirror.com/classnames/2.3.2
2150 2145
       rc-motion: registry.npmmirror.com/rc-motion/2.6.2_ef5jwxihqo6n7gxfmzogljlgcm
2151 2146
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
2152 2147
       react: registry.npmmirror.com/react/18.1.0
@@ -2163,7 +2158,7 @@ packages:
2163 2158
       react-dom: '>=16.9.0'
2164 2159
     dependencies:
2165 2160
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2166
-      classnames: registry.npmmirror.com/classnames/2.3.1
2161
+      classnames: registry.npmmirror.com/classnames/2.3.2
2167 2162
       rc-resize-observer: registry.npmmirror.com/rc-resize-observer/1.2.0_ef5jwxihqo6n7gxfmzogljlgcm
2168 2163
       rc-util: registry.npmmirror.com/rc-util/5.23.0_ef5jwxihqo6n7gxfmzogljlgcm
2169 2164
       react: registry.npmmirror.com/react/18.1.0
@@ -2180,7 +2175,7 @@ packages:
2180 2175
       react-dom: '>=16.9.0'
2181 2176
     dependencies:
2182 2177
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2183
-      classnames: registry.npmmirror.com/classnames/2.3.1
2178
+      classnames: registry.npmmirror.com/classnames/2.3.2
2184 2179
       react: registry.npmmirror.com/react/18.1.0
2185 2180
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
2186 2181
     dev: false
@@ -2196,7 +2191,7 @@ packages:
2196 2191
       react-dom: '>=16.9.0'
2197 2192
     dependencies:
2198 2193
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2199
-      classnames: registry.npmmirror.com/classnames/2.3.1
2194
+      classnames: registry.npmmirror.com/classnames/2.3.2
2200 2195
       date-fns: registry.npmmirror.com/date-fns/2.29.1
2201 2196
       dayjs: registry.npmmirror.com/dayjs/1.11.4
2202 2197
       moment: registry.npmmirror.com/moment/2.29.4
@@ -2217,7 +2212,7 @@ packages:
2217 2212
       react-dom: '>=16.9.0'
2218 2213
     dependencies:
2219 2214
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2220
-      classnames: registry.npmmirror.com/classnames/2.3.1
2215
+      classnames: registry.npmmirror.com/classnames/2.3.2
2221 2216
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
2222 2217
       react: registry.npmmirror.com/react/18.1.0
2223 2218
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
@@ -2234,7 +2229,7 @@ packages:
2234 2229
       react-dom: '>=16.9.0'
2235 2230
     dependencies:
2236 2231
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2237
-      classnames: registry.npmmirror.com/classnames/2.3.1
2232
+      classnames: registry.npmmirror.com/classnames/2.3.2
2238 2233
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
2239 2234
       react: registry.npmmirror.com/react/18.1.0
2240 2235
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
@@ -2250,7 +2245,7 @@ packages:
2250 2245
       react-dom: '>=16.9.0'
2251 2246
     dependencies:
2252 2247
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2253
-      classnames: registry.npmmirror.com/classnames/2.3.1
2248
+      classnames: registry.npmmirror.com/classnames/2.3.2
2254 2249
       rc-util: registry.npmmirror.com/rc-util/5.23.0_ef5jwxihqo6n7gxfmzogljlgcm
2255 2250
       react: registry.npmmirror.com/react/18.1.0
2256 2251
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
@@ -2267,7 +2262,7 @@ packages:
2267 2262
       react-dom: '>=16.0.0'
2268 2263
     dependencies:
2269 2264
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2270
-      classnames: registry.npmmirror.com/classnames/2.3.1
2265
+      classnames: registry.npmmirror.com/classnames/2.3.2
2271 2266
       rc-motion: registry.npmmirror.com/rc-motion/2.6.2_ef5jwxihqo6n7gxfmzogljlgcm
2272 2267
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
2273 2268
       react: registry.npmmirror.com/react/18.1.0
@@ -2285,7 +2280,7 @@ packages:
2285 2280
       react-dom: '*'
2286 2281
     dependencies:
2287 2282
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2288
-      classnames: registry.npmmirror.com/classnames/2.3.1
2283
+      classnames: registry.npmmirror.com/classnames/2.3.2
2289 2284
       rc-motion: registry.npmmirror.com/rc-motion/2.6.2_ef5jwxihqo6n7gxfmzogljlgcm
2290 2285
       rc-overflow: registry.npmmirror.com/rc-overflow/1.2.8_ef5jwxihqo6n7gxfmzogljlgcm
2291 2286
       rc-trigger: registry.npmmirror.com/rc-trigger/5.3.1_ef5jwxihqo6n7gxfmzogljlgcm
@@ -2306,7 +2301,7 @@ packages:
2306 2301
       react-dom: '>=16.9.0'
2307 2302
     dependencies:
2308 2303
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2309
-      classnames: registry.npmmirror.com/classnames/2.3.1
2304
+      classnames: registry.npmmirror.com/classnames/2.3.2
2310 2305
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
2311 2306
       react: registry.npmmirror.com/react/18.1.0
2312 2307
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
@@ -2324,7 +2319,7 @@ packages:
2324 2319
       react-dom: '>=16.9.0'
2325 2320
     dependencies:
2326 2321
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2327
-      classnames: registry.npmmirror.com/classnames/2.3.1
2322
+      classnames: registry.npmmirror.com/classnames/2.3.2
2328 2323
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
2329 2324
       react: registry.npmmirror.com/react/18.1.0
2330 2325
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
@@ -2340,7 +2335,7 @@ packages:
2340 2335
       react-dom: '>=16.9.0'
2341 2336
     dependencies:
2342 2337
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2343
-      classnames: registry.npmmirror.com/classnames/2.3.1
2338
+      classnames: registry.npmmirror.com/classnames/2.3.2
2344 2339
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
2345 2340
       react: registry.npmmirror.com/react/18.1.0
2346 2341
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
@@ -2357,7 +2352,7 @@ packages:
2357 2352
       react-dom: '>=16.9.0'
2358 2353
     dependencies:
2359 2354
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2360
-      classnames: registry.npmmirror.com/classnames/2.3.1
2355
+      classnames: registry.npmmirror.com/classnames/2.3.2
2361 2356
       rc-resize-observer: registry.npmmirror.com/rc-resize-observer/1.2.0_ef5jwxihqo6n7gxfmzogljlgcm
2362 2357
       rc-util: registry.npmmirror.com/rc-util/5.23.0_ef5jwxihqo6n7gxfmzogljlgcm
2363 2358
       react: registry.npmmirror.com/react/18.1.0
@@ -2376,7 +2371,7 @@ packages:
2376 2371
       react-dom: '>=16.9.0'
2377 2372
     dependencies:
2378 2373
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2379
-      classnames: registry.npmmirror.com/classnames/2.3.1
2374
+      classnames: registry.npmmirror.com/classnames/2.3.2
2380 2375
       rc-dropdown: registry.npmmirror.com/rc-dropdown/4.0.1_ef5jwxihqo6n7gxfmzogljlgcm
2381 2376
       rc-menu: registry.npmmirror.com/rc-menu/9.6.4_ef5jwxihqo6n7gxfmzogljlgcm
2382 2377
       rc-motion: registry.npmmirror.com/rc-motion/2.6.2_ef5jwxihqo6n7gxfmzogljlgcm
@@ -2396,7 +2391,7 @@ packages:
2396 2391
       react-dom: '>=16.9.0'
2397 2392
     dependencies:
2398 2393
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2399
-      classnames: registry.npmmirror.com/classnames/2.3.1
2394
+      classnames: registry.npmmirror.com/classnames/2.3.2
2400 2395
       rc-resize-observer: registry.npmmirror.com/rc-resize-observer/1.2.0_ef5jwxihqo6n7gxfmzogljlgcm
2401 2396
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
2402 2397
       react: registry.npmmirror.com/react/18.1.0
@@ -2414,7 +2409,7 @@ packages:
2414 2409
       react-dom: '>=16.9.0'
2415 2410
     dependencies:
2416 2411
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2417
-      classnames: registry.npmmirror.com/classnames/2.3.1
2412
+      classnames: registry.npmmirror.com/classnames/2.3.2
2418 2413
       rc-trigger: registry.npmmirror.com/rc-trigger/5.3.1_ef5jwxihqo6n7gxfmzogljlgcm
2419 2414
       react: registry.npmmirror.com/react/18.1.0
2420 2415
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
@@ -2430,7 +2425,7 @@ packages:
2430 2425
       react-dom: '*'
2431 2426
     dependencies:
2432 2427
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2433
-      classnames: registry.npmmirror.com/classnames/2.3.1
2428
+      classnames: registry.npmmirror.com/classnames/2.3.2
2434 2429
       rc-select: registry.npmmirror.com/rc-select/14.1.13_ef5jwxihqo6n7gxfmzogljlgcm
2435 2430
       rc-tree: registry.npmmirror.com/rc-tree/5.7.0_ef5jwxihqo6n7gxfmzogljlgcm
2436 2431
       rc-util: registry.npmmirror.com/rc-util/5.23.0_ef5jwxihqo6n7gxfmzogljlgcm
@@ -2449,7 +2444,7 @@ packages:
2449 2444
       react-dom: '*'
2450 2445
     dependencies:
2451 2446
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2452
-      classnames: registry.npmmirror.com/classnames/2.3.1
2447
+      classnames: registry.npmmirror.com/classnames/2.3.2
2453 2448
       rc-motion: registry.npmmirror.com/rc-motion/2.6.2_ef5jwxihqo6n7gxfmzogljlgcm
2454 2449
       rc-util: registry.npmmirror.com/rc-util/5.23.0_ef5jwxihqo6n7gxfmzogljlgcm
2455 2450
       rc-virtual-list: registry.npmmirror.com/rc-virtual-list/3.4.8_ef5jwxihqo6n7gxfmzogljlgcm
@@ -2468,7 +2463,7 @@ packages:
2468 2463
       react-dom: '>=16.9.0'
2469 2464
     dependencies:
2470 2465
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2471
-      classnames: registry.npmmirror.com/classnames/2.3.1
2466
+      classnames: registry.npmmirror.com/classnames/2.3.2
2472 2467
       rc-align: registry.npmmirror.com/rc-align/4.0.12_ef5jwxihqo6n7gxfmzogljlgcm
2473 2468
       rc-motion: registry.npmmirror.com/rc-motion/2.6.2_ef5jwxihqo6n7gxfmzogljlgcm
2474 2469
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
@@ -2486,7 +2481,7 @@ packages:
2486 2481
       react-dom: '>=16.9.0'
2487 2482
     dependencies:
2488 2483
       '@babel/runtime': registry.npmmirror.com/@babel/runtime/7.18.9
2489
-      classnames: registry.npmmirror.com/classnames/2.3.1
2484
+      classnames: registry.npmmirror.com/classnames/2.3.2
2490 2485
       rc-util: registry.npmmirror.com/rc-util/5.24.4_ef5jwxihqo6n7gxfmzogljlgcm
2491 2486
       react: registry.npmmirror.com/react/18.1.0
2492 2487
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
@@ -2546,7 +2541,7 @@ packages:
2546 2541
       react: '*'
2547 2542
       react-dom: '*'
2548 2543
     dependencies:
2549
-      classnames: registry.npmmirror.com/classnames/2.3.1
2544
+      classnames: registry.npmmirror.com/classnames/2.3.2
2550 2545
       rc-resize-observer: registry.npmmirror.com/rc-resize-observer/1.2.0_ef5jwxihqo6n7gxfmzogljlgcm
2551 2546
       rc-util: registry.npmmirror.com/rc-util/5.23.0_ef5jwxihqo6n7gxfmzogljlgcm
2552 2547
       react: registry.npmmirror.com/react/18.1.0
@@ -2606,30 +2601,32 @@ packages:
2606 2601
     engines: {node: '>=0.10.0'}
2607 2602
     dev: true
2608 2603
 
2609
-  registry.npmmirror.com/react-router-dom/6.3.0_ef5jwxihqo6n7gxfmzogljlgcm:
2610
-    resolution: {integrity: sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/react-router-dom/-/react-router-dom-6.3.0.tgz}
2611
-    id: registry.npmmirror.com/react-router-dom/6.3.0
2604
+  registry.npmmirror.com/react-router-dom/6.4.2_ef5jwxihqo6n7gxfmzogljlgcm:
2605
+    resolution: {integrity: sha512-yM1kjoTkpfjgczPrcyWrp+OuQMyB1WleICiiGfstnQYo/S8hPEEnVjr/RdmlH6yKK4Tnj1UGXFSa7uwAtmDoLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/react-router-dom/-/react-router-dom-6.4.2.tgz}
2606
+    id: registry.npmmirror.com/react-router-dom/6.4.2
2612 2607
     name: react-router-dom
2613
-    version: 6.3.0
2608
+    version: 6.4.2
2609
+    engines: {node: '>=14'}
2614 2610
     peerDependencies:
2615 2611
       react: '>=16.8'
2616 2612
       react-dom: '>=16.8'
2617 2613
     dependencies:
2618
-      history: registry.npmmirror.com/history/5.3.0
2614
+      '@remix-run/router': registry.npmmirror.com/@remix-run/router/1.0.2
2619 2615
       react: registry.npmmirror.com/react/18.1.0
2620 2616
       react-dom: registry.npmmirror.com/react-dom/18.1.0_react@18.1.0
2621
-      react-router: registry.npmmirror.com/react-router/6.3.0_react@18.1.0
2617
+      react-router: registry.npmmirror.com/react-router/6.4.2_react@18.1.0
2622 2618
     dev: false
2623 2619
 
2624
-  registry.npmmirror.com/react-router/6.3.0_react@18.1.0:
2625
-    resolution: {integrity: sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/react-router/-/react-router-6.3.0.tgz}
2626
-    id: registry.npmmirror.com/react-router/6.3.0
2620
+  registry.npmmirror.com/react-router/6.4.2_react@18.1.0:
2621
+    resolution: {integrity: sha512-Rb0BAX9KHhVzT1OKhMvCDMw776aTYM0DtkxqUBP8dNBom3mPXlfNs76JNGK8wKJ1IZEY1+WGj+cvZxHVk/GiKw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/react-router/-/react-router-6.4.2.tgz}
2622
+    id: registry.npmmirror.com/react-router/6.4.2
2627 2623
     name: react-router
2628
-    version: 6.3.0
2624
+    version: 6.4.2
2625
+    engines: {node: '>=14'}
2629 2626
     peerDependencies:
2630 2627
       react: '>=16.8'
2631 2628
     dependencies:
2632
-      history: registry.npmmirror.com/history/5.3.0
2629
+      '@remix-run/router': registry.npmmirror.com/@remix-run/router/1.0.2
2633 2630
       react: registry.npmmirror.com/react/18.1.0
2634 2631
     dev: false
2635 2632
 

+ 2
- 27
src/App.jsx View File

@@ -1,35 +1,10 @@
1 1
 import { useState } from 'react'
2
-import { Button } from 'antd'
3
-import reactLogo from './assets/react.svg'
4
-import './App.css'
2
+
5 3
 
6 4
 function App() {
7 5
   const [count, setCount] = useState(0)
8 6
 
9
-  return (
10
-    <div className="App">
11
-      <div>
12
-        <a href="https://vitejs.dev" target="_blank">
13
-          <img src="/vite.svg" className="logo" alt="Vite logo" />
14
-        </a>
15
-        <a href="https://reactjs.org" target="_blank">
16
-          <img src={reactLogo} className="logo react" alt="React logo" />
17
-        </a>
18
-      </div>
19
-      <h1>Vite + React</h1>
20
-      <div className="card">
21
-        <Button type='primary' onClick={() => setCount((count) => count + 1)}>
22
-          count is {count}
23
-        </Button>
24
-        <p>
25
-          Edit <code>src/App.jsx</code> and save to test HMR
26
-        </p>
27
-      </div>
28
-      <p className="read-the-docs">
29
-        Click on the Vite and React logos to learn more
30
-      </p>
31
-    </div>
32
-  )
7
+  return null;
33 8
 }
34 9
 
35 10
 export default App

+ 8
- 15
src/components/page/index.jsx View File

@@ -1,24 +1,17 @@
1 1
 import React from 'react';
2
-import { PageHeader } from 'antd';
3
-import useRoute from '@/routes/useRoute';
2
+// import { PageHeader } from 'antd';
3
+// import useRoute from '@/routes/useRoute';
4 4
 import Container from './Container';
5 5
 
6 6
 export default (props) => {
7
-  const { children, ...headerProps } = props;
7
+  // const { children, ...headerProps } = props;
8 8
 
9
-  const currentRoute = useRoute() || {};
10
-  const { title } = currentRoute.meta || {};
9
+  // const currentRoute = useRoute() || {};
10
+  // const { title } = currentRoute.meta || {};
11 11
 
12 12
   return (
13
-    <>
14
-      <PageHeader
15
-        ghost={false}
16
-        title={title}
17
-        {...headerProps}
18
-      />
19
-      <Container>
20
-        {children}
21
-      </Container>
22
-    </>
13
+    <Container>
14
+      {props.children}
15
+    </Container>
23 16
   )
24 17
 }

+ 15
- 3
src/index.less View File

@@ -7,7 +7,8 @@ html, body, #root {
7 7
 :root {
8 8
   --theme-color: #fff;
9 9
   --theme-front: #000;
10
-  --header-height: 64px;
10
+  --header-height: 48px;
11
+  --siderbar-width: 240px;
11 12
 }
12 13
 
13 14
 .main-layout {
@@ -29,10 +30,17 @@ html, body, #root {
29 30
   background-color: #f0f2f5;
30 31
 }
31 32
 
33
+.ant-layout-header {
34
+  line-height: var(--header-height);
35
+  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
36
+  z-index: 10;
37
+}
38
+
32 39
 .layout-sidebar {
40
+  width: var(--siderbar-width);
33 41
   background-color: var(--theme-color);
34 42
   color: var(--theme-front);
35
-  box-shadow: 2px 0 8px 0 rgba(29,35,41,.05);
43
+  box-shadow: 1px 0 4px 0 rgba(0, 21, 41, 0.04);
36 44
 }
37 45
 
38 46
 
@@ -46,6 +54,10 @@ html, body, #root {
46 54
   padding: 16px;
47 55
 }
48 56
 
57
+.ant-pro .ant-pro-query-filter .ant-form-item {
58
+  margin: 0;
59
+}
60
+
49 61
 .ant-pro-page-container .ant-pro-page-container-warp-page-header ~ .ant-pro-grid-content .ant-pro-page-container-children-content {
50 62
   margin: 8px 40px 40px 40px;
51 63
 }
@@ -56,4 +68,4 @@ html, body, #root {
56 68
 
57 69
 .ant-pro-card .ant-pro-card-body {
58 70
   padding: 16px 24px;
59
-}
71
+}

+ 5
- 3
src/layouts/AuthLayout/components/Header/Logo.jsx View File

@@ -1,15 +1,17 @@
1 1
 import React from 'react';
2
+import { Typography } from 'antd';
2 3
 import { NavLink } from "react-router-dom";
3 4
 import { useModel } from '@/store';
4 5
 
5
-export default (props) => {
6
+const { Title } = Typography;
6 7
 
7
-  const { config } = useModel('system');
8
+export default (props) => {
9
+  const { app } = useModel('system');
8 10
 
9 11
   return (
10 12
     <NavLink className='logo'  to="/">
11 13
       <img src="./logo.png" alt="" />
12
-      <h3>{config.shorName}</h3>
14
+      <Title level={5}>{app.shorName}</Title>
13 15
     </NavLink>
14 16
   )
15 17
 }

+ 25
- 0
src/layouts/AuthLayout/components/Header/Title.jsx View File

@@ -0,0 +1,25 @@
1
+import { Typography } from 'antd';
2
+import { useModel } from '@/store';
3
+
4
+const { Title } = Typography;
5
+
6
+const titleStyle = {
7
+  margin: 0,
8
+}
9
+
10
+const spanStyle = {
11
+  display: 'inline-block',
12
+  width: '24px',
13
+  textAlign: 'center'
14
+}
15
+
16
+export default (props) => {
17
+  const { title } = useModel('system');
18
+
19
+  return (
20
+    <Title level={5} style={titleStyle}>
21
+      <span style={spanStyle}>&raquo;</span>
22
+      <span>{title}</span>    
23
+    </Title>
24
+  );
25
+}

+ 14
- 2
src/layouts/AuthLayout/components/Header/index.jsx View File

@@ -1,15 +1,27 @@
1
-import React from 'react';
1
+import React, { useMemo } from 'react';
2 2
 import { Layout, Space } from 'antd';
3
+import classNames from 'classnames';
3 4
 import Logo from './Logo';
5
+import Title from './Title';
4 6
 import User from './User';
5 7
 import Exit from './Exit';
6 8
 
7 9
 const { Header } = Layout;
8 10
 
9 11
 export default (props) => {
12
+
13
+  const className = useMemo(() => classNames({
14
+    'layout-header': true,
15
+    'light': props.theme === 'light',
16
+  }), [props.theme]);
17
+
18
+
10 19
   return (
11
-    <Header className='layout-header'>
20
+    <Header className={className}>
12 21
       <Logo />
22
+      <div className="header-content">
23
+        <Title />
24
+      </div>
13 25
       <Space>
14 26
         <User />
15 27
         <Exit />

+ 17
- 0
src/layouts/AuthLayout/components/HtmlTitle.jsx View File

@@ -0,0 +1,17 @@
1
+
2
+import { Helmet } from "react-helmet";
3
+import { useModel } from '@/store';
4
+
5
+export default (props) => {
6
+  const { app } = useModel('system');
7
+  const { title } = useModel('route');
8
+  
9
+  const titleTemplate = `%s - ${app.fullName}`;
10
+  const defaultTitle = app.fullName;
11
+
12
+  return (
13
+    <Helmet titleTemplate={titleTemplate} defaultTitle={defaultTitle}>
14
+      <title>{title}</title>
15
+    </Helmet>
16
+  );
17
+}

+ 3
- 1
src/layouts/AuthLayout/components/Menus.jsx View File

@@ -10,6 +10,8 @@ const linkTo = url => {
10 10
   a.click();
11 11
 }
12 12
 
13
+const menuStyle = { height: '100%' };
14
+
13 15
 export default (props) => {
14 16
   const { theme } = props;
15 17
 
@@ -26,6 +28,6 @@ export default (props) => {
26 28
   }
27 29
 
28 30
   return (
29
-    <Menu theme={theme} items={items} onClick={onClick} />
31
+    <Menu style={menuStyle} theme={theme} items={items} onClick={onClick} />
30 32
   )
31 33
 }

+ 9
- 2
src/layouts/AuthLayout/components/SiderBar.jsx View File

@@ -1,15 +1,22 @@
1
-import React from 'react';
1
+import React, { useMemo } from 'react';
2 2
 import { Layout, Spin } from 'antd';
3 3
 import { useModel } from '@/store'
4
+import { getPropertyValue } from '@/utils/css';
4 5
 import Menus from './Menus';
5 6
 
6 7
 const { Sider } = Layout;
7 8
 
9
+
8 10
 export default (props) => {
11
+
12
+  const width = useMemo(() => {
13
+    return /\d+/.exec(getPropertyValue('--siderbar-width'))[0] - 0;
14
+  }, []);
15
+
9 16
   const { theme } = useModel('system');
10 17
 
11 18
   return (
12
-    <Sider className='layout-sidebar' theme={theme} collapsible width={240} >
19
+    <Sider className='layout-sidebar' theme={theme} collapsible width={width}>
13 20
       <Menus theme={theme}/>
14 21
     </Sider>
15 22
   )

+ 11
- 11
src/layouts/AuthLayout/index.jsx View File

@@ -1,25 +1,25 @@
1 1
 import React, { useEffect, useRef, useMemo, useState } from 'react';
2 2
 import { Layout, Spin } from 'antd';
3
-import { Helmet } from "react-helmet";
3
+import { useLocation } from "react-router-dom";
4 4
 import { useModel } from '@/store';
5
-import useRoute from '@/routes/useRoute';
6 5
 import RequireLogin from './components/RequireLogin';
7 6
 import SiderBar from './components/SiderBar';
8 7
 import Header from './components/Header';
9 8
 import Container from './components/Container';
9
+import HtmlTitle from './components/HtmlTitle';
10 10
 import useReady from './useReady';
11 11
 
12 12
 import './style.less';
13 13
 
14 14
 export default (props) => {
15
-  const { config } = useModel('system');
15
+  const { theme } = useModel('system');
16
+  const { setLocation } = useModel('route');
16 17
   const { user, getCurrent } = useModel('user');
18
+
17 19
   // const isReady = useReady(user)
18 20
   // const isReady = true
19 21
 
20
-  const currentRoute = useRoute();
21
-  const titleTemplate = `%s - ${config.appName}`
22
-  const pageTitle = currentRoute && currentRoute.meta ? currentRoute.meta.title : undefined;
22
+  const location = useLocation();
23 23
 
24 24
   useEffect(() => {
25 25
     if (!user) {
@@ -27,16 +27,16 @@ export default (props) => {
27 27
     }
28 28
   }, []);
29 29
 
30
+  useEffect(() => setLocation(location), [location]);
31
+
30 32
   return (
31 33
     <Spin spinning={!user} size="large">
32
-      <Helmet titleTemplate={titleTemplate} defaultTitle={config.appName}>
33
-        <title>{pageTitle}</title>
34
-      </Helmet>
34
+      <HtmlTitle />
35 35
       <RequireLogin>
36 36
         <div className='main-layout'>
37
-          <Header />
37
+          <Header theme={theme} />
38 38
           <Layout>
39
-            <SiderBar />
39
+            <SiderBar theme={theme} />
40 40
             <Container />
41 41
           </Layout>
42 42
         </div>

+ 16
- 4
src/layouts/AuthLayout/style.less View File

@@ -1,20 +1,32 @@
1 1
 .layout-header {
2
-  height: 48px;
2
+  height: var(--header-height);
3 3
   box-sizing: border-box;
4 4
   padding: 0;
5 5
   display: flex;
6 6
   align-items: center;
7 7
   justify-content: space-between;
8
+  color: #fff;
9
+
10
+  &.light {
11
+    background-color: #fff;
12
+    color: #000;
13
+  }
14
+
15
+  .header-content {
16
+    flex: 1;
17
+  }
8 18
 
9 19
   .logo {
10
-    width: 200px; // 200 是 side-bar 宽度
20
+    width: var(--siderbar-width);
11 21
     display: flex;
12 22
     align-items: center;
13 23
     box-sizing: border-box;
14 24
     padding-left: 1em;
25
+    color: inherit;
15 26
 
16 27
     & > * {
17
-      color: #fff;
28
+      color: inherit;
29
+      margin: 0;
18 30
     }
19 31
 
20 32
     img {
@@ -25,7 +37,7 @@
25 37
   }
26 38
 
27 39
   .font {
28
-    color: #fff;
40
+    color: inherit;
29 41
     display: inline-block;
30 42
   }
31 43
 

+ 2
- 2
src/pages/404/index.jsx View File

@@ -11,12 +11,12 @@ const style = {
11 11
 }
12 12
 
13 13
 export default (props) => {
14
-  const { config } = useModel('system');
14
+  const { app } = useModel('system');
15 15
 
16 16
   return (
17 17
     <div style={style}>
18 18
       <Helmet>
19
-        <title>{config.appName}</title>
19
+        <title>{app.fullName}</title>
20 20
       </Helmet>
21 21
       <Result
22 22
         status="404"

+ 4
- 4
src/pages/login/index.jsx View File

@@ -8,11 +8,11 @@ import './style.less';
8 8
 const year = new Date().getFullYear();
9 9
 
10 10
 export default (props) => {
11
-  const { config } = useModel('system');
11
+  const { app } = useModel('system');
12 12
 
13 13
   const baseUrl = import.meta.env.BASE_URL;
14
-  const title = `欢迎使用${config.appName}`;
15
-  const copyright = `${config.company} @ ${year}`;
14
+  const title = `欢迎使用${app.fullName}`;
15
+  const copyright = `${app.company} @ ${year}`;
16 16
 
17 17
   useEffect(() => {
18 18
     const oScript = document.createElement("script");
@@ -33,7 +33,7 @@ export default (props) => {
33 33
   return (
34 34
     <div className='login-page'>
35 35
       <Helmet>
36
-        <title>{config.appName}</title>
36
+        <title>{app.fullName}</title>
37 37
       </Helmet>
38 38
       <div id="particles-js"></div>
39 39
       <div className="login-page-container">

+ 3
- 8
src/routes/Router.jsx View File

@@ -1,12 +1,7 @@
1
-import { HashRouter, useRoutes } from "react-router-dom";
1
+import { createHashRouter, RouterProvider } from "react-router-dom";
2 2
 import routes from './routes'
3 3
 
4
-const Routes = () => useRoutes(routes);
5
-
4
+const router = createHashRouter(routes);
6 5
 export default (props) => {
7
-  return (
8
-    <HashRouter>
9
-      <Routes />
10
-    </HashRouter>
11
-  )
6
+  return <RouterProvider router={router} />
12 7
 }

+ 2
- 0
src/store/index.js View File

@@ -1,9 +1,11 @@
1 1
 import { createStore } from "@zjxpcyc/react-tiny-store";
2 2
 import useSystem from "./models/system";
3
+import useRoute from "./models/route";
3 4
 import useUser from "./models/user";
4 5
 
5 6
 const store = createStore({
6 7
   system: useSystem,
8
+  route: useRoute,
7 9
   user: useUser,
8 10
 });
9 11
 

+ 31
- 0
src/store/models/route.js View File

@@ -0,0 +1,31 @@
1
+import { useState, useRef, useEffect } from "react";
2
+import { getRouteArr } from '@/routes/menus';
3
+
4
+export default function useRoute() {
5
+  const routesRef = useRef();
6
+  const [location, setLocation] = useState({});
7
+  const [route, setRoute] = useState();
8
+  const [title, setTitle] = useState();
9
+
10
+  const { pathname, search } = location;
11
+
12
+  // 监控 route 改变
13
+  useEffect(() => {
14
+    // 获取当前路由
15
+    if (!routesRef.current || !routesRef.current.length) {
16
+      routesRef.current = getRouteArr();
17
+    }
18
+    const current = (routesRef.current || []).filter(x => x.path === pathname)[0];
19
+    setRoute(current);
20
+
21
+    //
22
+    const { title } = current && current.meta || {}
23
+    setTitle(title);
24
+  }, [pathname, search]);
25
+
26
+  return {
27
+    route,
28
+    title,
29
+    setLocation,
30
+  }
31
+}

+ 12
- 25
src/store/models/system.js View File

@@ -1,37 +1,24 @@
1
-import { useCallback } from "react";
2
-import { useState } from "react";
3
-
4
-const setRootCssVar = (key, val) => {
5
-  document.documentElement.style.setProperty(key, val);
6
-}
1
+import { useState, useCallback } from "react";
7 2
 
8 3
 export default function useSystem() {
9
-  const [theme, setTheme] = useState('light');
10
-  const [config, setConfig] = useState({
11
-    appName: '云致科技信息管理系统',
4
+  // 主题
5
+  const [theme, updateTheme] = useState('light');
6
+
7
+  // 其他配置
8
+  const [app, setApp] = useState({
9
+    fullName: '云致科技信息管理系统',
12 10
     shorName: '云致科技',
13 11
     company: '云致科技'
14 12
   });
15 13
 
16
-  const updateTheme = useCallback((t) => {
17
-    setTheme(t);
18
-    switch (t) {
19
-      case 'dark':
20
-        setRootCssVar('--theme-color', '#001529');
21
-        setRootCssVar('--theme-front', '#fff');
22
-        break;
23
-      case 'light':
24
-      default:
25
-        setRootCssVar('--theme-color', '#fff');
26
-        setRootCssVar('--theme-front', '#000');
27
-        break;
28
-    }
29
-  }, [])
14
+  // 页面标题
15
+  const [title, setTitle] = useState();
30 16
 
31 17
   return {
32 18
     theme,
33 19
     updateTheme,
34
-    config,
35
-    setConfig,
20
+    app,
21
+    title,
22
+    setTitle,
36 23
   }
37 24
 }

+ 8
- 0
src/utils/css.js View File

@@ -0,0 +1,8 @@
1
+
2
+export function setProperty(...args) {
3
+  document.documentElement.style.setProperty(...args);
4
+}
5
+
6
+export function getPropertyValue(...args) {
7
+  return getComputedStyle(document.documentElement).getPropertyValue(...args);
8
+}

+ 36
- 0
src/utils/hooks/usePrompt.jsx View File

@@ -0,0 +1,36 @@
1
+import React from "react";
2
+import { UNSAFE_NavigationContext } from "react-router-dom";
3
+
4
+// 估计在 react-router v6 的后续某个版本 usePrompt 会回归
5
+export function usePrompt(message, when = true) {
6
+  let blocker = React.useCallback(
7
+    tx => {
8
+      if (window.confirm(message)) tx.retry();
9
+    },
10
+    [message]
11
+  );
12
+
13
+  useBlocker(blocker, when);
14
+}
15
+
16
+function useBlocker(blocker, when = true) {
17
+  let { navigator } = React.useContext(UNSAFE_NavigationContext);
18
+
19
+  React.useEffect(() => {
20
+    if (!when) return;
21
+
22
+    let unblock = navigator.block((tx) => {
23
+      let autoUnblockingTx = {
24
+        ...tx,
25
+        retry() {
26
+          unblock();
27
+          tx.retry();
28
+        }
29
+      };
30
+
31
+      blocker(autoUnblockingTx);
32
+    });
33
+
34
+    return unblock;
35
+  }, [navigator, blocker, when]);
36
+}

src/routes/useRoute.jsx → src/utils/hooks/useRoute.jsx View File

@@ -1,6 +1,7 @@
1 1
 import { useLocation } from "react-router-dom";
2
-import { getRouteArr } from './menus';
2
+import { getRouteArr } from '@/routes/menus';
3 3
 
4
+// 获取当前的 route 信息
4 5
 export default function useRoute() {
5 6
   const location = useLocation();
6 7
   const routeArr = getRouteArr();

+ 26
- 0
src/utils/hooks/useTitle.jsx View File

@@ -0,0 +1,26 @@
1
+
2
+import { useEffect } from "react";
3
+import { useLocation } from "react-router-dom";
4
+import { useModel } from '@/store';
5
+import useRoute from './useRoute';
6
+
7
+export default function useTitle(newTitle) {
8
+  
9
+  const { app, title, setTitle} = useModel('system');
10
+  const currentRoute = useRoute();
11
+
12
+  const { pathname, search } = useLocation();
13
+  const titleTemplate = `%s - ${app.fullName}`
14
+  const pageTitle = currentRoute && currentRoute.meta ? currentRoute.meta.title : undefined;
15
+
16
+  // route change, reset title
17
+  useEffect(() => {
18
+    setTitle();
19
+  }, [pathname, search]);
20
+  
21
+  useEffect(() => {
22
+    setTitle(newTitle || pageTitle);
23
+  }, [newTitle, pageTitle]);
24
+
25
+  return [title, titleTemplate, app.fullName];
26
+}

+ 19
- 0
src/utils/observe.js View File

@@ -0,0 +1,19 @@
1
+
2
+export default function observe() {
3
+  const listeners = [];
4
+
5
+  const subscribe = (fn) => {
6
+    listeners.push(fn);
7
+
8
+    return () => listeners.splice(listeners.indexOf(fn), 1)
9
+  }
10
+
11
+  const notify = (...args) => {
12
+    listeners.forEach(fn => fn(...args))
13
+  }
14
+
15
+  return {
16
+    subscribe,
17
+    notify,
18
+  }
19
+}