From 907dd030238621d3e0feded706b5d12b2ef73d73 Mon Sep 17 00:00:00 2001 From: linxd <544554903@qq.com> Date: Thu, 17 Jul 2025 13:21:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E7=99=BB=E5=BD=95=E5=92=8C?= =?UTF-8?q?=E9=80=80=E5=87=BA=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- pnpm-lock.yaml | 490 +++++++++++++++++++++----------------- src/hooks/useUser.ts | 39 ++- src/layouts/User.tsx | 69 +++++- src/models/index.ts | 2 + src/models/user.ts | 90 +++++++ src/pages/login/login.tsx | 163 +++++++------ src/servers/api/login.ts | 34 ++- src/utils/request.ts | 53 ++--- src/wrappers/auth.tsx | 19 +- 10 files changed, 604 insertions(+), 357 deletions(-) create mode 100644 src/models/user.ts diff --git a/package.json b/package.json index fce5752..09e7ccf 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@umijs/route-utils": "1.0.37", "@wangeditor/editor": "^5.1.23", "@wangeditor/editor-for-react": "^1.0.6", - "antd": "4.15.1", + "antd": "latest-4", "array-move": "3.0.1", "axios": "0.21.1", "classnames": "2.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 14521a6..026993d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,19 +10,19 @@ dependencies: version: 4.6.2(react-dom@16.14.0)(react@16.14.0) '@ant-design/pro-card': specifier: 1.11.8 - version: 1.11.8(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) + version: 1.11.8(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) '@ant-design/pro-descriptions': specifier: 1.7.0 - version: 1.7.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) + version: 1.7.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) '@ant-design/pro-layout': specifier: 6.16.2 - version: 6.16.2(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) + version: 6.16.2(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) '@ant-design/pro-list': specifier: 1.6.0 - version: 1.6.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) + version: 1.6.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) '@ant-design/pro-table': specifier: 2.34.0 - version: 2.34.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) + version: 2.34.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) '@material-ui/core': specifier: 4.11.3 version: 4.11.3(@types/react@16.14.65)(react-dom@16.14.0)(react@16.14.0) @@ -39,8 +39,8 @@ dependencies: specifier: ^1.0.6 version: 1.0.6(@wangeditor/core@1.1.19)(@wangeditor/editor@5.1.23)(react-dom@16.14.0)(react@16.14.0) antd: - specifier: 4.15.1 - version: 4.15.1(react-dom@16.14.0)(react@16.14.0) + specifier: latest-4 + version: 4.24.16(react-dom@16.14.0)(react@16.14.0) array-move: specifier: 3.0.1 version: 3.0.1 @@ -276,15 +276,31 @@ packages: transitivePeerDependencies: - react-dom - /@ant-design/pro-card@1.11.8(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0): + /@ant-design/icons@4.8.3(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-HGlIQZzrEbAhpJR6+IGdzfbPym94Owr6JZkJ2QCCnOkPVIWMO2xgIVcOKnl8YcpijIo39V7l2qQL5fmtw56cMw==} + engines: {node: '>=8'} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + dependencies: + '@ant-design/colors': 6.0.0 + '@ant-design/icons-svg': 4.4.2 + '@babel/runtime': 7.27.6 + classnames: 2.3.1 + lodash: 4.17.21 + rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + /@ant-design/pro-card@1.11.8(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0): resolution: {integrity: sha512-aU1/5gWYdpbyrJcLX2n7v8hWrwK5KsuxTgaLbnIIOKw/SuSU5gbNt/U+1rC1bpLccYAXeGDKx9dPJoJEajZVWA==} peerDependencies: antd: 4.x react: ^16.x dependencies: '@ant-design/icons': 4.6.2(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-utils': 1.16.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - antd: 4.15.1(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-utils': 1.16.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + antd: 4.24.16(react-dom@16.14.0)(react@16.14.0) classnames: 2.3.1 omit.js: 2.0.2 react: 16.14.0 @@ -333,16 +349,16 @@ packages: - utf-8-validate dev: true - /@ant-design/pro-descriptions@1.7.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0): + /@ant-design/pro-descriptions@1.7.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0): resolution: {integrity: sha512-XXTnq0EU9ASwB2v9eeQ4DajXHzzYOwCxTf6hbRJQR8URujAJ7zyFMYhEbHQyENYX8GWqTsGIP5/hNTTtOFr/PA==} peerDependencies: antd: 4.x dependencies: - '@ant-design/pro-field': 1.15.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-form': 1.21.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-skeleton': 1.0.0-beta.13(antd@4.15.1)(react@16.14.0) - '@ant-design/pro-utils': 1.16.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - antd: 4.15.1(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-field': 1.15.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-form': 1.21.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-skeleton': 1.0.0-beta.13(antd@4.24.16)(react@16.14.0) + '@ant-design/pro-utils': 1.16.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + antd: 4.24.16(react-dom@16.14.0)(react@16.14.0) rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) use-json-comparison: 1.0.6(react@16.14.0) transitivePeerDependencies: @@ -350,16 +366,16 @@ packages: - react-dom dev: false - /@ant-design/pro-field@1.15.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0): + /@ant-design/pro-field@1.15.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0): resolution: {integrity: sha512-/MJ94u4YUHJnAXOxTT3OTD077lJ6jsg3dZTjvgFz34YVzuA1Tdy89yC3sQNScovIDKtXwaNojnbNmwbkkFavAw==} peerDependencies: antd: 4.x react: ^16.x dependencies: '@ant-design/icons': 4.6.2(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-provider': 1.4.10(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-utils': 1.16.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - antd: 4.15.1(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-provider': 1.4.10(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-utils': 1.16.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + antd: 4.24.16(react-dom@16.14.0)(react@16.14.0) classnames: 2.3.1 lodash.tonumber: 4.0.3 moment: 2.30.1 @@ -372,18 +388,18 @@ packages: - react-dom dev: false - /@ant-design/pro-form@1.21.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0): + /@ant-design/pro-form@1.21.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0): resolution: {integrity: sha512-5573AagriwubOmIeAtkJ7YVUsKUc4ddsGayXXx8+2T/JJyP8pPV04/1waonzSygnUo5VRQaqngaOaQWf9H/ufw==} peerDependencies: antd: 4.x react: ^16.x dependencies: '@ant-design/icons': 4.6.2(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-field': 1.15.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-provider': 1.4.10(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-utils': 1.16.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-field': 1.15.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-provider': 1.4.10(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-utils': 1.16.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) '@umijs/use-params': 1.0.9(react@16.14.0) - antd: 4.15.1(react-dom@16.14.0)(react@16.14.0) + antd: 4.24.16(react-dom@16.14.0)(react@16.14.0) classnames: 2.3.1 omit.js: 2.0.2 rc-resize-observer: 0.2.6(react-dom@16.14.0)(react@16.14.0) @@ -394,7 +410,7 @@ packages: - react-dom dev: false - /@ant-design/pro-layout@6.16.2(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0): + /@ant-design/pro-layout@6.16.2(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0): resolution: {integrity: sha512-ZMJADXCGwsFn6nugyfk1EN0c6vTmB9rqAEeeJ2oXqxMvlZ8nOujdVTsrvgjXWT1PmPTx13Trezk35VcQEgHnHg==} peerDependencies: antd: ^4.x @@ -402,11 +418,11 @@ packages: react-dom: '>=16.8.0' dependencies: '@ant-design/icons': 4.6.2(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-provider': 1.4.10(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-utils': 1.16.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-provider': 1.4.10(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-utils': 1.16.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) '@umijs/route-utils': 1.0.37 '@umijs/use-params': 1.0.9(react@16.14.0) - antd: 4.15.1(react-dom@16.14.0)(react@16.14.0) + antd: 4.24.16(react-dom@16.14.0)(react@16.14.0) classnames: 2.3.1 omit.js: 2.0.2 path-to-regexp: 2.4.0 @@ -420,17 +436,17 @@ packages: use-media-antd-query: 1.1.0(react@16.14.0) warning: 4.0.3 - /@ant-design/pro-list@1.6.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0): + /@ant-design/pro-list@1.6.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0): resolution: {integrity: sha512-FoXtAJBr341BwQDsIqYJ6v3Bce0p50wvHFdz3A1NHniDqOrLTRyETs2k5+YYIt6OfEdelBxO2roZwdhWw1gC/w==} peerDependencies: antd: 4.x react: ^16.x dependencies: '@ant-design/icons': 4.6.2(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-card': 1.11.8(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-field': 1.15.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-table': 2.34.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - antd: 4.15.1(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-card': 1.11.8(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-field': 1.15.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-table': 2.34.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + antd: 4.24.16(react-dom@16.14.0)(react@16.14.0) classnames: 2.3.1 moment: 2.30.1 rc-resize-observer: 0.1.3(react-dom@16.14.0)(react@16.14.0) @@ -442,41 +458,41 @@ packages: - react-dom dev: false - /@ant-design/pro-provider@1.4.10(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0): + /@ant-design/pro-provider@1.4.10(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0): resolution: {integrity: sha512-wH2IXEkxRDELVFdrLwVFtXLblcumQvn/1tVznZyavsOO/mPN09AKmC3npnupYtbhiFYBiA/wSCqcyJPwWTrBMw==} peerDependencies: antd: 4.x react: ^16.x dependencies: - antd: 4.15.1(react-dom@16.14.0)(react@16.14.0) + antd: 4.24.16(react-dom@16.14.0)(react@16.14.0) rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 transitivePeerDependencies: - react-dom - /@ant-design/pro-skeleton@1.0.0-beta.13(antd@4.15.1)(react@16.14.0): + /@ant-design/pro-skeleton@1.0.0-beta.13(antd@4.24.16)(react@16.14.0): resolution: {integrity: sha512-Ngn8vBKny9QL7dXcbTus84gTcDAQsUn/ZbPCYnkKIA9/LpKTkPLG3tgCNEwKh50DYL+3gpAWr6wHcFkg/d22dg==} peerDependencies: antd: 4.x react: ^16.x dependencies: - antd: 4.15.1(react-dom@16.14.0)(react@16.14.0) + antd: 4.24.16(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 use-media-antd-query: 1.1.0(react@16.14.0) dev: false - /@ant-design/pro-table@2.34.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0): + /@ant-design/pro-table@2.34.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0): resolution: {integrity: sha512-ZOyA0MSj8XAVinDHQZhOpXUXy7XJU83DYEPdPQXBpgsZyIOVP3xhA4/sCJc6ueMnMRskSGUGd7zCGSu516pznw==} peerDependencies: antd: 4.x react: ^16.x dependencies: '@ant-design/icons': 4.6.2(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-field': 1.15.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-form': 1.21.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-provider': 1.4.10(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-utils': 1.16.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - antd: 4.15.1(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-field': 1.15.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-form': 1.21.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-provider': 1.4.10(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-utils': 1.16.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + antd: 4.24.16(react-dom@16.14.0)(react@16.14.0) classnames: 2.3.1 moment: 2.30.1 omit.js: 2.0.2 @@ -489,15 +505,15 @@ packages: - react-dom dev: false - /@ant-design/pro-utils@1.16.0(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0): + /@ant-design/pro-utils@1.16.0(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0): resolution: {integrity: sha512-IqiRavbP7Wg8puxGNqM8o+8+4VdtL4dg8mCgHEIlJ5Wg/ZJf1yIq/gmNntWnEV4ZVLKvD7kknQmnbEAbzWnAvA==} peerDependencies: antd: 4.x react: ^16.x dependencies: '@ant-design/icons': 4.6.2(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-provider': 1.4.10(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) - antd: 4.15.1(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-provider': 1.4.10(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) + antd: 4.24.16(react-dom@16.14.0)(react@16.14.0) classnames: 2.3.1 fast-deep-equal: 3.1.3 moment: 2.30.1 @@ -506,17 +522,17 @@ packages: transitivePeerDependencies: - react-dom - /@ant-design/react-slick@0.28.4(react@16.14.0): - resolution: {integrity: sha512-j9eAHTn7GxbXUFNknJoHS2ceAsqrQi2j8XykjZE1IXCD8kJF+t28EvhBLniDpbOsBk/3kjalnhriTfZcjBHNqg==} + /@ant-design/react-slick@1.0.2(react@16.14.0): + resolution: {integrity: sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==} peerDependencies: react: '>=16.9.0' dependencies: '@babel/runtime': 7.27.6 classnames: 2.3.1 json2mq: 0.2.0 - lodash: 4.17.21 react: 16.14.0 resize-observer-polyfill: 1.5.1 + throttle-debounce: 5.0.2 /@asamuzakjp/css-color@3.2.0: resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} @@ -2625,6 +2641,19 @@ packages: /@qixian.cs/path-to-regexp@6.1.0: resolution: {integrity: sha512-2jIiLiVZB1jnY7IIRQKtoV8Gnr7XIhk4mC88ONGunZE3hYt5IHUG4BE/6+JiTBjjEWQLBeWnZB8hGpppkufiVw==} + /@rc-component/portal@1.1.2(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.27.6 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + /@sinonjs/commons@1.8.6: resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} dependencies: @@ -3488,7 +3517,7 @@ packages: peerDependencies: umi: 3.x dependencies: - antd: 4.15.1(react-dom@16.14.0)(react@16.14.0) + antd: 4.24.16(react-dom@16.14.0)(react@16.14.0) antd-mobile: 2.3.4(react-dom@16.14.0)(react@16.14.0) semver: 7.7.2 umi: 3.5.43(react-router@5.3.4) @@ -3581,12 +3610,12 @@ packages: umi: 3.x dependencies: '@ant-design/icons': 4.6.2(react-dom@16.14.0)(react@16.14.0) - '@ant-design/pro-layout': 6.16.2(antd@4.15.1)(react-dom@16.14.0)(react@16.14.0) + '@ant-design/pro-layout': 6.16.2(antd@4.24.16)(react-dom@16.14.0)(react@16.14.0) '@umijs/plugin-initial-state': 2.4.0(umi@3.5.43) '@umijs/plugin-locale': 0.15.2(react-dom@16.14.0)(react@16.14.0)(umi@3.5.43) '@umijs/plugin-model': 2.6.2(umi@3.5.43) '@umijs/route-utils': 2.2.2 - antd: 4.15.1(react-dom@16.14.0)(react@16.14.0) + antd: 4.24.16(react-dom@16.14.0)(react@16.14.0) lodash: 4.17.21 path-to-regexp: 1.9.0 umi: 3.5.43(react-router@5.3.4) @@ -4582,56 +4611,57 @@ packages: - react-dom dev: true - /antd@4.15.1(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-zTZz8GY9yERNjSnH6xWU3Rw5sC3RtHEs/LOTKcSMTtU3Q5jHXIbAHKd1C6bYLQT6Ru75p+/UyKvJoNip/ax/WQ==} + /antd@4.24.16(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-zZrK4UYxHtU6tGOOf0uG/kBRx1kTvypfuSB3GqE/SBQxFhZ/TZ+yj7Z1qwI8vGfMtUUJdLeuoCAqGDa1zPsXnQ==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: '@ant-design/colors': 6.0.0 - '@ant-design/icons': 4.6.2(react-dom@16.14.0)(react@16.14.0) - '@ant-design/react-slick': 0.28.4(react@16.14.0) + '@ant-design/icons': 4.8.3(react-dom@16.14.0)(react@16.14.0) + '@ant-design/react-slick': 1.0.2(react@16.14.0) '@babel/runtime': 7.27.6 - array-tree-filter: 2.1.0 + '@ctrl/tinycolor': 3.6.1 classnames: 2.3.1 copy-to-clipboard: 3.3.3 lodash: 4.17.21 moment: 2.30.1 - rc-cascader: 1.4.3(react-dom@16.14.0)(react@16.14.0) - rc-checkbox: 2.3.2(react-dom@16.14.0)(react@16.14.0) - rc-collapse: 3.1.4(react-dom@16.14.0)(react@16.14.0) - rc-dialog: 8.5.3(react-dom@16.14.0)(react@16.14.0) - rc-drawer: 4.3.1(react-dom@16.14.0)(react@16.14.0) - rc-dropdown: 3.2.5(react-dom@16.14.0)(react@16.14.0) - rc-field-form: 1.20.1(react-dom@16.14.0)(react@16.14.0) - rc-image: 5.2.5(react-dom@16.14.0)(react@16.14.0) - rc-input-number: 7.0.6(react-dom@16.14.0)(react@16.14.0) - rc-mentions: 1.5.3(react-dom@16.14.0)(react@16.14.0) - rc-menu: 8.10.8(react-dom@16.14.0)(react@16.14.0) + rc-cascader: 3.7.3(react-dom@16.14.0)(react@16.14.0) + rc-checkbox: 3.0.1(react-dom@16.14.0)(react@16.14.0) + rc-collapse: 3.4.2(react-dom@16.14.0)(react@16.14.0) + rc-dialog: 9.0.4(react-dom@16.14.0)(react@16.14.0) + rc-drawer: 6.3.0(react-dom@16.14.0)(react@16.14.0) + rc-dropdown: 4.0.1(react-dom@16.14.0)(react@16.14.0) + rc-field-form: 1.38.2(react-dom@16.14.0)(react@16.14.0) + rc-image: 5.13.0(react-dom@16.14.0)(react@16.14.0) + rc-input: 0.1.4(react-dom@16.14.0)(react@16.14.0) + rc-input-number: 7.3.11(react-dom@16.14.0)(react@16.14.0) + rc-mentions: 1.13.1(react-dom@16.14.0)(react@16.14.0) + rc-menu: 9.8.4(react-dom@16.14.0)(react@16.14.0) rc-motion: 2.9.5(react-dom@16.14.0)(react@16.14.0) - rc-notification: 4.5.7(react-dom@16.14.0)(react@16.14.0) - rc-pagination: 3.1.17(react-dom@16.14.0)(react@16.14.0) - rc-picker: 2.5.19(react-dom@16.14.0)(react@16.14.0) - rc-progress: 3.1.4(react-dom@16.14.0)(react@16.14.0) + rc-notification: 4.6.1(react-dom@16.14.0)(react@16.14.0) + rc-pagination: 3.2.0(react-dom@16.14.0)(react@16.14.0) + rc-picker: 2.7.6(react-dom@16.14.0)(react@16.14.0) + rc-progress: 3.4.2(react-dom@16.14.0)(react@16.14.0) rc-rate: 2.9.3(react-dom@16.14.0)(react@16.14.0) rc-resize-observer: 1.4.3(react-dom@16.14.0)(react@16.14.0) - rc-select: 12.1.13(react-dom@16.14.0)(react@16.14.0) - rc-slider: 9.7.5(react-dom@16.14.0)(react@16.14.0) - rc-steps: 4.1.4(react-dom@16.14.0)(react@16.14.0) + rc-segmented: 2.3.0(react-dom@16.14.0)(react@16.14.0) + rc-select: 14.1.18(react-dom@16.14.0)(react@16.14.0) + rc-slider: 10.0.1(react-dom@16.14.0)(react@16.14.0) + rc-steps: 5.0.0(react-dom@16.14.0)(react@16.14.0) rc-switch: 3.2.2(react-dom@16.14.0)(react@16.14.0) - rc-table: 7.13.3(react-dom@16.14.0)(react@16.14.0) - rc-tabs: 11.7.3(react-dom@16.14.0)(react@16.14.0) - rc-textarea: 0.3.7(react-dom@16.14.0)(react@16.14.0) - rc-tooltip: 5.1.1(react-dom@16.14.0)(react@16.14.0) - rc-tree: 4.1.5(react-dom@16.14.0)(react@16.14.0) - rc-tree-select: 4.3.3(react-dom@16.14.0)(react@16.14.0) + rc-table: 7.26.0(react-dom@16.14.0)(react@16.14.0) + rc-tabs: 12.5.10(react-dom@16.14.0)(react@16.14.0) + rc-textarea: 0.4.7(react-dom@16.14.0)(react@16.14.0) + rc-tooltip: 5.2.2(react-dom@16.14.0)(react@16.14.0) + rc-tree: 5.7.12(react-dom@16.14.0)(react@16.14.0) + rc-tree-select: 5.5.5(react-dom@16.14.0)(react@16.14.0) rc-trigger: 5.3.4(react-dom@16.14.0)(react@16.14.0) - rc-upload: 4.2.1(react-dom@16.14.0)(react@16.14.0) + rc-upload: 4.3.6(react-dom@16.14.0)(react@16.14.0) rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) scroll-into-view-if-needed: 2.2.31 - warning: 4.0.3 /anymatch@2.0.0: resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} @@ -4882,8 +4912,8 @@ packages: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: true - /async-validator@3.5.2: - resolution: {integrity: sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==} + /async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} /async@1.5.2: resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} @@ -5713,6 +5743,9 @@ packages: /classnames@2.3.1: resolution: {integrity: sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==} + /classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + /clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -11006,17 +11039,6 @@ packages: react: 16.14.0 tiny-warning: 1.0.3 - /mini-store@3.0.6(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-YzffKHbYsMQGUWQRKdsearR79QsMzzJcDDmZKlJBqt5JNkqpyJHYlK6gP61O36X+sLf76sO9G6mhKBe83gIZIQ==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - hoist-non-react-statics: 3.3.2 - react: 16.14.0 - react-dom: 16.14.0(react@16.14.0) - shallowequal: 1.1.0 - /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -12838,19 +12860,20 @@ packages: react-lifecycles-compat: 3.0.4 dev: true - /rc-cascader@1.4.3(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-Q4l9Mv8aaISJ+giVnM9IaXxDeMqHUGLvi4F+LksS6pHlaKlN4awop/L+IMjIXpL+ug/ojaCyv/ixcVopJYYCVA==} + /rc-cascader@3.7.3(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-KBpT+kzhxDW+hxPiNk4zaKa99+Lie2/8nnI11XF+FIOPl4Bj9VlFZi61GrnWzhLGA7VEN+dTxAkNOjkySDa0dA==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.27.6 array-tree-filter: 2.1.0 - rc-trigger: 5.3.4(react-dom@16.14.0)(react@16.14.0) + classnames: 2.3.1 + rc-select: 14.1.18(react-dom@16.14.0)(react@16.14.0) + rc-tree: 5.7.12(react-dom@16.14.0)(react@16.14.0) rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - warning: 4.0.3 /rc-checkbox@2.0.3: resolution: {integrity: sha512-sSDV5AcxK5CxBTyUNj9pb0zfhdgLLsWKHwJG18ikeGoIwklcxXvIF6cI/KGVbPLFDa8mPS5WLOlLRqbq/1/ouw==} @@ -12861,14 +12884,15 @@ packages: rc-util: 4.21.1 dev: true - /rc-checkbox@2.3.2(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==} + /rc-checkbox@3.0.1(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-k7nxDWxYF+jDI0ZcCvuvj71xONmWRVe5+1MKcERRR9MRyP3tZ69b+yUCSXXh+sik4/Hc9P5wHr2nnUoGS2zBjA==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.27.6 - classnames: 2.3.1 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) @@ -12884,8 +12908,8 @@ packages: - react-dom dev: true - /rc-collapse@3.1.4(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-WayrhswKMwuJab9xbqFxXTgV0m6X8uOPEO6zm/GJ5YJiJ/wIh/Dd2VtWeI06HYUEnTFv0HNcYv+zWbB+p6OD2A==} + /rc-collapse@3.4.2(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-jpTwLgJzkhAgp2Wpi3xmbTbbYExg6fkptL67Uu5LCRVEj6wqmy0DHTjjeynsjOLsppHGHu41t1ELntZ0lEvS/Q==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -12898,65 +12922,56 @@ packages: react-dom: 16.14.0(react@16.14.0) shallowequal: 1.1.0 - /rc-dialog@8.5.3(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-zoamT8L6+rBwnwjPlrZRxiHCHQXrTcWZD3a6ruoqEdUKP1KgO0eSjMDH9WlF3WEPYMVnb2G5SrjHrhnwgPDu5w==} + /rc-dialog@9.0.4(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-pmnPRZKd9CGzGgf4a1ysBvMhxm8Afx5fF6M7AzLtJ0qh8X1bshurDlqnK4MBNAB4hAeAMMbz6Ytb1rkGMvKFbQ==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.27.6 + '@rc-component/portal': 1.1.2(react-dom@16.14.0)(react@16.14.0) classnames: 2.3.1 rc-motion: 2.9.5(react-dom@16.14.0)(react@16.14.0) rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - /rc-dialog@8.6.0(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-GSbkfqjqxpZC5/zc+8H332+q5l/DKUhpQr0vdX2uDsxo5K0PhvaMEVjyoJUTkZ3+JstEADQji1PVLVb/2bJeOQ==} + /rc-drawer@6.3.0(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-uBZVb3xTAR+dBV53d/bUhTctCw3pwcwJoM7g5aX+7vgwt2zzVzoJ6aqFjYJpBlZ9zp0dVYN8fV+hykFE7c4lig==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.27.6 + '@rc-component/portal': 1.1.2(react-dom@16.14.0)(react@16.14.0) classnames: 2.3.1 rc-motion: 2.9.5(react-dom@16.14.0)(react@16.14.0) rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - /rc-drawer@4.3.1(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-GMfFy4maqxS9faYXEhQ+0cA1xtkddEQzraf6SAdzWbn444DrrLogwYPk1NXSpdXjLCLxgxOj9MYtyYG42JsfXg==} + /rc-dropdown@4.0.1(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g==} peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.27.6 - classnames: 2.3.1 - rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) - react: 16.14.0 - react-dom: 16.14.0(react@16.14.0) - - /rc-dropdown@3.2.5(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-dVO2eulOSbEf+F4OyhCY5iGiMVhUYY/qeXxL7Ex2jDBt/xc89jU07mNoowV6aWxwVOc70pxEINff0oM2ogjluA==} - peerDependencies: - react: '*' - react-dom: '*' + react: '>=16.11.0' + react-dom: '>=16.11.0' dependencies: '@babel/runtime': 7.27.6 classnames: 2.3.1 rc-trigger: 5.3.4(react-dom@16.14.0)(react@16.14.0) + rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - /rc-field-form@1.20.1(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-f64KEZop7zSlrG4ef/PLlH12SLn6iHDQ3sTG+RfKBM45hikwV1i8qMf53xoX12NvXXWg1VwchggX/FSso4bWaA==} + /rc-field-form@1.38.2(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-O83Oi1qPyEv31Sg+Jwvsj6pXc8uQI2BtIAkURr5lvEYHVggXJhdU/nynK8wY1gbw0qR48k731sN5ON4egRCROA==} engines: {node: '>=8.x'} peerDependencies: - react: '>= 16.9.0' - react-dom: '>= 16.9.0' + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.27.6 - async-validator: 3.5.2 + async-validator: 4.2.5 rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) @@ -12967,62 +12982,74 @@ packages: babel-runtime: 6.26.0 dev: true - /rc-image@5.2.5(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-qUfZjYIODxO0c8a8P5GeuclYXZjzW4hV/5hyo27XqSFo1DmTCs2HkVeQObkcIk5kNsJtgsj1KoPThVsSc/PXOw==} + /rc-image@5.13.0(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-iZTOmw5eWo2+gcrJMMcnd7SsxVHl3w5xlyCgsULUdJhJbnuI8i/AL0tVOsE7aLn9VfOh1qgDT3mC2G75/c7mqg==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.27.6 + '@rc-component/portal': 1.1.2(react-dom@16.14.0)(react@16.14.0) classnames: 2.3.1 - rc-dialog: 8.6.0(react-dom@16.14.0)(react@16.14.0) - rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) - react: 16.14.0 - react-dom: 16.14.0(react@16.14.0) - - /rc-input-number@7.0.6(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-J5DIoCKIunoPb16FEghaEOyNDuZXD5F9LxLNcqd31z/0e37XtuHgo4QF/TonKLsESwdg7UAzWhiD0K6PPrN3YQ==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.27.6 - classnames: 2.3.1 - rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) - react: 16.14.0 - react-dom: 16.14.0(react@16.14.0) - - /rc-mentions@1.5.3(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-NG/KB8YiKBCJPHHvr/QapAb4f9YzLJn7kDHtmI1K6t7ZMM5YgrjIxNNhoRKKP9zJvb9PdPts69Hbg4ZMvLVIFQ==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.27.6 - classnames: 2.3.1 - rc-menu: 8.10.8(react-dom@16.14.0)(react@16.14.0) - rc-textarea: 0.3.7(react-dom@16.14.0)(react@16.14.0) - rc-trigger: 5.3.4(react-dom@16.14.0)(react@16.14.0) - rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) - react: 16.14.0 - react-dom: 16.14.0(react@16.14.0) - - /rc-menu@8.10.8(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-0gnSR0nmR/60NnK+72EGd+QheHyPSQ3wYg1TwX1zl0JJ9Gm0purFFykCXVv/G0Jynpt0QySPAos+bpHpjMZdoQ==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.27.6 - classnames: 2.3.1 - mini-store: 3.0.6(react-dom@16.14.0)(react@16.14.0) + rc-dialog: 9.0.4(react-dom@16.14.0)(react@16.14.0) rc-motion: 2.9.5(react-dom@16.14.0)(react@16.14.0) + rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + /rc-input-number@7.3.11(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.27.6 + classnames: 2.3.1 + rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + /rc-input@0.1.4(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-FqDdNz+fV2dKNgfXzcSLKvC+jEs1709t7nD+WdfjrdSaOcefpgc7BUJYadc3usaING+b7ediMTfKxuJBsEFbXA==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + dependencies: + '@babel/runtime': 7.27.6 + classnames: 2.3.1 + rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + /rc-mentions@1.13.1(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-FCkaWw6JQygtOz0+Vxz/M/NWqrWHB9LwqlY2RtcuFqWJNFK9njijOOzTSsBGANliGufVUzx/xuPHmZPBV0+Hgw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.27.6 + classnames: 2.3.1 + rc-menu: 9.8.4(react-dom@16.14.0)(react@16.14.0) + rc-textarea: 0.4.7(react-dom@16.14.0)(react@16.14.0) + rc-trigger: 5.3.4(react-dom@16.14.0)(react@16.14.0) + rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + /rc-menu@9.8.4(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-lmw2j8I2fhdIzHmC9ajfImfckt0WDb2KVJJBBRIsxPEw2kGkEfjLMUoB1NgiNT/Q5cC8PdjGOGQjHJIJMwyNMw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.27.6 + classnames: 2.3.1 + rc-motion: 2.9.5(react-dom@16.14.0)(react@16.14.0) + rc-overflow: 1.4.1(react-dom@16.14.0)(react@16.14.0) rc-trigger: 5.3.4(react-dom@16.14.0)(react@16.14.0) rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - resize-observer-polyfill: 1.5.1 - shallowequal: 1.1.0 /rc-motion@2.9.5(react-dom@16.14.0)(react@16.14.0): resolution: {integrity: sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==} @@ -13036,8 +13063,8 @@ packages: react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - /rc-notification@4.5.7(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-zhTGUjBIItbx96SiRu3KVURcLOydLUHZCPpYEn1zvh+re//Tnq/wSxN4FKgp38n4HOgHSVxcLEeSxBMTeBBDdw==} + /rc-notification@4.6.1(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-NSmFYwrrdY3+un1GvDAJQw62Xi9LNMSsoQyo95tuaYrcad5Bn9gJUL8AREufRxSQAQnr64u3LtP3EUyLYT6bhw==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -13063,8 +13090,8 @@ packages: react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - /rc-pagination@3.1.17(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-/BQ5UxcBnW28vFAcP2hfh+Xg15W0QZn8TWYwdCApchMH1H0CxiaUUcULP8uXcFM1TygcdKWdt3JqsL9cTAfdkQ==} + /rc-pagination@3.2.0(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-5tIXjB670WwwcAJzAqp2J+cOBS9W3cH/WU1EiYwXljuZ4vtZXKlY2Idq8FZrnYBz8KhN3vwPo9CoV/SJS6SL1w==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -13074,8 +13101,8 @@ packages: react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - /rc-picker@2.5.19(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-u6myoCu/qiQ0vLbNzSzNrzTQhs7mldArCpPHrEI6OUiifs+IPXmbesqSm0zilJjfzrZJLgYeyyOMSznSlh0GKA==} + /rc-picker@2.7.6(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-H9if/BUJUZBOhPfWcPeT15JUI3/ntrG9muzERrXDkSoWmDj4yzmBvumozpxYrHwjcKnjyDGAke68d+whWwvhHA==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -13092,14 +13119,15 @@ packages: react-dom: 16.14.0(react@16.14.0) shallowequal: 1.1.0 - /rc-progress@3.1.4(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-XBAif08eunHssGeIdxMXOmRQRULdHaDdIFENQ578CMb4dyewahmmfJRyab+hw4KH4XssEzzYOkAInTLS7JJG+Q==} + /rc-progress@3.4.2(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-iAGhwWU+tsayP+Jkl9T4+6rHeQTG9kDz8JAHZk4XtQOcYN5fj9H34NXNEdRdZx94VUDHMqCb1yOIvi8eJRh67w==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.27.6 classnames: 2.3.1 + rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) @@ -13155,8 +13183,21 @@ packages: react-dom: 16.14.0(react@16.14.0) resize-observer-polyfill: 1.5.1 - /rc-select@12.1.13(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-cPI+aesP6dgCAaey4t4upDbEukJe+XN0DK6oO/6flcCX5o28o7KNZD7JAiVtC/6fCwqwI/kSs7S/43dvHmBl+A==} + /rc-segmented@2.3.0(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + dependencies: + '@babel/runtime': 7.27.6 + classnames: 2.3.1 + rc-motion: 2.9.5(react-dom@16.14.0)(react@16.14.0) + rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + /rc-select@14.1.18(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-4JgY3oG2Yz68ECMUSCON7mtxuJvCSj+LJpHEg/AONaaVBxIIrmI/ZTuMJkyojall/X50YdBe5oMKqHHPNiPzEg==} engines: {node: '>=8.x'} peerDependencies: react: '*' @@ -13172,6 +13213,20 @@ packages: react: 16.14.0 react-dom: 16.14.0(react@16.14.0) + /rc-slider@10.0.1(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-igTKF3zBet7oS/3yNiIlmU8KnZ45npmrmHlUUio8PNbIhzMcsh+oE/r2UD42Y6YD2D/s+kzCQkzQrPD6RY435Q==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.27.6 + classnames: 2.3.1 + rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + shallowequal: 1.1.0 + /rc-slider@8.2.0(react-dom@16.14.0)(react@16.14.0): resolution: {integrity: sha512-rnO36M3VhMoPWh1kRuCeJoluT4duAW7+5aLaAn9oLu2pKEKsuOFUh5DmA2kEo88UmvPV6nr7HHDeZuC8SNM/lA==} dependencies: @@ -13187,23 +13242,8 @@ packages: - react-dom dev: true - /rc-slider@9.7.5(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-LV/MWcXFjco1epPbdw1JlLXlTgmWpB9/Y/P2yinf8Pg3wElHxA9uajN21lJiWtZjf5SCUekfSP6QMJfDo4t1hg==} - engines: {node: '>=8.x'} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - dependencies: - '@babel/runtime': 7.27.6 - classnames: 2.3.1 - rc-tooltip: 5.1.1(react-dom@16.14.0)(react@16.14.0) - rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) - react: 16.14.0 - react-dom: 16.14.0(react@16.14.0) - shallowequal: 1.1.0 - - /rc-steps@4.1.4(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-qoCqKZWSpkh/b03ASGx1WhpKnuZcRWmvuW+ZUu4mvMdfvFzVxblTwUM+9aBd0mlEUFmt6GW8FXhMpHkK3Uzp3w==} + /rc-steps@5.0.0(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-9TgRvnVYirdhbV0C3syJFj9EhCRqoJAsxt4i1rED5o8/ZcSv5TLIYyo4H8MCjLPvbe2R+oBAm/IYBEtC+OS1Rw==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -13236,8 +13276,8 @@ packages: react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - /rc-table@7.13.3(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-oP4fknjvKCZAaiDnvj+yzBaWcg+JYjkASbeWonU1BbrLcomkpKvMUgPODNEzg0QdXA9OGW0PO86h4goDSW06Kg==} + /rc-table@7.26.0(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-0cD8e6S+DTGAt5nBZQIPFYEaIukn17sfa5uFL98faHlH/whZzD8ii3dbFL4wmUDEL4BLybhYop+QUfZJ4CPvNQ==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -13251,8 +13291,8 @@ packages: react-dom: 16.14.0(react@16.14.0) shallowequal: 1.1.0 - /rc-tabs@11.7.3(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-5nd2NVss9TprPRV9r8N05SjQyAE7zDrLejxFLcbJ+BdLxSwnGnk3ws/Iq0smqKZUnPQC0XEvnpF3+zlllUUT2w==} + /rc-tabs@12.5.10(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-Ay0l0jtd4eXepFH9vWBvinBjqOpqzcsJTerBGwJy435P2S90Uu38q8U/mvc1sxUEVOXX5ZCFbxcWPnfG3dH+tQ==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' @@ -13260,15 +13300,16 @@ packages: dependencies: '@babel/runtime': 7.27.6 classnames: 2.3.1 - rc-dropdown: 3.2.5(react-dom@16.14.0)(react@16.14.0) - rc-menu: 8.10.8(react-dom@16.14.0)(react@16.14.0) + rc-dropdown: 4.0.1(react-dom@16.14.0)(react@16.14.0) + rc-menu: 9.8.4(react-dom@16.14.0)(react@16.14.0) + rc-motion: 2.9.5(react-dom@16.14.0)(react@16.14.0) rc-resize-observer: 1.4.3(react-dom@16.14.0)(react@16.14.0) rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - /rc-textarea@0.3.7(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-yCdZ6binKmAQB13hc/oehh0E/QRwoPP1pjF21aHBxlgXO3RzPF6dUu4LG2R4FZ1zx/fQd2L1faktulrXOM/2rw==} + /rc-textarea@0.4.7(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-IQPd1CDI3mnMlkFyzt2O4gQ2lxUsnBAeJEoZGJnkkXgORNqyM9qovdrCj9NzcRfpHgLdzaEbU3AmobNFGUznwQ==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -13292,34 +13333,35 @@ packages: - react-dom dev: true - /rc-tooltip@5.1.1(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA==} + /rc-tooltip@5.2.2(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-jtQzU/18S6EI3lhSGoDYhPqNpWajMtS5VV/ld1LwyfrDByQpYmw/LW6U7oFXXLukjfDHQ7Ju705A82PRNFWYhg==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: '@babel/runtime': 7.27.6 + classnames: 2.3.1 rc-trigger: 5.3.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - /rc-tree-select@4.3.3(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-0tilOHLJA6p+TNg4kD559XnDX3PTEYuoSF7m7ryzFLAYvdEEPtjn0QZc5z6L0sMKBiBlj8a2kf0auw8XyHU3lA==} + /rc-tree-select@5.5.5(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-k2av7jF6tW9bIO4mQhaVdV4kJ1c54oxV3/hHVU+oD251Gb5JN+m1RbJFTMf1o0rAFqkvto33rxMdpafaGKQRJw==} peerDependencies: react: '*' react-dom: '*' dependencies: '@babel/runtime': 7.27.6 classnames: 2.3.1 - rc-select: 12.1.13(react-dom@16.14.0)(react@16.14.0) - rc-tree: 4.1.5(react-dom@16.14.0)(react@16.14.0) + rc-select: 14.1.18(react-dom@16.14.0)(react@16.14.0) + rc-tree: 5.7.12(react-dom@16.14.0)(react@16.14.0) rc-util: 5.44.4(react-dom@16.14.0)(react@16.14.0) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - /rc-tree@4.1.5(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-q2vjcmnBDylGZ9/ZW4F9oZMKMJdbFWC7um+DAQhZG1nqyg1iwoowbBggUDUaUOEryJP+08bpliEAYnzJXbI5xQ==} - engines: {node: '>=8.x'} + /rc-tree@5.7.12(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-LXA5nY2hG5koIAlHW5sgXgLpOMz+bFRbnZZ+cCg0tQs4Wv1AmY7EDi1SK7iFXhslYockbqUerQan82jljoaItg==} + engines: {node: '>=10.x'} peerDependencies: react: '*' react-dom: '*' @@ -13362,8 +13404,8 @@ packages: react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - /rc-upload@4.2.1(react-dom@16.14.0)(react@16.14.0): - resolution: {integrity: sha512-ylCwyzKjCFpD2ZrTe49adxnyo/bJIhoydWRg9y6LwYM0eRT/GDYvkLauXR0MKWVVmCtp+x6pOjTXqd3b0Z3KzA==} + /rc-upload@4.3.6(react-dom@16.14.0)(react@16.14.0): + resolution: {integrity: sha512-Bt7ESeG5tT3IY82fZcP+s0tQU2xmo1W6P3S8NboUUliquJLQYLkUcsaExi3IlBVr43GQMCjo30RA2o0i70+NjA==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -15772,6 +15814,10 @@ packages: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} dev: true + /throttle-debounce@5.0.2: + resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} + engines: {node: '>=12.22'} + /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: diff --git a/src/hooks/useUser.ts b/src/hooks/useUser.ts index 52900df..fd42eaa 100644 --- a/src/hooks/useUser.ts +++ b/src/hooks/useUser.ts @@ -1,24 +1,41 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; // 获取用户信息 这里没用dva, 因为包装组件写法复杂(当前框架),尤其是有form表单组件时 export const useUser = () => { const [user, setUser] = useState({ - role: 'admin1', // 模拟用户权限 + role: 'admin1', // 初始默认值 }); - const getUserInfo = ()=>{ - return user; - } + const [loading, setLoading] = useState(false); + + // 获取用户信息 + const getUserInfo = async () => { + return JSON.parse(sessionStorage.getItem('userInfo') || user || '{}'); + }; + const setUserInfo = (userInfo: any) => { + sessionStorage.setItem('userInfo', JSON.stringify(userInfo)); setUser(userInfo); - } - const getUserRole = ()=>{ + }; + + const getUserRole = () => { return user.role; - } + }; + const setToken = (token: string) => { sessionStorage.setItem('token', token); - } + }; + const getToken = () => { return sessionStorage.getItem('token'); - } - return { user, getUserInfo, setUserInfo, getUserRole, setToken, getToken }; + }; + + return { + user, + loading, + getUserInfo, + setUserInfo, + getUserRole, + setToken, + getToken + }; }; diff --git a/src/layouts/User.tsx b/src/layouts/User.tsx index 6ebc08c..2e60187 100644 --- a/src/layouts/User.tsx +++ b/src/layouts/User.tsx @@ -1,11 +1,70 @@ -import React from 'react'; -import { Link, useIntl } from 'umi'; -const User: React.FC = (props) => { +import React, { useEffect, useState } from 'react'; +import { Link, useIntl, connect, history } from 'umi'; +import { Dropdown, Button, Modal } from 'antd'; +import { DownOutlined, ExclamationCircleOutlined } from '@ant-design/icons'; +import type { ConnectProps, Dispatch } from 'umi'; +import type { UserModelState } from '@/models/user'; +import { message } from 'antd'; + +interface PageProps extends ConnectProps { + user: UserModelState; // dva model状态 + dispatch: Dispatch; // dva dispatch方法 +} +const User: React.FC = ({ user, dispatch }) => { const intl = useIntl(); + useEffect(() => { + if (user.token) { + dispatch({ + type: 'user/fetchUserInfo', + }); + } + }, [user.token]); + const handleMenuClick = (e: any) => { + if (e.key === 'logout') { + Modal.confirm({ + title: '确定退出登录吗?', + icon: , + content: '退出登录后,您将需要重新登录', + onOk() { + dispatch({ + type: 'user/logout', + }).then(() => { + sessionStorage.clear(); + message.success('退出登录成功'); + history.push('/login'); + }); + }, + onCancel() { + return; + }, + }); + } + }; return (
- {intl.formatMessage({ id: '登录' })} + {user.userInfo?.fullName ? ( + + + + ) : ( + {intl.formatMessage({ id: '登录' })} + )}
); }; -export default User; + +export default connect(({ user }: { user: UserModelState }) => ({ user }))(User); diff --git a/src/models/index.ts b/src/models/index.ts index e774b71..436c1b9 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -1,6 +1,8 @@ import breadcrumb from './breadcrumb'; +import user from './user'; export default { breadcrumb, + user, // ... 其他 models }; diff --git a/src/models/user.ts b/src/models/user.ts new file mode 100644 index 0000000..8d0b1c1 --- /dev/null +++ b/src/models/user.ts @@ -0,0 +1,90 @@ +import type { Effect, Reducer } from 'umi'; + +import { getUserinfo, Logout } from '@/servers/api/login'; + + +export type User = { + userId: string; + userName: string; + userType: string; +}; + +export type UserInfo = { + userId: string; + fullName: string; + loginName: string; + userType: string; + authorityList: { roleId: string, roleName: string, roleCode: string, roleScope: string }[]; +}; + +export type UserModelState = { + user?: User; + token?: string; + userInfo?: UserInfo; +}; + +export type UserModelType = { + namespace: 'user'; + state: UserModelState; + effects: { + fetchUserInfo: Effect; + logout: Effect; + }; + reducers: { + saveLoginUser: Reducer; + saveUserInfo: Reducer; + clearUserInfo: Reducer; + }; +}; + +const UserModel: UserModelType = { + namespace: 'user', + + state: { + user: undefined, // 登录返回的用户信息 + token: sessionStorage.getItem('token') || '', // 登录返回的token + userInfo: undefined, // 请求userInfo返回的用户信息 + }, + + effects: { + *fetchUserInfo(_, { call, put }) { + const response = yield call(getUserinfo); + yield put({ + type: 'saveUserInfo', + payload: response, + }); + }, + *logout(_, { call, put }) { + yield call(Logout); + yield put({ + type: 'clearUserInfo' + }); + }, + }, + + reducers: { + clearUserInfo(state) { + return { + ...state, + userInfo: undefined, + token: '', + user: {}, + }; + }, + saveLoginUser(state, action) { + return { + ...state, + user: action.payload.user || {}, + token: action.payload.token || '', + }; + }, + saveUserInfo(state, action) { + return { + ...state, + userInfo: action.payload || {}, + }; + }, + } +}; + +export default UserModel; diff --git a/src/pages/login/login.tsx b/src/pages/login/login.tsx index 304e1b9..8b6e3ae 100644 --- a/src/pages/login/login.tsx +++ b/src/pages/login/login.tsx @@ -1,52 +1,49 @@ -import React, { useState, useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import { Form, Input, Button, Checkbox, Tabs, message } from 'antd'; -import { UserOutlined, LockOutlined, EyeInvisibleOutlined, EyeTwoTone, HomeOutlined } from '@ant-design/icons'; -import { history, useIntl } from 'umi'; +import { + UserOutlined, + LockOutlined, + EyeInvisibleOutlined, + EyeTwoTone, + HomeOutlined, +} from '@ant-design/icons'; +import { history, useIntl, connect } from 'umi'; +import type { ConnectProps, Dispatch } from 'umi'; import './login.less'; -import { getCaptcha, supplierLogin, expertLogin, accountLogin } from '@/servers/api/login'; - -import { encryptWithRsa } from '@/utils/encryptWithRsa' +import { getCaptcha, supplierLogin, getUserinfo, findMenuList ,accountLogin} from '@/servers/api/login'; +import { encryptWithRsa } from '@/utils/encryptWithRsa'; +import type { UserModelState } from '@/models/user'; const { TabPane } = Tabs; - -const LoginPage: React.FC = () => { - const [activeKey, setActiveKey] = useState('supplierLogin'); +interface PageProps extends ConnectProps { + user: UserModelState; // dva model状态 + dispatch: Dispatch; // dva dispatch方法 +} +const LoginPage: React.FC = ({ user, dispatch }) => { + const [activeKey, setActiveKey] = useState('agent'); const [form] = Form.useForm(); const [loading, setLoading] = useState(false); - const [captchaImg, setCaptchaImg] = useState(''); - const [captchaKey, setCaptchaKey] = useState(''); - //切换后 走不同接口 - const loginApiMap: { [key: string]: (params: any) => Promise } = { - supplierLogin, - expertLogin, - accountLogin - }; - const intl = useIntl(); - - + const [captchaImg, setCaptchaImg] = useState(''); + const [captchaKey, setCaptchaKey] = useState(''); const onFinish = async (values: any) => { setLoading(true); try { const params = { ...values, password: encryptWithRsa(values.password, false), - encryptValue: encryptWithRsa(values.identifying) + encryptValue: encryptWithRsa(values.identifying), }; - const loginRes = await loginApiMap[activeKey](params); + const loginRes = await accountLogin(params); if (loginRes.code === 200) { sessionStorage.setItem('token', loginRes.data.token); //存入供应商用户id - if(activeKey === 'supplierLogin') { - sessionStorage.setItem('userId', loginRes.data.supplierUser.userId); - } else if(activeKey === 'expertLogin') { - //存入专家用户id - // sessionStorage.setItem('userId', loginRes.data.expertUser.userId); - } else if(activeKey === 'accountLogin') { - //存入招标代理用户id - // sessionStorage.setItem('userId', loginRes.data.supplierUser.userId); - } + sessionStorage.setItem('userId', loginRes.data.user.userId); sessionStorage.setItem('currentUser', JSON.stringify(loginRes.data)); + dispatch({ + type: 'user/saveLoginUser', + payload: loginRes.data, + }) message.success('登录成功'); history.push('/index'); } else { @@ -57,19 +54,6 @@ const LoginPage: React.FC = () => { } }; - - const fetchCaptcha = async () => { - const res = await getCaptcha(); - if (res.code === 200) { - setCaptchaImg(res.data.base64Image); - setCaptchaKey(res.data.code); - } - }; - - useEffect(() => { - fetchCaptcha(); - }, [activeKey]); - const handleTabChange = (key: string) => { setActiveKey(key); form.resetFields(); @@ -77,11 +61,11 @@ const LoginPage: React.FC = () => { // 根据当前选中的Tab决定跳转到哪个注册页面 const handleRegister = () => { - switch(activeKey) { - case 'supplierLogin': + switch (activeKey) { + case 'supplier': history.push('/register/supplier'); break; - case 'expertLogin': + case 'expert': history.push('/register/expert'); break; default: @@ -92,49 +76,62 @@ const LoginPage: React.FC = () => { // 渲染注册链接(只在供应商和专家Tab下显示) const renderRegisterLink = () => { - if (activeKey === 'agent') { + if (activeKey === 'agent' || activeKey === 'expert') { return null; // 招标代理不显示注册链接 } return ( ); }; - + // 获取验证码 + const fetchCaptcha = async () => { + const res = await getCaptcha(); + if (res.code === 200) { + setCaptchaImg(res.data.base64Image); + setCaptchaKey(res.data.code); + } + }; + useEffect(() => { + fetchCaptcha(); + }, [activeKey]); return ( -
-
- {/*
+
+
+ */} - -
{intl.formatMessage({ id: 'login.title' })}
- -
- - - - -
+
{intl.formatMessage({ id: 'login.title' })}
+ + {/*
+ + + + + +
*/} +
} @@ -145,18 +142,28 @@ const LoginPage: React.FC = () => { } placeholder={intl.formatMessage({ id: 'login.password.placeholder' })} - iconRender={visible => (visible ? : )} + iconRender={(visible) => (visible ? : )} size="large" /> { prefix={null} suffix={ 验证码 { -
+
{intl.formatMessage({ id: 'login.remember' })} @@ -187,10 +194,16 @@ const LoginPage: React.FC = () => { - - {activeKey !== 'accountLogin' && renderRegisterLink()} + {renderRegisterLink()}
@@ -198,4 +211,4 @@ const LoginPage: React.FC = () => { ); }; -export default LoginPage; +export default connect(({ user }: { user: UserModelState }) => ({ user }))(LoginPage); diff --git a/src/servers/api/login.ts b/src/servers/api/login.ts index fdff6d4..8368a01 100644 --- a/src/servers/api/login.ts +++ b/src/servers/api/login.ts @@ -37,5 +37,37 @@ export async function supplierLogin (data: API.LoginSupplier) { data }); } +/** + * 用户信息 + */ +export async function getUserinfo() { + return request('/v1/userinfo/get', { + method: 'GET' + }); +} - +/** + * 退出 + */ +export async function Logout() { + return request('/v1/login/logout', { + method: 'POST' + }); +} +/** + * 路由 + */ +export async function findMenuList(data: any) { + return request('/v1/menu/findMenuList', { + method: 'POST', + data + }); +} +/** +* 部门 +*/ +export async function queryUserOrgAll() { + return request('/org/queryUserOrgAll', { + method: 'GET' + }); +} diff --git a/src/utils/request.ts b/src/utils/request.ts index 96bfd1f..f2e2db0 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,10 +1,11 @@ /** * request 网络请求工具 - * 更详细的 api 文档: https://github.com/umijs/umi-request + * 更详细的 api 文档: https://github.com/umijs/umi-request */ import { extend } from 'umi-request'; import { message } from 'antd'; import { history } from 'umi'; +import { useUser } from '@/hooks/useUser'; const codeMessage = { 200: '服务器成功返回请求的数据。', @@ -24,6 +25,11 @@ const codeMessage = { 504: '网关超时。', }; +// 获取Token的函数 +const getToken = () => { + return sessionStorage.getItem('token'); +}; + /** * 异常处理程序 */ @@ -58,45 +64,28 @@ const request = extend({ }); // request拦截器, 改变url 或 options. request.interceptors.request.use((url, options) => { - if ( - options.method === 'post' || - options.method === 'put' || - options.method === 'delete' || - options.method === 'get' - ) { - //如果是获取token的url,则不加token - // headers = { - // Authorization: getUserToken() == null ? null : getUserToken(), - // JwtToken: getSessionUserData() == null ? null : getSessionUserData().userId, - // ...options.headers - // } - // options.headers = headers; - } + // 获取 token + const token = sessionStorage.getItem('token'); + const userId = sessionStorage.getItem('userId'); return { - url: url, - options: { ...options }, + url, + options: { + ...options, + headers: { + ...(options.headers || {}), + ...(token ? { Authorization: `Bearer ${token}` } : {}), + ...(userId ? { Mall3Check: `${userId}` } : {}), + }, + }, }; }); //response拦截 request.interceptors.response.use(async (response) => { - const data = await response.clone().json(); - //返回请求头状态码为401 - if ( - (response.status === 401 && data?.code == '90401') || - (response.status === 500 && data?.code == '90500') - ) { + if ((response.status === 401) || (response.status === 500)) { history.replace({ - pathname: '/401', - query: { - code: '90401', - }, + pathname: '/login', }); - } else { - //2021.9.7 zhoujianlong 新增风险防控专用错误码4004 - if (data.code != undefined && data.code != '200' && data.code != '4004' && data.code !== '1') { - message.error(data.message, 3); - } } return response; }); diff --git a/src/wrappers/auth.tsx b/src/wrappers/auth.tsx index f72eb76..d6f3951 100644 --- a/src/wrappers/auth.tsx +++ b/src/wrappers/auth.tsx @@ -1,16 +1,15 @@ import React from 'react'; -import { Redirect } from 'umi'; -import { message } from 'antd'; -import { useUser } from '@/hooks/useUser'; +import { connect, Redirect, history } from 'umi'; +import { message, Modal } from 'antd'; // 权限校验 -export default (props: any) => { - const { getToken } = useUser(); - if (getToken()) { - - return
{props.children}
; +const AuthWrapper = ({ user, children }: any) => { + if (user.token) { + return
{children}
; } else { - // 提示后跳转 - message.error('请先登录'); return ; } }; + +export default connect(({ user }: any) => ({ + user, +}))(AuthWrapper);