Ver código fonte

feat: 服务日志滚动加载

feat: 8.18 daily commit

feat: 升级@umijs/route-utils

feat: 1

fix: 补充提交
lanjianrong 4 anos atrás
pai
commit
7473f7b8b6

+ 1 - 1
config/config.ts

@@ -26,7 +26,7 @@ export default defineConfig({
   srcTranspiler: 'esbuild',
   fastRefresh: true,
   unocss: {
-    watch: ['src/{pages,components}/**/*.{jsx,tsx}'] // 添加其他包含 unocss 的 classname 的文件目录
+    watch: ['src/**/*.{jsx,tsx}'] // 添加其他包含 unocss 的 classname 的文件目录
   },
   // Fast Refresh 热更新
   theme: { 'primary-color': '#886ab5' },

+ 5 - 4
package.json

@@ -33,8 +33,9 @@
     "@ant-design/pro-layout": "6.38.17",
     "@ant-design/pro-table": "2.76.3",
     "@icon-park/react": "^1.3.3",
-    "@umijs/max": "4.0.11",
-    "@umijs/plugins": "4.0.11",
+    "@umijs/max": "4.0.12",
+    "@umijs/plugins": "4.0.12",
+    "@umijs/route-utils": "^2.2.0",
     "ahooks": "^3.4.1",
     "antd": "4.21.0",
     "antd-img-crop": "^3.16.0",
@@ -60,7 +61,7 @@
     "@types/qs": "^6.5.3",
     "@types/react": "^18.0.0",
     "@types/react-dom": "^18.0.0",
-    "@unocss/cli": "^0.38.2",
+    "@unocss/cli": "^0.45.7",
     "babel-plugin-import": "^1.13.5",
     "compression-webpack-plugin": "^10.0.0",
     "cross-env": "^7.0.0",
@@ -70,7 +71,7 @@
     "prettier": "^2.6.1",
     "stylelint": "^14.9.0",
     "typescript": "^4.7.3",
-    "unocss": "^0.38.2"
+    "unocss": "^0.45.7"
   },
   "engines": {
     "node": ">=14.0.0"

+ 191 - 186
pnpm-lock.yaml

@@ -12,9 +12,10 @@ specifiers:
   '@types/qs': ^6.5.3
   '@types/react': ^18.0.0
   '@types/react-dom': ^18.0.0
-  '@umijs/max': 4.0.11
-  '@umijs/plugins': 4.0.11
-  '@unocss/cli': ^0.38.2
+  '@umijs/max': 4.0.12
+  '@umijs/plugins': 4.0.12
+  '@umijs/route-utils': ^2.2.0
+  '@unocss/cli': ^0.45.7
   ahooks: ^3.4.1
   antd: 4.21.0
   antd-img-crop: ^3.16.0
@@ -40,7 +41,7 @@ specifiers:
   react-markdown: ^7.1.0
   stylelint: ^14.9.0
   typescript: ^4.7.3
-  unocss: ^0.38.2
+  unocss: ^0.45.7
   vditor: 3.8.14
   virtuallist-antd: ^0.7.2
 
@@ -51,8 +52,9 @@ dependencies:
   '@ant-design/pro-layout': 6.38.17_ef5jwxihqo6n7gxfmzogljlgcm
   '@ant-design/pro-table': 2.76.3_xaribo4j3p4npckcloxr6jx4xe
   '@icon-park/react': 1.4.1_ef5jwxihqo6n7gxfmzogljlgcm
-  '@umijs/max': 4.0.11_zydoiptit3dcuzymmvs734hkw4
-  '@umijs/plugins': 4.0.11_xo7fjoqjibrnuea75o3qm7uusm
+  '@umijs/max': 4.0.12_zydoiptit3dcuzymmvs734hkw4
+  '@umijs/plugins': 4.0.12_xo7fjoqjibrnuea75o3qm7uusm
+  '@umijs/route-utils': 2.2.0
   ahooks: 3.5.0_react@18.1.0
   antd: 4.21.0_ef5jwxihqo6n7gxfmzogljlgcm
   antd-img-crop: 3.16.0_xaribo4j3p4npckcloxr6jx4xe
@@ -78,7 +80,7 @@ devDependencies:
   '@types/qs': 6.9.7
   '@types/react': 18.0.14
   '@types/react-dom': 18.0.5
-  '@unocss/cli': 0.38.2
+  '@unocss/cli': 0.45.7
   babel-plugin-import: 1.13.5
   compression-webpack-plugin: 10.0.0
   cross-env: 7.0.3
@@ -88,7 +90,7 @@ devDependencies:
   prettier: 2.7.1
   stylelint: 14.9.1
   typescript: 4.7.4
-  unocss: 0.38.2
+  unocss: 0.45.7
 
 packages:
 
@@ -112,7 +114,6 @@ packages:
     dependencies:
       '@jridgewell/gen-mapping': 0.1.1
       '@jridgewell/trace-mapping': 0.3.13
-    dev: false
 
   /@ant-design/charts/1.3.6_cdixizl2diivdwmv4tli4tk4ba:
     resolution: {integrity: sha512-4mKvm6C03JkQiUhxHE8XLSZ2oQeLQL8pL0B+e77DvFRZpDztAxm4I6AlDcCuSq45ZIsv7K+XQcozJGs6NV+g6g==}
@@ -354,7 +355,7 @@ packages:
       '@ant-design/pro-provider': 1.9.3_ef5jwxihqo6n7gxfmzogljlgcm
       '@ant-design/pro-utils': 1.43.2_ef5jwxihqo6n7gxfmzogljlgcm
       '@babel/runtime': 7.18.3
-      '@umijs/route-utils': 2.1.1
+      '@umijs/route-utils': 2.2.0
       '@umijs/ssr-darkreader': 4.9.45
       '@umijs/use-params': 1.0.9_react@18.1.0
       antd: 4.21.0_ef5jwxihqo6n7gxfmzogljlgcm
@@ -382,9 +383,9 @@ packages:
       '@ant-design/icons': 4.7.0_ef5jwxihqo6n7gxfmzogljlgcm
       '@ant-design/pro-provider': 1.9.3_ef5jwxihqo6n7gxfmzogljlgcm
       '@ant-design/pro-utils': 1.43.2_ef5jwxihqo6n7gxfmzogljlgcm
-      '@babel/runtime': 7.18.3
+      '@babel/runtime': 7.18.9
       '@emotion/css': 11.9.0
-      '@umijs/route-utils': 2.1.1
+      '@umijs/route-utils': 2.2.0
       '@umijs/ssr-darkreader': 4.9.45
       '@umijs/use-params': 1.0.9_react@18.1.0
       antd: 4.21.0_ef5jwxihqo6n7gxfmzogljlgcm
@@ -1742,7 +1743,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/helper-module-imports': 7.16.7
+      '@babel/helper-module-imports': 7.18.6
       '@babel/plugin-syntax-jsx': 7.17.12
       '@babel/runtime': 7.18.9
       '@emotion/hash': 0.8.0
@@ -1975,7 +1976,6 @@ packages:
     dependencies:
       '@jridgewell/set-array': 1.1.1
       '@jridgewell/sourcemap-codec': 1.4.13
-    dev: false
 
   /@jridgewell/gen-mapping/0.3.2:
     resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
@@ -1989,23 +1989,19 @@ packages:
   /@jridgewell/resolve-uri/3.0.7:
     resolution: {integrity: sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==}
     engines: {node: '>=6.0.0'}
-    dev: false
 
   /@jridgewell/set-array/1.1.1:
     resolution: {integrity: sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==}
     engines: {node: '>=6.0.0'}
-    dev: false
 
   /@jridgewell/sourcemap-codec/1.4.13:
     resolution: {integrity: sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==}
-    dev: false
 
   /@jridgewell/trace-mapping/0.3.13:
     resolution: {integrity: sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==}
     dependencies:
       '@jridgewell/resolve-uri': 3.0.7
       '@jridgewell/sourcemap-codec': 1.4.13
-    dev: false
 
   /@loadable/component/5.15.2_react@18.1.0:
     resolution: {integrity: sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw==}
@@ -2852,32 +2848,32 @@ packages:
       eslint-visitor-keys: 3.3.0
     dev: false
 
-  /@umijs/ast/4.0.11:
-    resolution: {integrity: sha512-bvx+pU+KS5gDmBrW3R10Yi9sH+XMUnWYKJGslmPpFTlTlWM4dwVOlVBJqK0I3h1ECrx9VIvSB31UNqGZBFcYxA==}
+  /@umijs/ast/4.0.12:
+    resolution: {integrity: sha512-MilZ8nOAe3FCpN4Ggx8aGbHvP3EZPWlyaqRKUzsCTDImSntK8tLVueG5oNrVDQ2HXDQ2Imu30aQAgyAClVL0sQ==}
     dependencies:
-      '@umijs/bundler-utils': 4.0.11
+      '@umijs/bundler-utils': 4.0.12
     transitivePeerDependencies:
       - supports-color
     dev: false
 
-  /@umijs/babel-preset-umi/4.0.11:
-    resolution: {integrity: sha512-6ii6VcOW0cDDHoKwVoD8viKBVBcGjdew/DbeSg0lm8UgLB28nWLUfV9swk4DkNmoeNsgzcQA3p0TEGKuJnGgwg==}
+  /@umijs/babel-preset-umi/4.0.12:
+    resolution: {integrity: sha512-pRc7byOydggr5LeMZ2O5FMEKoC6aas68rT+lEP9rxAKFmsjQYIkEV6iBtRNaHBkwaPG6AMsPIE8NWKmOIO8IVA==}
     dependencies:
       '@babel/runtime': 7.18.9
       '@bloomberg/record-tuple-polyfill': 0.0.4
-      '@umijs/bundler-utils': 4.0.11
-      '@umijs/utils': 4.0.11
+      '@umijs/bundler-utils': 4.0.12
+      '@umijs/utils': 4.0.12
       core-js: 3.22.4
     transitivePeerDependencies:
       - supports-color
     dev: false
 
-  /@umijs/bundler-esbuild/4.0.11:
-    resolution: {integrity: sha512-zVfsDoEUQqDQKysQZvLlDbTNyuF6p/Wii2pvyJ1MDKhsks0PJN5TpxE+bpepdOdhTJQfXE12jdmYMpcFYDAkVw==}
+  /@umijs/bundler-esbuild/4.0.12:
+    resolution: {integrity: sha512-Z6HfzvsLUyRxbiu2HPaltFtEIqsiqateAwGZ9695Ib6OyCZZN/1+jFi004ehabOA3roLtxt/E9MLTGF0Ksfxeg==}
     hasBin: true
     dependencies:
-      '@umijs/bundler-utils': 4.0.11
-      '@umijs/utils': 4.0.11
+      '@umijs/bundler-utils': 4.0.12
+      '@umijs/utils': 4.0.12
       enhanced-resolve: 5.9.3
       postcss: 8.4.14
       postcss-flexbugs-fixes: 5.0.2_postcss@8.4.14
@@ -2886,24 +2882,25 @@ packages:
       - supports-color
     dev: false
 
-  /@umijs/bundler-utils/4.0.11:
-    resolution: {integrity: sha512-CLLvm1IhQU/Otpk7TLEdTx2fKi8Ah1pcnTs9Ns9jh/nUnhriNh+vUqrnfmMGIfJHdNKxSYqgCGQfDUr7HQ08TQ==}
+  /@umijs/bundler-utils/4.0.12:
+    resolution: {integrity: sha512-2d7BfxRWFeHj9+fhxweeg3NTz/v6dWxXGfOMzIltGsRiiJpuM+Q8KWVDimbS/B6nsrSP+oxyVeMup2SZgCKpKg==}
     dependencies:
-      '@umijs/utils': 4.0.11
+      '@umijs/utils': 4.0.12
       esbuild: 0.14.49
+      regenerate: 1.4.2
       regenerate-unicode-properties: 10.0.1
       spdy: 4.0.2
     transitivePeerDependencies:
       - supports-color
     dev: false
 
-  /@umijs/bundler-vite/4.0.11:
-    resolution: {integrity: sha512-DXGd9tQdU6X1J9ZHN+lKF0NK/jUyviHaiNh6y9Lqn5t1gyfpXXBOpVizZcWF3LeS3Hxl2N+QBiND7F6TgNlP3Q==}
+  /@umijs/bundler-vite/4.0.12:
+    resolution: {integrity: sha512-m3KHOkUntkbK7PBPAXhv2ny/9RE5adgfxVgCLppuj8tajpZxaeu7P7X/MXGqDWenkzl9YRLr2uAMT35csXSTzg==}
     hasBin: true
     dependencies:
       '@svgr/core': 6.2.1
-      '@umijs/bundler-utils': 4.0.11
-      '@umijs/utils': 4.0.11
+      '@umijs/bundler-utils': 4.0.12
+      '@umijs/utils': 4.0.12
       '@vitejs/plugin-react': 1.2.0
       postcss-preset-env: 7.5.0
       rollup-plugin-visualizer: 5.6.0
@@ -2913,8 +2910,8 @@ packages:
       - supports-color
     dev: false
 
-  /@umijs/bundler-webpack/4.0.11_typescript@4.7.4:
-    resolution: {integrity: sha512-0Qpxajy90u9fAd6Tnk78pNLpuGPZBQ1vlvbPPGBGoatab9qMZfNM/eSn+5viU1omkYop5ObbKAbIrVJ31AmoJQ==}
+  /@umijs/bundler-webpack/4.0.12_typescript@4.7.4:
+    resolution: {integrity: sha512-3ym/G6BPiSK5U5+Hw6Gcv+v4wxK8bzzh3v5ryDlNZh6Y6YpQ1r4lSIHSvt3BW2pCjZ7BQfRZ90fU+cadn/yRcA==}
     hasBin: true
     dependencies:
       '@parcel/css': 1.9.0
@@ -2923,11 +2920,11 @@ packages:
       '@svgr/plugin-jsx': 6.2.1_@svgr+core@6.2.1
       '@svgr/plugin-svgo': 6.2.0_@svgr+core@6.2.1
       '@types/hapi__joi': 17.1.8
-      '@umijs/babel-preset-umi': 4.0.11
-      '@umijs/bundler-utils': 4.0.11
+      '@umijs/babel-preset-umi': 4.0.12
+      '@umijs/bundler-utils': 4.0.12
       '@umijs/case-sensitive-paths-webpack-plugin': 1.0.1
-      '@umijs/mfsu': 4.0.11
-      '@umijs/utils': 4.0.11
+      '@umijs/mfsu': 4.0.12
+      '@umijs/utils': 4.0.12
       cors: 2.8.5
       css-loader: 6.7.1
       es5-imcompatible-versions: 0.1.73
@@ -2955,24 +2952,24 @@ packages:
     resolution: {integrity: sha512-kDKJ8yTarxwxGJDInG33hOpaQRZ//XpNuuznQ/1Mscypw6kappzFmrBr2dOYave++K7JHouoANF354UpbEQw0Q==}
     dev: false
 
-  /@umijs/core/4.0.11:
-    resolution: {integrity: sha512-BTi/8XnLes/CzmCdI0RiJlNjFngoB/2RfrF++7oHf1TjybqzVHs0tBjQnX4qZR4atA+MSAkYEaSqlHF/oziyCA==}
+  /@umijs/core/4.0.12:
+    resolution: {integrity: sha512-ltnz/sKQrwlVNR3BwRee9keY11K6Jp8qeAuBX6zozKyTboEJy7idPz8b1AK6g9xgF6Prli81nDxnstIxvJDpng==}
     dependencies:
-      '@umijs/bundler-utils': 4.0.11
-      '@umijs/utils': 4.0.11
+      '@umijs/bundler-utils': 4.0.12
+      '@umijs/utils': 4.0.12
     transitivePeerDependencies:
       - supports-color
     dev: false
 
-  /@umijs/lint/4.0.11_nj2vya5w6hsvqod5673wtbqeku:
-    resolution: {integrity: sha512-pafXtyFlpGZeJkd0wDIOZpp16ro7zdppZYlaClAF7OtE0NTSUBYjN9mTL2CXaqQSZrH9GJW1pxFWliTuS/oZ7A==}
+  /@umijs/lint/4.0.12_nj2vya5w6hsvqod5673wtbqeku:
+    resolution: {integrity: sha512-Woxj5Y+ZKa4Yueupa/KMBvP9lmbD5K39OsIzZQPJTOmzIc/XyeO4s5usFR3Pse5dKYxgPld07IYZssfqWuIf+Q==}
     dependencies:
       '@babel/core': 7.18.9
       '@babel/eslint-parser': 7.18.9_bpusarfwcbgnjqmbezm4jkv5ie
       '@stylelint/postcss-css-in-js': 0.38.0_ryeeqdz73dmnun3unz5nxq65vi
       '@typescript-eslint/eslint-plugin': 5.27.1_76cletop5y37porjpw3ddlh5xi
       '@typescript-eslint/parser': 5.27.1_4hx5bygx4rxgd7xwyndf6ymwce
-      '@umijs/babel-preset-umi': 4.0.11
+      '@umijs/babel-preset-umi': 4.0.12
       eslint-plugin-jest: 26.1.5_foyhrlarnkq5u6r672vv7lci3e
       eslint-plugin-react: 7.29.4_eslint@8.15.0
       eslint-plugin-react-hooks: 4.5.0_eslint@8.15.0
@@ -2992,16 +2989,16 @@ packages:
       - typescript
     dev: false
 
-  /@umijs/max/4.0.11_zydoiptit3dcuzymmvs734hkw4:
-    resolution: {integrity: sha512-mLONxObkSWWPMy6E09WsbX6gf4JuFLBSWeHci+IJMUWqxgAaB4x97Zfyd/nNvWYF0mDWf9KTt7Qg/7MEokO08w==}
+  /@umijs/max/4.0.12_zydoiptit3dcuzymmvs734hkw4:
+    resolution: {integrity: sha512-QvYH4YPjzw9eNzHgmIWJpwjOYfYx8GJDlJ3YG5xKMkmXpV0DuEoV3j9N1J6KNJJsqMEIpEkETJ3oPBUD0yqg2A==}
     hasBin: true
     dependencies:
-      '@umijs/lint': 4.0.11_nj2vya5w6hsvqod5673wtbqeku
-      '@umijs/plugins': 4.0.11_xo7fjoqjibrnuea75o3qm7uusm
+      '@umijs/lint': 4.0.12_nj2vya5w6hsvqod5673wtbqeku
+      '@umijs/plugins': 4.0.12_xo7fjoqjibrnuea75o3qm7uusm
       antd: 4.21.0_ef5jwxihqo6n7gxfmzogljlgcm
       eslint: 8.15.0
       stylelint: 14.8.2
-      umi: 4.0.11_zpgjqj37zxn4pot5bjps6ibfya
+      umi: 4.0.12_zpgjqj37zxn4pot5bjps6ibfya
     transitivePeerDependencies:
       - '@babel/core'
       - '@types/react'
@@ -3033,25 +3030,25 @@ packages:
       - webpack-plugin-serve
     dev: false
 
-  /@umijs/mfsu/4.0.11:
-    resolution: {integrity: sha512-a8ImaSi8E/bVdV6mu3ck1f3pd6fwizTdhyoFlTmadwcKOqKzJ2xAH5TV/F2a1hbm1t2arbwofOs+TBCkf40evw==}
+  /@umijs/mfsu/4.0.12:
+    resolution: {integrity: sha512-k2A1psyc3E+miYu7Ehg8iR+IpLrkJweAT3IKY4JX14lDGU/a0W7mncqVPGlJJD49W1d1ppuj3Iom3YWWDkimWg==}
     dependencies:
-      '@umijs/bundler-esbuild': 4.0.11
-      '@umijs/bundler-utils': 4.0.11
-      '@umijs/utils': 4.0.11
+      '@umijs/bundler-esbuild': 4.0.12
+      '@umijs/bundler-utils': 4.0.12
+      '@umijs/utils': 4.0.12
       enhanced-resolve: 5.9.3
       is-equal: 1.6.4
     transitivePeerDependencies:
       - supports-color
     dev: false
 
-  /@umijs/plugins/4.0.11_xo7fjoqjibrnuea75o3qm7uusm:
-    resolution: {integrity: sha512-+Su1Yfh/grdnQJNQYjQvdNJiLcsh0e5XqhtKpFyg2jfdLjMTYR5Ve3DiCMnJQYBHWior+T5+3cQr5KXsXvmh/A==}
+  /@umijs/plugins/4.0.12_xo7fjoqjibrnuea75o3qm7uusm:
+    resolution: {integrity: sha512-Y2kpSsYOvM6xU420GCyexPPEU6GSS4PVAjT84HEK6zkbrAOJU0wE+2VdTHWdicByZ4nA+CQ9Rs1ouPdGPM3QZw==}
     dependencies:
       '@ahooksjs/use-request': 2.8.15_react@18.1.0
       '@ant-design/icons': 4.7.0_ef5jwxihqo6n7gxfmzogljlgcm
       '@ant-design/pro-layout': 7.0.1-beta.29_ef5jwxihqo6n7gxfmzogljlgcm
-      '@umijs/bundler-utils': 4.0.11
+      '@umijs/bundler-utils': 4.0.12
       antd-dayjs-webpack-plugin: 1.0.6_dayjs@1.11.2
       axios: 0.27.2
       babel-plugin-import: 1.13.5
@@ -3080,19 +3077,19 @@ packages:
       - supports-color
     dev: false
 
-  /@umijs/preset-umi/4.0.11_yqoujom3h6hjllkdlibpxicdqe:
-    resolution: {integrity: sha512-xGIU/z23MmweYVLTOxXXxjzAsbhCecinPICFlJAZKuJIOLodLffgempuji91kBPGqoGOlx4jMZvVbmuVnpHyTQ==}
+  /@umijs/preset-umi/4.0.12_yqoujom3h6hjllkdlibpxicdqe:
+    resolution: {integrity: sha512-UPbFc3qrz+aeEHu2HXJHBC+Rv024dVD0Xt8WXDGHnxoBVnZvd+tKtsjK8jkw2UyS1cwp2j+x4CmcCh8BbjUPnQ==}
     dependencies:
       '@types/multer': 1.4.7
-      '@umijs/ast': 4.0.11
-      '@umijs/babel-preset-umi': 4.0.11
-      '@umijs/bundler-utils': 4.0.11
-      '@umijs/bundler-vite': 4.0.11
-      '@umijs/bundler-webpack': 4.0.11_typescript@4.7.4
-      '@umijs/core': 4.0.11
-      '@umijs/renderer-react': 4.0.11_ef5jwxihqo6n7gxfmzogljlgcm
-      '@umijs/server': 4.0.11
-      '@umijs/utils': 4.0.11
+      '@umijs/ast': 4.0.12
+      '@umijs/babel-preset-umi': 4.0.12
+      '@umijs/bundler-utils': 4.0.12
+      '@umijs/bundler-vite': 4.0.12
+      '@umijs/bundler-webpack': 4.0.12_typescript@4.7.4
+      '@umijs/core': 4.0.12
+      '@umijs/renderer-react': 4.0.12_ef5jwxihqo6n7gxfmzogljlgcm
+      '@umijs/server': 4.0.12
+      '@umijs/utils': 4.0.12
       click-to-react-component: 1.0.8_iupzlfzo47c7rghj3avw7kmjhq
       core-js: 3.22.4
       current-script-polyfill: 1.0.0
@@ -3121,8 +3118,8 @@ packages:
       - webpack-plugin-serve
     dev: false
 
-  /@umijs/renderer-react/4.0.11_ef5jwxihqo6n7gxfmzogljlgcm:
-    resolution: {integrity: sha512-4PR0cPe0ZWaOIO0K78UIBYRgXrZn0sBfRYX88wTChVp1HQOPgmrbopLh5R6arWdZvGN7ON0JVLnUIUL9ai6YfA==}
+  /@umijs/renderer-react/4.0.12_ef5jwxihqo6n7gxfmzogljlgcm:
+    resolution: {integrity: sha512-g0yujzndtDK/WxnbexnY7U43y9C4A9kvpkvH4Pnvo/KKBMRhM0UmtfULqXzlNQLYVM4o+5cVkibpCSC0oM6b7w==}
     peerDependencies:
       react: '>=16.8'
       react-dom: '>=16.8'
@@ -3135,8 +3132,8 @@ packages:
       react-router-dom: 6.3.0_ef5jwxihqo6n7gxfmzogljlgcm
     dev: false
 
-  /@umijs/route-utils/2.1.1:
-    resolution: {integrity: sha512-N2ftgkqDEPBau1WyAxJfTQOs78OAVJY/Grl90fDo6ui75Eww563FhWcTrribS8sJS33mv9gtSlBLJ3F9WPLVog==}
+  /@umijs/route-utils/2.2.0:
+    resolution: {integrity: sha512-1t/A5+KuoK+AX0FcddNbUKMpMskuDsSSZRlQoTXDBBTDKUgWwG8KSX/NnfTCYJQrntL4A9WYymygop1jAw+Wdw==}
     dependencies:
       '@qixian.cs/path-to-regexp': 6.1.0
       fast-deep-equal: 3.1.3
@@ -3144,10 +3141,10 @@ packages:
       memoize-one: 5.2.1
     dev: false
 
-  /@umijs/server/4.0.11:
-    resolution: {integrity: sha512-RjLKgCpMFip0N7S1P86NzFbIK9dG+lwnR04RdJCCsJhqdw/vhxeOlu5QLkVolD/a692WjvA039GK7CgYJdZEeg==}
+  /@umijs/server/4.0.12:
+    resolution: {integrity: sha512-/uZ+SyviLvsZh6x4/k/e8Z1B4l5WZn4OXtClzCLVcPXysfGDTIWhc6emEeYcyH0xUCDm359kaUJIj6MDKe+qrw==}
     dependencies:
-      '@umijs/bundler-utils': 4.0.11
+      '@umijs/bundler-utils': 4.0.12
       history: 5.3.0
       react: 18.1.0
       react-dom: 18.1.0_react@18.1.0
@@ -3160,8 +3157,8 @@ packages:
     resolution: {integrity: sha512-XlcwzSYQ/SRZpHdwIyMDS4FOGX5kP4U/2g2mykyn/iPQTK4xTiQAyBu6UnnDnn7d5P8s7Atzh1C7H0ETNOypJg==}
     dev: false
 
-  /@umijs/test/4.0.11:
-    resolution: {integrity: sha512-PAn3CDNzbFEVlGr/sxn+ykcSLAVWT9cZxMymmRRbDgUywc2gotSwmt6CayYwZPKEKdfSv8oW9Ix0/+CEeLtDNQ==}
+  /@umijs/test/4.0.12:
+    resolution: {integrity: sha512-/xMtTM4quQONo0rZOY6RczG7/r4ckQdSeMRdNP/rRxGa5O3jxJfVDaqXanyBfMO+XDBkKhIW4SbgzK7pZ6yHEg==}
     dependencies:
       '@jest/types': 27.5.1
       esbuild: 0.14.51
@@ -3182,143 +3179,150 @@ packages:
       react: 18.1.0
     dev: false
 
-  /@umijs/utils/4.0.11:
-    resolution: {integrity: sha512-Rdqf3B9jR6BLDrbRw5qZcDknzRoHIP4lf1ih3x70Jniw521tp2ht1D3rE/334fZJ4DP5OKUVW+vCh/0vSPyjPQ==}
+  /@umijs/utils/4.0.12:
+    resolution: {integrity: sha512-mjVmpE/Jv3L7Q8EjTkz1tdauieS036vW+EXRMScH+s1eRvXNevxu+EDMycPTAfZujEVo5PT8JpnHDYYbUVcAqg==}
     dependencies:
       chokidar: 3.5.3
       pino: 7.11.0
     dev: false
 
-  /@unocss/cli/0.38.2:
-    resolution: {integrity: sha512-9piPujcrHZbd3CEEghdhnGKAMVRzk70op9VEB9s3sxEqEpgomwHvGkTnDlOey4z4bHqgKWnkAteaLvQbUP/L5w==}
+  /@unocss/cli/0.45.7:
+    resolution: {integrity: sha512-ublLKCQiwfWOLayBksnzPbgHFRlRKT9ni6zJhbU5utyQpou9VT8n9OqxLgOZU1+PbPgg+KquJ2sdhgU5LtknMQ==}
     engines: {node: '>=14'}
     hasBin: true
     dependencies:
-      '@unocss/config': 0.38.2
-      '@unocss/core': 0.38.2
-      '@unocss/preset-uno': 0.38.2
+      '@unocss/config': 0.45.7
+      '@unocss/core': 0.45.7
+      '@unocss/preset-uno': 0.45.7
       cac: 6.7.12
       chokidar: 3.5.3
       colorette: 2.0.19
       consola: 2.15.3
       fast-glob: 3.2.11
-      pathe: 0.3.0
+      pathe: 0.3.4
       perfect-debounce: 0.1.3
     dev: true
 
-  /@unocss/config/0.38.2:
-    resolution: {integrity: sha512-ttknaVVxKX7K9ais42iJO9sxpt6mVAnQuQHUokR134Q9GrPVDbN232K+jViqWY+TuVlaSgl6Fafx1DwiYsEAbQ==}
+  /@unocss/config/0.45.7:
+    resolution: {integrity: sha512-qrkLLpZwQ5LhDRzJo7c4qzBYAcRdvc+A+53CdEmeROhkLIm+LSr0BpWqRIVXg5iifWNtWEpYYCxegVAm2/ZTng==}
     engines: {node: '>=14'}
     dependencies:
-      '@unocss/core': 0.38.2
-      unconfig: 0.3.4
+      '@unocss/core': 0.45.7
+      unconfig: 0.3.5
     dev: true
 
-  /@unocss/core/0.38.2:
-    resolution: {integrity: sha512-GXJs1R0oRESgPv4UZKvNZCTnT5Iebn/E0bAHHaCugko2ccnqh6bHul7fcShXICwgT+hyQBPEF5SNS2BPcEjKpQ==}
+  /@unocss/core/0.45.7:
+    resolution: {integrity: sha512-eZVn+x/LM3rgMWeI95mGPzlIK1QDShuQMiycu2KJsMAdlVvzyZVPnpL+ATlNM1jeeL8G0iTNwPXMt8Lf8MxBDA==}
     dev: true
 
-  /@unocss/inspector/0.38.2:
-    resolution: {integrity: sha512-d1HojYl/ztE/+UXMcvOWw7gGewZ/GyhvaHVNsaENcH0ORPootSS1PvE2JhPYiIs43IYq6ZzRFCVH0MUqL8ARhQ==}
+  /@unocss/inspector/0.45.7:
+    resolution: {integrity: sha512-4dQBzg/k+Z+8p5qlM3NrOe1pgKZ3+zG6Ji8vbpPyYlfFQI1l2uqvCqGlry+AVUXfvmnWnILHIDDYYIM8bbSuRQ==}
     dependencies:
       gzip-size: 6.0.0
       sirv: 2.0.2
     dev: true
 
-  /@unocss/preset-attributify/0.38.2:
-    resolution: {integrity: sha512-ySW1kG9eyyUK33nHmOIxGw2oGJqmNv39KwMN5MQL3314WVXl3JsViD2TG4LGktVR6K64mrNAC9TUG/eEXaRLLQ==}
+  /@unocss/preset-attributify/0.45.7:
+    resolution: {integrity: sha512-hso4834ggDjjtDx+6GgaS8wPyBKwNZB1KFpPkl3XyGr7FTW6vCR8kvHSN43iOAga85fcwC+4kQSh/is18Gm/uw==}
     dependencies:
-      '@unocss/core': 0.38.2
+      '@unocss/core': 0.45.7
     dev: true
 
-  /@unocss/preset-icons/0.38.2:
-    resolution: {integrity: sha512-C4OB09aOW4SVTSRTLQ8gVLSnaFCEccRwDz9ZfJsjVs1pClBU0d5MvNGc3ORDW6u29rOyWaIgEMkFtDW6vDQyOw==}
+  /@unocss/preset-icons/0.45.7:
+    resolution: {integrity: sha512-7vP4ayXvdlAa2JflDKH6CvzCIR+pQoiHml+TYEW+FYPP0UNz7lSImLwA7DWPotNYNZ0tFyx8VbaQLlViIwzyVA==}
     dependencies:
       '@iconify/utils': 1.0.33
-      '@unocss/core': 0.38.2
+      '@unocss/core': 0.45.7
       ohmyfetch: 0.4.18
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@unocss/preset-mini/0.38.2:
-    resolution: {integrity: sha512-xrZHcgjLuOY12+UxnpA0zHtLFnxG1hYWS9CFa/odUM7jtjLq/u+E3LVv4/g/+mwcXyj6EIfe4ItE87s3R87zzg==}
+  /@unocss/preset-mini/0.45.7:
+    resolution: {integrity: sha512-7qLJgc/wjRvjWpYDJb803zTEMpokSt3nTuzAw/0iSRbqaRpf2cvVObQQ+Ub8QzQO0rJSr1uj/AsgFbfJCEMeCw==}
     dependencies:
-      '@unocss/core': 0.38.2
+      '@unocss/core': 0.45.7
     dev: true
 
-  /@unocss/preset-tagify/0.38.2:
-    resolution: {integrity: sha512-gLOuTQh5epGDMOeDA1KpAh2ygpIZgW9I03WttGaCrlavHBI1PPN2gt6wQe73htetfiwVn7QBPlq1/CKX8CVsvQ==}
+  /@unocss/preset-tagify/0.45.7:
+    resolution: {integrity: sha512-9c4x+hWTYmzXQHl7L05kVH7qEeE3CQJ6tdJNrudMHViuzUDVA6dN0QqQ5+0hO32Zg8r7wLAy71eam17rJKEWtg==}
     dependencies:
-      '@unocss/core': 0.38.2
+      '@unocss/core': 0.45.7
     dev: true
 
-  /@unocss/preset-typography/0.38.2:
-    resolution: {integrity: sha512-5MgQKEJmeKC0UehosPLm091Ly+sDRUHtoU71KHsB5llh4WARVy2etIerDxVza5JH7FEIseNUIT5lGZeo5S78Ng==}
+  /@unocss/preset-typography/0.45.7:
+    resolution: {integrity: sha512-3rAdNgMA6Dgdn4OQxBx7lstZ2dpQKBF+ETqMwmDtV0C/Q9QVqU4oP2xQOKKTLwUEzgfbhxaTKm7dZML8nSmcsQ==}
     dependencies:
-      '@unocss/core': 0.38.2
+      '@unocss/core': 0.45.7
     dev: true
 
-  /@unocss/preset-uno/0.38.2:
-    resolution: {integrity: sha512-BKDTa9FazpQFJhdDZWA6aOYq9tIBdm0XSTQC+Vk20h3yKVF3GlIBjuR5IMZ+ydEkLR/c6kjzdqqKbtHUqEyFXw==}
+  /@unocss/preset-uno/0.45.7:
+    resolution: {integrity: sha512-Oj9qB1btfXKH0WXCf978yqZvm4hgWfycSBrQ0djsgaYLPC9jKn3DfMUAIjjrtLLHPE+WCTfWsKUoFAk+mWgtLQ==}
     dependencies:
-      '@unocss/core': 0.38.2
-      '@unocss/preset-mini': 0.38.2
-      '@unocss/preset-wind': 0.38.2
+      '@unocss/core': 0.45.7
+      '@unocss/preset-mini': 0.45.7
+      '@unocss/preset-wind': 0.45.7
     dev: true
 
-  /@unocss/preset-web-fonts/0.38.2:
-    resolution: {integrity: sha512-Gjceka7dlhDC7HH/BRmExfnvPf+6SScfQnaaubsHsJY6aQ55lfZfhD82aNUXUk3p9wUr/M27VQGQ1wCV90G9cA==}
+  /@unocss/preset-web-fonts/0.45.7:
+    resolution: {integrity: sha512-4h0BaGm9BMT7RHqBvd30G7sh7Nu/J97DdihZYFofpzLAgwca/RheL0PZNHsVIDQ7uWkp4mFt+UfdfYTBLeynRw==}
     dependencies:
-      '@unocss/core': 0.38.2
+      '@unocss/core': 0.45.7
       ohmyfetch: 0.4.18
     dev: true
 
-  /@unocss/preset-wind/0.38.2:
-    resolution: {integrity: sha512-e6I07llFT73aMPR7KOk6ebWQUS3SNvu3c5DCriS+iqbplbdQtTP5Ox6Os33FjNIwzjxz8cSwUKUhRGODuFkFyg==}
+  /@unocss/preset-wind/0.45.7:
+    resolution: {integrity: sha512-E/uc2DqrgOqA7fs3qOiN3DmLeP7DTTAoPH9RGuTQPDT08jRaYd2k2vaoSbTv/PvZxAI2XvE9zWVqxtpFQheEdA==}
     dependencies:
-      '@unocss/core': 0.38.2
-      '@unocss/preset-mini': 0.38.2
+      '@unocss/core': 0.45.7
+      '@unocss/preset-mini': 0.45.7
     dev: true
 
-  /@unocss/reset/0.38.2:
-    resolution: {integrity: sha512-bK6khIAUQ2syp1eAq3hYK0ONqIBEZsBxMLZg8uFQOepXTJIHDH7fTm5gEXpCFcHJx91Onfcx9V9Twh4DjJv0wQ==}
+  /@unocss/reset/0.45.7:
+    resolution: {integrity: sha512-Gqx62iHO2hufpnS2vSm/NzCDG4UkF+XYwkKFarLzcj0UKCtOpQ9HCzSnZC422b3pM3lOvUIPpOOSncV6MUe5lg==}
     dev: true
 
-  /@unocss/scope/0.38.2:
-    resolution: {integrity: sha512-8tWsn1Ur8gQzSw8Z2tsoaUWEniOPIBBlH3cZlmkVgtOzndp3/JSFRu+lPcrbvEEN7IW2N1sPV5qQ2addHgmFmA==}
+  /@unocss/scope/0.45.7:
+    resolution: {integrity: sha512-ly7feqPGuugr2nWMNSK8RUmwERr8Zzj1gy2xfhiN9UyYUafSPacHeQ7s9sdK4QHZcbtEqchiJdi7mNBhKPlb7w==}
     dev: true
 
-  /@unocss/transformer-compile-class/0.38.2:
-    resolution: {integrity: sha512-Jq+eu3x9griX0m8jMCIZaQJKmFD6ZBGaD0qGQ5GoaPUllYdN1qAE3VdYDRobkMXOEsem8+72esOAExzZhr6oxg==}
+  /@unocss/transformer-attributify-jsx/0.45.7:
+    resolution: {integrity: sha512-FcRdJFmnR3o3RjnvYnwtbJ2sF85UvrvIpDa+HIgotZ4e9/9x8zCBIMgOxsgqWU5j+Zc9pvkD5dGEa7IQi+131w==}
     dependencies:
-      '@unocss/core': 0.38.2
+      '@unocss/core': 0.45.7
     dev: true
 
-  /@unocss/transformer-directives/0.38.2:
-    resolution: {integrity: sha512-x4WhCorfN2r3qgcG31RQhNeyypIYyrqvpt2J/X7s+8MBqcgMFTupQYgVsKw7mOWHlYtEiNA1K7Evr+yOHEMQaA==}
+  /@unocss/transformer-compile-class/0.45.7:
+    resolution: {integrity: sha512-yRCPPFrSfTG9+7e48KXP2P3DpJOGCLJX1N8nSg9HIPAwrKvIKldLqhGYojj0EBGbgPgwIgYrOlXBFDoAwH+bTA==}
     dependencies:
-      '@unocss/core': 0.38.2
+      '@unocss/core': 0.45.7
+    dev: true
+
+  /@unocss/transformer-directives/0.45.7:
+    resolution: {integrity: sha512-BwNoixTG5p2VwnUHg9dbCe++0u2i0DPQ+c5X8iJjDBBFcU9uKiBZpw2YZX/RxYWAWLvfiCzC6VGsIKbEAdFs5Q==}
+    dependencies:
+      '@unocss/core': 0.45.7
       css-tree: 2.1.0
     dev: true
 
-  /@unocss/transformer-variant-group/0.38.2:
-    resolution: {integrity: sha512-nk8gesr66V7dtcFtN3enzh+wzQN6DCLtX7+ASV5/mm58F83PdmGdfV0vFANjL4e/OngmO99cViYDLlN4DHn6Aw==}
+  /@unocss/transformer-variant-group/0.45.7:
+    resolution: {integrity: sha512-rxnu7YtjZXxghHTYCjgWIBerqp3u+FhionzAWQZ0Ull/i2rzMfDbQPOTpPvT+rYB6nJFNfOWYaJILmy/TKRejw==}
     dependencies:
-      '@unocss/core': 0.38.2
+      '@unocss/core': 0.45.7
     dev: true
 
-  /@unocss/vite/0.38.2:
-    resolution: {integrity: sha512-DuYhbH9L5tWa0bntJySIVWbGkJKH9MwxZ51QKrEHh76c+YzZZo+B8k485GJhCb9bfjT5BxpDhxxZQTaaeA3HbA==}
+  /@unocss/vite/0.45.7:
+    resolution: {integrity: sha512-nR4lUNGL6eV8YtrmgAA7IrccJaO9yT+5+W8KkSzIyWxZSITQL66OsOijv9ASdstyctqHjTHdJln6Xt850YWQ8w==}
     peerDependencies:
-      vite: ^2.9.0
+      vite: ^2.9.0 || ^3.0.0-0
     dependencies:
+      '@ampproject/remapping': 2.2.0
       '@rollup/pluginutils': 4.2.1
-      '@unocss/config': 0.38.2
-      '@unocss/core': 0.38.2
-      '@unocss/inspector': 0.38.2
-      '@unocss/scope': 0.38.2
-      '@unocss/transformer-directives': 0.38.2
+      '@unocss/config': 0.45.7
+      '@unocss/core': 0.45.7
+      '@unocss/inspector': 0.45.7
+      '@unocss/scope': 0.45.7
+      '@unocss/transformer-directives': 0.45.7
       magic-string: 0.26.2
     dev: true
 
@@ -4765,7 +4769,7 @@ packages:
     peerDependencies:
       redux: 4.x
     dependencies:
-      '@babel/runtime': 7.18.3
+      '@babel/runtime': 7.18.9
       flatten: 1.0.3
       global: 4.4.0
       invariant: 2.2.4
@@ -4780,7 +4784,7 @@ packages:
     peerDependencies:
       dva: ^2.5.0-0
     dependencies:
-      '@babel/runtime': 7.18.3
+      '@babel/runtime': 7.18.9
       immer: 8.0.4
     dev: false
 
@@ -4789,7 +4793,7 @@ packages:
     peerDependencies:
       dva-core: ^1.1.0 | ^1.5.0-0 | ^1.6.0-0
     dependencies:
-      '@babel/runtime': 7.18.3
+      '@babel/runtime': 7.18.9
       dva-core: 2.0.4_redux@4.2.0
     dev: false
 
@@ -6258,7 +6262,7 @@ packages:
   /import-html-entry/1.12.0:
     resolution: {integrity: sha512-wloMEMwupKJ8DWvKsEzJTXhHVieEH8ylu9ebeQg7T9JUsPTo0Zwa1EkuSKgKJvOiA2MxAFkeYYvd/E2pKiFtWQ==}
     dependencies:
-      '@babel/runtime': 7.18.3
+      '@babel/runtime': 7.18.9
     dev: false
 
   /import-lazy/4.0.0:
@@ -7822,8 +7826,8 @@ packages:
     resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
     engines: {node: '>=8'}
 
-  /pathe/0.3.0:
-    resolution: {integrity: sha512-3vUjp552BJzCw9vqKsO5sttHkbYqqsZtH0x1PNtItgqx8BXEXzoY1SYRKcL6BTyVh4lGJGLj0tM42elUDMvcYA==}
+  /pathe/0.3.4:
+    resolution: {integrity: sha512-YWgqEdxf36R6vcsyj0A+yT/rDRPe0wui4J9gRR7T4whjU5Lx/jZOr75ckEgTNaLVQABAwsrlzHRpIKcCdXAQ5A==}
     dev: true
 
   /pbf/3.2.1:
@@ -8725,7 +8729,7 @@ packages:
   /qiankun/2.7.3:
     resolution: {integrity: sha512-o0hEXgpMxkmlADiiEfQBMFo1cp84LfsEP6xhMT5R7QbGa3uGFR/T8EtyeOlvmhzjAaGExP6+r1bxiF8w4JV71A==}
     dependencies:
-      '@babel/runtime': 7.18.3
+      '@babel/runtime': 7.18.9
       import-html-entry: 1.12.0
       lodash: 4.17.21
       single-spa: 5.9.4
@@ -9506,7 +9510,7 @@ packages:
       redux:
         optional: true
     dependencies:
-      '@babel/runtime': 7.18.3
+      '@babel/runtime': 7.18.9
       '@types/hoist-non-react-statics': 3.3.1
       '@types/react': 18.0.14
       '@types/react-dom': 18.0.5
@@ -9695,7 +9699,7 @@ packages:
   /redux/4.2.0:
     resolution: {integrity: sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==}
     dependencies:
-      '@babel/runtime': 7.18.3
+      '@babel/runtime': 7.18.9
     dev: false
 
   /reflect-metadata/0.1.13:
@@ -10794,21 +10798,21 @@ packages:
     dev: false
     optional: true
 
-  /umi/4.0.11_zpgjqj37zxn4pot5bjps6ibfya:
-    resolution: {integrity: sha512-rmhT5t3cvCplBelcZX/ajwd9wXuPkTGksjYYeUxxesciykLkrtIkMfMTMcgo7DQV1iIdzxIynL17R8S7Vwntjw==}
+  /umi/4.0.12_zpgjqj37zxn4pot5bjps6ibfya:
+    resolution: {integrity: sha512-wp6jTZMl6jvxBm3Ub0zFmSxNk6fbVNrA6K21cdpAQF+3KrgItuJ2TAKN2kquvWvkZmaA1OhQ8mIv3bEd0+VaBQ==}
     engines: {node: '>=14'}
     hasBin: true
     dependencies:
       '@babel/runtime': 7.18.9
-      '@umijs/bundler-utils': 4.0.11
-      '@umijs/bundler-webpack': 4.0.11_typescript@4.7.4
-      '@umijs/core': 4.0.11
-      '@umijs/lint': 4.0.11_nj2vya5w6hsvqod5673wtbqeku
-      '@umijs/preset-umi': 4.0.11_yqoujom3h6hjllkdlibpxicdqe
-      '@umijs/renderer-react': 4.0.11_ef5jwxihqo6n7gxfmzogljlgcm
-      '@umijs/server': 4.0.11
-      '@umijs/test': 4.0.11
-      '@umijs/utils': 4.0.11
+      '@umijs/bundler-utils': 4.0.12
+      '@umijs/bundler-webpack': 4.0.12_typescript@4.7.4
+      '@umijs/core': 4.0.12
+      '@umijs/lint': 4.0.12_nj2vya5w6hsvqod5673wtbqeku
+      '@umijs/preset-umi': 4.0.12_yqoujom3h6hjllkdlibpxicdqe
+      '@umijs/renderer-react': 4.0.12_ef5jwxihqo6n7gxfmzogljlgcm
+      '@umijs/server': 4.0.12
+      '@umijs/test': 4.0.12
+      '@umijs/utils': 4.0.12
       prettier-plugin-organize-imports: 2.3.4_gd3y7r3s3evy6b2vthd7dmacga
       prettier-plugin-packagejson: 2.2.18_prettier@2.7.1
     transitivePeerDependencies:
@@ -10848,8 +10852,8 @@ packages:
       which-boxed-primitive: 1.0.2
     dev: false
 
-  /unconfig/0.3.4:
-    resolution: {integrity: sha512-cf39F1brwQuLSuMLTYXOdWJH0O1CJee6a4QW1nYtO7SoBUfVvQCvEel6ssTNXtPfi17kop1ADmVtmC49NlFkIQ==}
+  /unconfig/0.3.5:
+    resolution: {integrity: sha512-YMnPPUSfW0pT4Zzy4inM8tRHJZmhH+KcuFW/3qxkLKPhswEw18gQYe1jt57jY6ctFB0fnpiCpQ2Jtkbg4y/IPA==}
     dependencies:
       '@antfu/utils': 0.5.2
       defu: 6.0.0
@@ -10938,30 +10942,31 @@ packages:
     engines: {node: '>= 10.0.0'}
     dev: false
 
-  /unocss/0.38.2:
-    resolution: {integrity: sha512-YSADRlI55kt7tnpHWFDJGTdBfhQ5IshhXP6dJJd9f8ma/SIV/DW+gyYyL9VFDCqCDLuQBRmJTRX2NE4jGfZiug==}
+  /unocss/0.45.7:
+    resolution: {integrity: sha512-W0TpEKDXYS5pS8wwXpp4uavMVfqhzpcLB1zOlWTXQVnbo+zeAXsj9zNwiHjLyWNLVRYeoA9tjRLsVhAho+MLKg==}
     engines: {node: '>=14'}
     peerDependencies:
-      '@unocss/webpack': 0.38.2
+      '@unocss/webpack': 0.45.7
     peerDependenciesMeta:
       '@unocss/webpack':
         optional: true
     dependencies:
-      '@unocss/cli': 0.38.2
-      '@unocss/core': 0.38.2
-      '@unocss/preset-attributify': 0.38.2
-      '@unocss/preset-icons': 0.38.2
-      '@unocss/preset-mini': 0.38.2
-      '@unocss/preset-tagify': 0.38.2
-      '@unocss/preset-typography': 0.38.2
-      '@unocss/preset-uno': 0.38.2
-      '@unocss/preset-web-fonts': 0.38.2
-      '@unocss/preset-wind': 0.38.2
-      '@unocss/reset': 0.38.2
-      '@unocss/transformer-compile-class': 0.38.2
-      '@unocss/transformer-directives': 0.38.2
-      '@unocss/transformer-variant-group': 0.38.2
-      '@unocss/vite': 0.38.2
+      '@unocss/cli': 0.45.7
+      '@unocss/core': 0.45.7
+      '@unocss/preset-attributify': 0.45.7
+      '@unocss/preset-icons': 0.45.7
+      '@unocss/preset-mini': 0.45.7
+      '@unocss/preset-tagify': 0.45.7
+      '@unocss/preset-typography': 0.45.7
+      '@unocss/preset-uno': 0.45.7
+      '@unocss/preset-web-fonts': 0.45.7
+      '@unocss/preset-wind': 0.45.7
+      '@unocss/reset': 0.45.7
+      '@unocss/transformer-attributify-jsx': 0.45.7
+      '@unocss/transformer-compile-class': 0.45.7
+      '@unocss/transformer-directives': 0.45.7
+      '@unocss/transformer-variant-group': 0.45.7
+      '@unocss/vite': 0.45.7
     transitivePeerDependencies:
       - supports-color
       - vite

+ 114 - 0
src/components/TimeLineList/ServiceLogItem.tsx

@@ -0,0 +1,114 @@
+import consts from '@/consts'
+import { servicelogEnum, ServiceLogType } from '@/pages/Customer/Client/components/ClientDetail/LowerList'
+import {
+  delClientService,
+  delCustomerService,
+  updateClientService,
+  updateCustomerService
+} from '@/services/customer'
+import { isDevMode } from '@/utils/env'
+import { dayjsFormat } from '@/utils/utils'
+import { useDispatch, useRequest } from '@umijs/max'
+import { Button, Popconfirm } from 'antd'
+import classNames from 'classnames'
+import { useModal } from '../ModalStore'
+
+type ServiceLogItemProps = {
+  item: API.ServiceLogItem
+  /** @warning 空值不渲染操作栏 */
+  logType?: ServiceLogType
+  updatePayload: { main: string; target: string }
+}
+const ServiceLogItem: React.FC<ServiceLogItemProps> = ({ item, logType, updatePayload }) => {
+  const dispatchModal = useModal()
+  const dispatch = useDispatch()
+  const { run: tryUpdate } = useRequest(
+    logType === ServiceLogType.COMPANY ? updateCustomerService : updateClientService,
+    {
+      manual: true,
+      onSuccess: () => {
+        dispatch({
+          type: 'refresh/commitAction',
+          payload: updatePayload
+        })
+      }
+    }
+  )
+  const { run: tryDel } = useRequest(
+    logType === ServiceLogType.COMPANY ? delCustomerService : delClientService,
+    {
+      manual: true,
+      onSuccess: () => {
+        dispatch({
+          type: 'refresh/commitAction',
+          payload: updatePayload
+        })
+      }
+    }
+  )
+
+  const handleOnEdit = async (defaultValues: API.ServiceLogItem) => {
+    dispatchModal('M_RECORD_ADD', { defaultValues, onConfirm: tryUpdate })
+  }
+  return (
+    <div
+      className={classNames(
+        'w-full rounded border-l-2px bg-opacity-6',
+        servicelogEnum[item.status]?.bg,
+        servicelogEnum[item.status]?.border
+      )}>
+      <div className="p-3 flex flex-col">
+        <div className="flex justify-between">
+          <div className="flex">
+            <div
+              className="rounded-1/2 w-8 h-8"
+              style={{
+                backgroundImage: `url(${
+                  (isDevMode() ? 'http://cld2qa.com' : window.location.origin) +
+                  (item.avatar ?? consts.DEFAULT_AVATAR)
+                })`,
+                backgroundSize: 'cover'
+              }}
+            />
+            <div className="flex flex-col items-center ml-2">
+              <div className="text-sm font-medium text-opacity-80 text-black">{item.staffName}</div>
+              <div className="text-xs text-opacity-40 text-black h-4">
+                {dayjsFormat(item.createTime, 'HH:mm:ss')}
+              </div>
+            </div>
+          </div>
+          <div className="flex flex-nowrap">
+            <div className={classNames(servicelogEnum[item.status]?.text, 'font-medium text-sm')}>
+              {servicelogEnum[item.status]?.title}
+            </div>
+            <div
+              className={classNames(
+                'ml-1 text-xs bg-opacity-16 rounded-sm h-5 leading-5 px-1',
+                servicelogEnum[item.status]?.text,
+                servicelogEnum[item.status]?.bg
+              )}>
+              {dayjsFormat(item.date, 'YYYY-MM-DD')}
+            </div>
+          </div>
+        </div>
+        <div className="bg-white bg-opacity-80 rounded-sm text-black text-opacity-60 text-sm mt-3 p-2 whitespace-pre-line">
+          {item.mark}
+        </div>
+        {logType && item.isOperation ? (
+          <div className="mt-2">
+            <Button size="small" onClick={() => handleOnEdit(item)}>
+              编辑
+            </Button>
+            <Popconfirm title="确认删除该服务记录吗?" onConfirm={() => tryDel({ id: item.id })}>
+              <Button size="small" danger className="ml-1">
+                删除
+              </Button>
+            </Popconfirm>
+          </div>
+        ) : null}
+      </div>
+    </div>
+  )
+}
+
+export default ServiceLogItem

+ 20 - 0
src/components/TimeLineList/share.ts

@@ -0,0 +1,20 @@
+type iData = {
+  list: API.ServiceLogItem[]
+  total?: number
+}
+
+/** ahooks-useInfiniteScroll 滚动加载逻辑
+ * 适用:客户、单位、云版、大司空2.0
+ */
+export async function getLoadMoreList(
+  d: iData = { list: [], total: 0 },
+  params: { [key: string]: string },
+  requestFn: (params: { [key: string]: string }) => Promise<any>
+) {
+  // 第一页的数据来源于detail
+  if (params?.current === 1) {
+    return { list: d.list, total: d.total }
+  }
+  const result = await requestFn?.(params)
+  return result.data
+}

+ 5 - 0
src/global.less

@@ -191,6 +191,11 @@ input:-webkit-autofill:active {
         }
       }
     }
+    .sheet-panel-record {
+      & > div:not(:last-child) {
+        margin-bottom: 12px;
+      }
+    }
   }
 }
 

+ 35 - 116
src/pages/Customer/Client/components/ClientDetail/LowerList.tsx

@@ -1,20 +1,13 @@
-import { Button, Popconfirm, Tabs } from 'antd'
-import React, { useMemo } from 'react'
-import { dayjsFormat } from '@/utils/utils'
-import classNames from 'classnames'
-import { isDevMode } from '@/utils/env'
+import { Tabs } from 'antd'
+import React, { useMemo, useRef } from 'react'
 import { VList } from 'virtuallist-antd'
-import consts from '@/consts'
-import type { ProColumns } from '@ant-design/pro-table'
 import ProTable from '@ant-design/pro-table'
-import {
-  updateCustomerService,
-  delCustomerService,
-  updateClientService,
-  delClientService
-} from '@/services/customer'
-import { useModal } from '@/components/ModalStore'
-import { useDispatch, useRequest } from '@umijs/max'
+import { useInfiniteScroll } from 'ahooks'
+import type { ProColumns } from '@ant-design/pro-table'
+import ServiceLogItem from '@/components/TimeLineList/ServiceLogItem'
+import { queryClientService } from '@/services/customer'
+import { getLoadMoreList } from '@/components/TimeLineList/share'
+
 const { TabPane } = Tabs
 
 export enum Servicelog {
@@ -61,115 +54,39 @@ export const servicelogEnum = {
 }
 
 type ClientLowerListProps = {
+  clientId: string
   logList: {
     log: any[]
   }
-  serviceList: API.ServiceLogItem[]
-  updatePayload: { main: string; target: string }
-}
-
-type ServiceLogItemProps = {
-  item: API.ServiceLogItem
-  logType: ServiceLogType
+  serviceList: {
+    list: API.ServiceLogItem[]
+    total: number
+  }
   updatePayload: { main: string; target: string }
 }
-export const ServiceLogItem: React.FC<ServiceLogItemProps> = ({ item, logType, updatePayload }) => {
-  const dispatchModal = useModal()
-  const dispatch = useDispatch()
-  const { run: tryUpdate } = useRequest(
-    logType === ServiceLogType.COMPANY ? updateCustomerService : updateClientService,
-    {
-      manual: true,
-      onSuccess: () => {
-        dispatch({
-          type: 'refresh/commitAction',
-          payload: updatePayload
-        })
-      }
-    }
-  )
-  const { run: tryDel } = useRequest(
-    logType === ServiceLogType.COMPANY ? delCustomerService : delClientService,
-    {
-      manual: true,
-      onSuccess: () => {
-        dispatch({
-          type: 'refresh/commitAction',
-          payload: updatePayload
-        })
-      }
-    }
-  )
 
-  const handleOnEdit = async (defaultValues: API.ServiceLogItem) => {
-    dispatchModal('M_RECORD_ADD', { defaultValues, onConfirm: tryUpdate })
-  }
-  return (
-    <div
-      className={classNames(
-        'w-full rounded border-l-2px bg-opacity-6',
-        servicelogEnum[item.status]?.bg,
-        servicelogEnum[item.status]?.border
-      )}>
-      <div className="p-3 flex flex-col">
-        <div className="flex justify-between">
-          <div className="flex">
-            <div
-              className="rounded-1/2 w-8 h-8"
-              style={{
-                backgroundImage: `url(${
-                  (isDevMode() ? 'http://cld2qa.com' : window.location.origin) +
-                  (item.avatar ?? consts.DEFAULT_AVATAR)
-                })`,
-                backgroundSize: 'cover'
-              }}
-            />
-            <div className="flex flex-col items-center ml-2">
-              <div className="text-sm font-medium text-opacity-80 text-black">{item.staffName}</div>
-              <div className="text-xs text-opacity-40 text-black h-4">
-                {dayjsFormat(item.createTime, 'HH:mm:ss')}
-              </div>
-            </div>
-          </div>
-          <div className="flex flex-nowrap">
-            <div className={classNames(servicelogEnum[item.status]?.text, 'font-medium text-sm')}>
-              {servicelogEnum[item.status]?.title}
-            </div>
-            <div
-              className={classNames(
-                'ml-1 text-xs bg-opacity-16 rounded-sm h-5 leading-5 px-1',
-                servicelogEnum[item.status]?.text,
-                servicelogEnum[item.status]?.bg
-              )}>
-              {dayjsFormat(item.date, 'YYYY-MM-DD')}
-            </div>
-          </div>
-        </div>
-        <div className="bg-white bg-opacity-80 rounded-sm text-black text-opacity-60 text-sm mt-3 p-2 whitespace-pre-line">
-          {item.mark}
-        </div>
-        {item.isOperation ? (
-          <div className="mt-2">
-            <Button size="small" onClick={() => handleOnEdit(item)}>
-              编辑
-            </Button>
-            <Popconfirm title="确认删除该服务记录吗?" onConfirm={() => tryDel({ id: item.id })}>
-              <Button size="small" danger className="ml-1">
-                删除
-              </Button>
-            </Popconfirm>
-          </div>
-        ) : null}
-      </div>
-    </div>
-  )
-}
+const PAGE_SIZE = 20
 
 const ClientLowerList: React.FC<ClientLowerListProps> = ({
+  clientId,
   logList: { log: logs = [] },
-  serviceList,
+  serviceList: { list: services = [], total: servicesTotal = 0 },
   updatePayload
 }) => {
+  const ref = useRef<HTMLDivElement>(null)
+  const { data, loadingMore, noMore } = useInfiniteScroll(
+    async d => {
+      const current = d ? Math.ceil(d.list.length / PAGE_SIZE) + 1 : 1
+      const data = current === 1 ? { list: services, total: servicesTotal } : d
+      return await getLoadMoreList(data, { clientId, current, pageSize: PAGE_SIZE }, queryClientService)
+    },
+    {
+      reloadDeps: [services],
+      target: ref,
+      isNoMore: d => d?.list.length === d?.total
+    }
+  )
+
   const tableHeight = (document.body.clientHeight - 124 - 78) / 2
   const columns: ProColumns<API.LogItem>[] = [
     {
@@ -212,12 +129,14 @@ const ClientLowerList: React.FC<ClientLowerListProps> = ({
       <div className="pl-4">
         <Tabs>
           <TabPane tab="客户服务记录" key="客户服务记录">
-            <div className="sheet-panel-record">
-              {serviceList.map(item => (
-                <div className="mb-3" key={item.id}>
+            <div className="sheet-panel-record" ref={ref}>
+              {data?.list.map(item => (
+                <div key={item.id}>
                   <ServiceLogItem item={item} logType={ServiceLogType.CLIENT} updatePayload={updatePayload} />
                 </div>
               ))}
+              {loadingMore ? <div className="text-center my-2">正在加载.....</div> : null}
+              {noMore ? <div className="text-gray text-center my-2">暂无更多数据</div> : null}
             </div>
           </TabPane>
           <TabPane tab="日志" key="日志">

+ 8 - 5
src/pages/Customer/Client/components/ClientDetail/index.tsx

@@ -116,11 +116,14 @@ const ClientDetail = props => {
                   software={state.software}
                   updatePayload={{ main: updateKey, target: dataId }}
                 />
-                <ClientLowerList
-                  logList={state.log}
-                  serviceList={state.serviceLog}
-                  updatePayload={{ main: updateKey, target: dataId }}
-                />
+                {state.client.id && (
+                  <ClientLowerList
+                    clientId={state.client.id}
+                    logList={state.log}
+                    serviceList={state.serviceLog}
+                    updatePayload={{ main: updateKey, target: dataId }}
+                  />
+                )}
               </Col>
             </Row>
           </div>

+ 34 - 7
src/pages/Customer/Company/components/CompanyDetail/LowerList.tsx

@@ -1,23 +1,48 @@
 import { Tabs } from 'antd'
-import { ServiceLogItem, ServiceLogType } from '@/pages/Customer/Client/components/ClientDetail/LowerList'
-import { useMemo } from 'react'
+import { useMemo, useRef } from 'react'
 import { VList } from 'virtuallist-antd'
 import type { ProColumns } from '@ant-design/pro-table'
 import ProTable from '@ant-design/pro-table'
+import ServiceLogItem from '@/components/TimeLineList/ServiceLogItem'
+import { ServiceLogType } from '@/pages/Customer/Client/components/ClientDetail/LowerList'
+import { useInfiniteScroll } from 'ahooks'
+import { getLoadMoreList } from '@/components/TimeLineList/share'
+import { queryCustomerService } from '@/services/customer'
+
 const { TabPane } = Tabs
+
 type CompanyLowerListProps = {
+  customerId: string
   logList: {
     log: any[]
   }
-  serviceList: API.ServiceLogItem[]
+  serviceList: {
+    list: API.ServiceLogItem[]
+    total: number
+  }
   updatePayload?: { main: string; target: string }
 }
 
+const PAGE_SIZE = 20
 const CompanyLowerList: React.FC<CompanyLowerListProps> = ({
+  customerId,
   logList: { log: logs = [] },
-  serviceList,
+  serviceList: { list: services = [], total: servicesTotal = 0 },
   updatePayload
 }) => {
+  const ref = useRef<HTMLDivElement>(null)
+  const { data, loadingMore, noMore } = useInfiniteScroll(
+    d => {
+      const current = d ? Math.ceil(d.list.length / PAGE_SIZE) + 1 : 1
+      const data = current === 1 ? { list: services, total: servicesTotal } : d
+      return getLoadMoreList(data, { customerId, current, pageSize: PAGE_SIZE }, queryCustomerService)
+    },
+    {
+      reloadDeps: [services],
+      target: ref,
+      isNoMore: d => d?.list.length === d?.total
+    }
+  )
   const tableHeight = (document.body.clientHeight - 124 - 78) / 2
   const columns: ProColumns<API.LogItem>[] = [
     {
@@ -58,9 +83,9 @@ const CompanyLowerList: React.FC<CompanyLowerListProps> = ({
       <div className="pl-4">
         <Tabs>
           <TabPane tab="单位服务记录" key="服务记录">
-            <div className="sheet-panel-record">
-              {serviceList.map(item => (
-                <div className="mb-2" key={item.id}>
+            <div className="sheet-panel-record" ref={ref}>
+              {data?.list.map(item => (
+                <div key={item.id}>
                   <ServiceLogItem
                     item={item}
                     logType={ServiceLogType.COMPANY}
@@ -68,6 +93,8 @@ const CompanyLowerList: React.FC<CompanyLowerListProps> = ({
                   />
                 </div>
               ))}
+              {loadingMore ? <div className="text-center my-2">正在加载.....</div> : null}
+              {noMore ? <div className="text-gray text-center my-2">暂无更多数据</div> : null}
             </div>
           </TabPane>
           <TabPane tab="日志" key="日志">

+ 8 - 5
src/pages/Customer/Company/components/CompanyDetail/index.tsx

@@ -128,11 +128,14 @@ const CompanyDetail = props => {
                   customer={state.customer}
                   business={state.business}
                 />
-                <CompanyLowerList
-                  logList={state.log}
-                  serviceList={state.serviceLog}
-                  updatePayload={{ main: updateKey, target: dataId }}
-                />
+                {state.customer.id && (
+                  <CompanyLowerList
+                    logList={state.log}
+                    customerId={state.customer.id}
+                    serviceList={state.serviceLog}
+                    updatePayload={{ main: updateKey, target: dataId }}
+                  />
+                )}
               </Col>
             </Row>
           </div>

+ 26 - 19
src/pages/Product/Cloud/components/Detail/LowerList.tsx

@@ -1,6 +1,7 @@
 import React from 'react'
 import { Tabs, Table } from 'antd'
-import { ServiceLogItem, ServiceLogType } from '@/pages/Customer/Client/components/ClientDetail/LowerList'
+import ServiceLogItem from '@/components/TimeLineList/ServiceLogItem'
+import { ServiceLogType } from '@/pages/Customer/Client/components/ClientDetail/LowerList'
 const { TabPane } = Tabs
 
 type RoadpricingLowerPorps = {
@@ -11,7 +12,6 @@ type RoadpricingLowerPorps = {
   updatePayload: { main: string; target: string }
 }
 
-
 const RoadpricingLowerList: React.FC<RoadpricingLowerPorps> = ({
   logList: { log: logs = [] },
   serviceList,
@@ -47,24 +47,31 @@ const RoadpricingLowerList: React.FC<RoadpricingLowerPorps> = ({
     }
   ]
   return (
-      <div className="pl-4">
-        <Tabs>
-          <TabPane tab="服务记录" key="服务记录">
-            <div className="sheet-panel-record">
+    <div className="pl-4">
+      <Tabs>
+        <TabPane tab="服务记录" key="服务记录">
+          <div className="sheet-panel-record">
             {serviceList.map(item => (
-                <div className="mb-3" key={item.id}>
-                  <ServiceLogItem item={item} logType={ServiceLogType.CLIENT} updatePayload={updatePayload} />
-                </div>
-              ))}
-            </div>
-          </TabPane>
-          <TabPane tab="日志" key="日志">
-            <div className="sheet-panel-record">
-              <Table rowKey="id" columns={columns} dataSource={logs} pagination={false} size="small" scroll={{ y: tableHeight }}/>
-            </div>
-          </TabPane>
-        </Tabs>
-      </div>
+              <div className="mb-3" key={item.id}>
+                <ServiceLogItem item={item} logType={ServiceLogType.CLIENT} updatePayload={updatePayload} />
+              </div>
+            ))}
+          </div>
+        </TabPane>
+        <TabPane tab="日志" key="日志">
+          <div className="sheet-panel-record">
+            <Table
+              rowKey="id"
+              columns={columns}
+              dataSource={logs}
+              pagination={false}
+              size="small"
+              scroll={{ y: tableHeight }}
+            />
+          </div>
+        </TabPane>
+      </Tabs>
+    </div>
   )
 }
 

+ 14 - 0
src/services/customer.ts

@@ -310,3 +310,17 @@ export async function delCustomerService(params: { id: string }) {
     data: params
   })
 }
+
+/** 单位服务日志列表 */
+export async function queryCustomerService(params: { page: number; pageSize: number }) {
+  return request('/customer/service', {
+    params
+  })
+}
+
+/** 客户服务日志列表 */
+export async function queryClientService(params: { clientId: string; page: number; pageSize: number }) {
+  return request('/client/serviceLog', {
+    params
+  })
+}

+ 0 - 0
src/utils/http/index.ts