From 0b7d88b74e1f9ca8628a3e5e9b7fc1a6ab16d4f3 Mon Sep 17 00:00:00 2001 From: landaiqing <3517283258@qq.com> Date: Mon, 15 Apr 2024 22:55:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B3=A8=E5=86=8C=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E6=A1=86=E6=9E=B6=E6=90=AD=E5=BB=BA=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + pnpm-lock.yaml | 163 ++++++-- src/assets/icons/corner_markers.svg | 2 + src/assets/icons/react.svg | 5 - src/assets/images/login_qrcode-landaiqing.jpg | Bin 0 -> 26492 bytes src/router/index.ts | 7 +- src/types/user/user.d.ts | 253 +++++++++++- src/utils/cookie/cookie.ts | 154 +++---- src/views/Login/index.tsx | 243 ----------- src/views/User/Login/index.less | 154 +++++++ src/views/User/Login/index.tsx | 377 ++++++++++++++++++ src/views/User/Register/index.less | 154 +++++++ src/views/User/Register/index.tsx | 256 ++++++++++++ src/vite-env.d.ts | 4 + 14 files changed, 1408 insertions(+), 365 deletions(-) create mode 100644 src/assets/icons/corner_markers.svg delete mode 100644 src/assets/icons/react.svg create mode 100644 src/assets/images/login_qrcode-landaiqing.jpg delete mode 100644 src/views/Login/index.tsx create mode 100644 src/views/User/Login/index.less create mode 100644 src/views/User/Login/index.tsx create mode 100644 src/views/User/Register/index.less create mode 100644 src/views/User/Register/index.tsx diff --git a/package.json b/package.json index cd7295a..7fd2868 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "dependencies": { "@ant-design/icons": "^5.3.6", "@ant-design/pro-components": "^2.7.0", + "@ant-design/use-emotion-css": "^1.0.4", "@types/crypto-js": "^4.2.2", "antd": "^5.16.1", "axios": "^1.6.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1185a17..f475e4c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ dependencies: '@ant-design/pro-components': specifier: ^2.7.0 version: 2.7.0(antd@5.16.1)(rc-field-form@1.44.0)(react-dom@18.2.0)(react@18.2.0) + '@ant-design/use-emotion-css': + specifier: ^1.0.4 + version: 1.0.4(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0) '@types/crypto-js': specifier: ^4.2.2 version: 4.2.2 @@ -446,13 +449,25 @@ packages: throttle-debounce: 5.0.0 dev: false + /@ant-design/use-emotion-css@1.0.4(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-PekXeeHCpSNi6ziV62gy2Yy2MijssiVMaCJbbyOmPbeZJYQmB4FecJwlB+e2WuIbSHQdM3O9pyN4Cx3GJKxJkA==} + peerDependencies: + antd: '>=5.0.0' + react: '>=17.0.0' + react-dom: '>=17.0.0' + dependencies: + '@emotion/css': 11.11.2 + antd: 5.16.1(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@babel/code-frame@7.24.2: resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.24.2 picocolors: 1.0.0 - dev: true /@babel/compat-data@7.24.1: resolution: {integrity: sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==} @@ -528,7 +543,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 - dev: true /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.3): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} @@ -566,12 +580,10 @@ packages: /@babel/helper-string-parser@7.24.1: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} @@ -597,7 +609,6 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 - dev: true /@babel/parser@7.24.1: resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} @@ -673,7 +684,6 @@ packages: '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - dev: true /@chenshuai2144/sketch-color@1.0.9(react@18.2.0): resolution: {integrity: sha512-obzSy26cb7Pm7OprWyVpgMpIlrZpZ0B7vbrU0RMbvRg0YAI890S5Xy02Aj1Nhl4+KTbi1lVYHt6HQP8Hm9s+1w==} @@ -787,14 +797,84 @@ packages: dev: true optional: true + /@emotion/babel-plugin@11.11.0: + resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + dependencies: + '@babel/helper-module-imports': 7.24.3 + '@babel/runtime': 7.24.4 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/serialize': 1.1.4 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + dev: false + + /@emotion/cache@11.11.0: + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + dependencies: + '@emotion/memoize': 0.8.1 + '@emotion/sheet': 1.2.2 + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + stylis: 4.2.0 + dev: false + + /@emotion/css@11.11.2: + resolution: {integrity: sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew==} + dependencies: + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.4 + '@emotion/sheet': 1.2.2 + '@emotion/utils': 1.2.1 + dev: false + /@emotion/hash@0.8.0: resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} dev: false + /@emotion/hash@0.9.1: + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} + dev: false + + /@emotion/memoize@0.8.1: + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + dev: false + + /@emotion/serialize@1.1.4: + resolution: {integrity: sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==} + dependencies: + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/unitless': 0.8.1 + '@emotion/utils': 1.2.1 + csstype: 3.1.3 + dev: false + + /@emotion/sheet@1.2.2: + resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} + dev: false + /@emotion/unitless@0.7.5: resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} dev: false + /@emotion/unitless@0.8.1: + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + dev: false + + /@emotion/utils@1.2.1: + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} + dev: false + + /@emotion/weak-memoize@0.3.1: + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + dev: false + /@esbuild/aix-ppc64@0.20.2: resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} @@ -1621,6 +1701,10 @@ packages: dependencies: undici-types: 5.26.5 + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: false + /@types/prop-types@15.7.12: resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} dev: true @@ -1879,7 +1963,6 @@ packages: engines: {node: '>=4'} dependencies: color-convert: 1.9.3 - dev: true /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} @@ -2117,6 +2200,15 @@ packages: - debug dev: false + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.24.4 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + dev: false + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -2267,7 +2359,6 @@ packages: /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - dev: true /camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} @@ -2298,7 +2389,6 @@ packages: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -2397,7 +2487,6 @@ packages: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 - dev: true /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -2407,7 +2496,6 @@ packages: /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -2484,6 +2572,10 @@ packages: engines: {node: ^14.18.0 || >=16.10.0} dev: true + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: false + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true @@ -2512,6 +2604,17 @@ packages: vary: 1.1.2 dev: false + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + /cosmiconfig@9.0.0(typescript@5.4.3): resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} @@ -2899,7 +3002,6 @@ packages: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - dev: true /es-abstract@1.23.2: resolution: {integrity: sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==} @@ -3052,7 +3154,6 @@ packages: /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: true /escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} @@ -3373,6 +3474,10 @@ packages: dependencies: to-regex-range: 5.0.1 + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: false + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -3644,7 +3749,6 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -3783,7 +3887,6 @@ packages: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -3828,7 +3931,6 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} @@ -3872,7 +3974,6 @@ packages: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.2 - dev: true /is-data-descriptor@1.0.1: resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} @@ -4149,7 +4250,6 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -4268,7 +4368,6 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true /loader-utils@1.4.2: resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} @@ -4841,7 +4940,6 @@ packages: engines: {node: '>=6'} dependencies: callsites: 3.1.0 - dev: true /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} @@ -4851,7 +4949,6 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true /parse-node-version@1.0.1: resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} @@ -4891,7 +4988,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-to-regexp@2.4.0: resolution: {integrity: sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==} @@ -4900,7 +4996,6 @@ packages: /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - dev: true /path-type@5.0.0: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} @@ -5794,7 +5889,6 @@ packages: /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - dev: true /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} @@ -5806,6 +5900,15 @@ packages: deprecated: https://github.com/lydell/resolve-url#deprecated dev: false + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true @@ -6392,6 +6495,10 @@ packages: - typescript dev: true + /stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + dev: false + /stylis@4.3.1: resolution: {integrity: sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==} dev: false @@ -6413,7 +6520,6 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 - dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -6432,7 +6538,6 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /svg-baker@1.7.0: resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==} @@ -6554,7 +6659,6 @@ packages: /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: true /to-object-path@0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} @@ -7039,6 +7143,11 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/src/assets/icons/corner_markers.svg b/src/assets/icons/corner_markers.svg new file mode 100644 index 0000000..9493d80 --- /dev/null +++ b/src/assets/icons/corner_markers.svg @@ -0,0 +1,2 @@ + + diff --git a/src/assets/icons/react.svg b/src/assets/icons/react.svg deleted file mode 100644 index 6d22363..0000000 --- a/src/assets/icons/react.svg +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/src/assets/images/login_qrcode-landaiqing.jpg b/src/assets/images/login_qrcode-landaiqing.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f2525a9f682b5fbffa9e101fc26f5cc493f3c1b7 GIT binary patch literal 26492 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 = { + success?: boolean; + code?: number; + codeMessage?: string; + errorMessage?: Map; + showType?: ErrorShowType; + data: T + } + type CurrentUser = { + name?: string; + avatar?: string; + userid?: string; + email?: string; + signature?: string; + title?: string; + group?: string; + tags?: { key?: string; label?: string }[]; + notifyCount?: number; + unreadCount?: number; + country?: string; + access?: string; + geographic?: { + province?: { label?: string; key?: string }; + city?: { label?: string; key?: string }; + }; + address?: string; + phone?: string; + }; + + type LoginResult = ResponseStructure & { + data?: { + token?: string; + expireDateTime?: number; + expire?: number; + timeUnit?: any; + } + }; + + type PageParams = { + pageNum?: number; + pageSize?: number; + }; + + type RuleListItem = { + key?: number; + disabled?: boolean; + href?: string; + avatar?: string; + name?: string; + owner?: string; + desc?: string; + callNo?: number; + status?: number; + updatedAt?: string; + createdAt?: string; + progress?: number; + }; + + type RuleList = { + data?: RuleListItem[]; + /** 列表的内容总数 */ + total?: number; + success?: boolean; + }; + interface ResponseStructure { + success?: boolean; + code?: number; + codeMessage?: string; + errorMessage?: Map; + showType?: ErrorShowType; + } + type + FakeCaptcha = ResponseStructure & { + data?: boolean; + }; + + type PhonePasswordLoginParams = { + clientId?: string; + phone?: string; + password?: string; + code?: string; + autoLogin?: boolean; + }; + + type PhoneSmsCodeLoginParams = { + clientId?: string; + phone?: string; + smsCode?: string; + autoLogin?: boolean; + }; + + type ErrorResponse = { + /** 业务约定的错误码 */ + errorCode: string; + /** 业务上的错误信息 */ + errorMessage?: Map; + /** 业务上的请求是否成功 */ + success?: boolean; + }; + + type NoticeIconList = { + data?: NoticeIconItem[]; + /** 列表的内容总数 */ + total?: number; + success?: boolean; + }; + + type NoticeIconItemType = 'notification' | 'message' | 'event'; + + type NoticeIconItem = { + id?: string; + extra?: string; + key?: string; + read?: boolean; + avatar?: string; + title?: string; + status?: string; + datetime?: string; + description?: string; + type?: NoticeIconItemType; + }; + + type GenerateMpRegCode = { + data?: { + regCode?: string; + qrCodeUrl?: string; + expireSeconds?: number; + ticket?: string; + url?: string; + }; + } + + type GetClientId = { + data?: string; + } + + type GenerateBase64Code = { + data?: string; + } + + type GetClientToken = { + data?: { + token?: string; + expireDateTime?: number; + expire?: number; + }; + } + + type PhoneRegisterRequest = { + clientId?: string; + phone?: string; + password?: string; + confirmPassword?: string; + smsCode?: number; + } + + type PhoneRegisterResponse = ResponseStructure & { + data?: number; + } + + type CustomValidate = { + validateStatus?: boolean; + msg?: string; + formValue?: any; + code?: number; + codeMessage?: string; + errors?: Map; + validateFields: ValidateFields; + } + + type ListAccountBookVo = ResponseStructure & { + data?: { + total?: number; + list?: ListAccountBookVoItem[] + } + } + type ListAccountBookVoItem = { + id: number; + companyName?: string; + valueAddedTaxCate?: string; + accountingStandard?: string; + startTime?: Date; + createTime?: Date; + enableVoucherVerify?: boolean; + disable?: boolean; + } + type GetAccountBookVo = { + id?: number; + companyName?: string; + unifiedSocialCreditCode?: string; + industryId?: number; + valueAddedTaxCate?: number; + enableVoucherVerify?: boolean; + startTime?: Date; + accountingStandard?: number; + enableFixedAssets?: boolean; + enableCapital?: boolean; + enablePsi?: boolean; + } + type DataDictionaryVo = { + dataCode?: string; + dataValue?: string; + } + + type ListTreeMenuVo = { + id?: number; + key?: string; + title?: any; + icon?: string; + checked?: boolean; + children?: ListTreeMenuVo[]; + level?: number; + }; + + type ListTreeSelectMenuVo = { + id?: number; + value?: string; + title?: any; + children?: ListTreeMenuVo[]; + } + + type ListRoleVo = { + id: number; + roleName?: string; + disable?: boolean; + } + + type ListSubject = { + id: number; + pid?: number; + valueAddedTaxCate?: string; + accountingStandard?: string; + startTime?: Date; + createTime?: Date; + enableVoucherVerify?: boolean; + disable?: boolean; + } } -export { user } diff --git a/src/utils/cookie/cookie.ts b/src/utils/cookie/cookie.ts index ddbb997..0743307 100644 --- a/src/utils/cookie/cookie.ts +++ b/src/utils/cookie/cookie.ts @@ -1,85 +1,85 @@ /** 配置 */ interface Options { - /** key前缀 */ - prefix?: string; + /** key前缀 */ + prefix?: string } /** 默认配置 */ const defaultOptions: Options = { - prefix: "" -}; - -class CookieStorage { - private prefix: string; - - constructor(options: Options = defaultOptions) { - const { prefix } = options; - this.prefix = prefix ?? ""; - } - - /** - * @description: 设置cookie - * @param {string} key 键 - * @param {any} value 值 - * @param {number} expires 过期时间s毫秒,不传默认2年有效 - * @Date: 2023-05-17 18:10:34 - * @Author: mulingyuer - */ - public setItem(key: string, value: string | number, expires?: number): void { - const timestamp = Date.now(); - if (typeof expires === "number") { - expires = timestamp + expires; - } else { - expires = timestamp + 2 * 365 * 24 * 60 * 60 * 1000; - } - document.cookie = `${this.prefix}${key}=${value};expires=${new Date(expires).toUTCString()}`; - } - - /** - * @description: 获取cookie - * @param {string} key 键 - * @Date: 2023-05-17 18:31:50 - * @Author: mulingyuer - */ - public getItem(key: string): string | undefined { - const cookies = document.cookie.split("; "); - let val: string | undefined = undefined; - cookies.find((item) => { - const [k, v] = item.split("="); - if (k === `${this.prefix}${key}`) { - val = v; - return true; - } - return false; - }); - - return val; - } - - /** - * @description: 删除指定key的cookie - * @param {string} key 键 - * @Date: 2023-05-17 18:32:56 - * @Author: mulingyuer - */ - public removeItem(key: string): void { - this.setItem(key, "", -1); - } - - /** - * @description: 清空所有cookie - * @Date: 2023-05-17 23:13:04 - * @Author: mulingyuer - */ - public clear(): void { - const cookies = document.cookie.split("; "); - cookies.forEach((item) => { - const [k] = item.split("="); - this.removeItem(k); - }); - } + prefix: '', } -const cookieStorage = new CookieStorage(); +class CookieStorage { + private prefix: string -export default cookieStorage; -export { CookieStorage }; + constructor(options: Options = defaultOptions) { + const { prefix } = options + this.prefix = prefix ?? '' + } + + /** + * @description: 设置cookie + * @param {string} key 键 + * @param {any} value 值 + * @param {number} expires 过期时间s毫秒,不传默认2年有效 + * @Date: 2023-05-17 18:10:34 + * @Author: mulingyuer + */ + public setItem(key: string, value: string | number, expires?: number): void { + const timestamp = Date.now() + if (typeof expires === 'number') { + expires = timestamp + expires + } else { + expires = timestamp + 2 * 365 * 24 * 60 * 60 * 1000 + } + document.cookie = `${this.prefix}${key}=${value};expires=${new Date(expires).toUTCString()}` + } + + /** + * @description: 获取cookie + * @param {string} key 键 + * @Date: 2023-05-17 18:31:50 + * @Author: mulingyuer + */ + public getItem(key: string): string | undefined { + const cookies = document.cookie.split('; ') + let val: string | undefined = undefined + cookies.find((item) => { + const [k, v] = item.split('=') + if (k === `${this.prefix}${key}`) { + val = v + return true + } + return false + }) + + return val + } + + /** + * @description: 删除指定key的cookie + * @param {string} key 键 + * @Date: 2023-05-17 18:32:56 + * @Author: mulingyuer + */ + public removeItem(key: string): void { + this.setItem(key, '', -1) + } + + /** + * @description: 清空所有cookie + * @Date: 2023-05-17 23:13:04 + * @Author: mulingyuer + */ + public clear(): void { + const cookies = document.cookie.split('; ') + cookies.forEach((item) => { + const [k] = item.split('=') + this.removeItem(k) + }) + } +} + +const cookieStorage = new CookieStorage() + +export default cookieStorage +export { CookieStorage } diff --git a/src/views/Login/index.tsx b/src/views/Login/index.tsx deleted file mode 100644 index 7b5c67b..0000000 --- a/src/views/Login/index.tsx +++ /dev/null @@ -1,243 +0,0 @@ -import { - GithubOutlined, - GitlabOutlined, - LockOutlined, - MobileOutlined, - QqOutlined, - UserOutlined, - WechatOutlined, -} from '@ant-design/icons' -import { - LoginFormPage, - ProFormCaptcha, - ProFormCheckbox, - ProFormText, -} from '@ant-design/pro-components' -import { Divider, Space, Tabs, message, Button } from 'antd' -import { CSSProperties } from 'react' -import { useState } from 'react' -import logo from '@/assets/icons/schisandra.svg' -import background from '@/assets/images/background.png' -import { observer } from 'mobx-react' -// import useStore from '@/utils/store/useStore.tsx' -type LoginType = 'account' | 'phone' - -const iconStyles: CSSProperties = { - color: 'rgba(0, 0, 0, 0.2)', - fontSize: '18px', - verticalAlign: 'middle', - cursor: 'pointer', -} - -export default observer(() => { - // const store = useStore('user') - - const items = [ - { label: '账户密码登录', key: 'account' }, - { label: '手机号登录', key: 'phone' }, - ] - const [loginType, setLoginType] = useState('account') - - const onSubmit = async (formData: object) => { - console.log(formData) - } - return ( -
- - 去看看 - - ), - }} - actions={ -
- - - 其他登录方式 - - - -
- -
-
- -
-
- -
-
- -
-
-
- }> - setLoginType(activeKey as LoginType)}> - - {loginType === 'account' && ( - <> - , - }} - placeholder={'请输入账号/邮箱/电话号码'} - rules={[ - { - required: true, - message: '请输入用户名!', - }, - ]} - /> - , - }} - placeholder={'请输入密码'} - rules={[ - { - required: true, - message: '请输入密码!', - }, - ]} - /> - - )} - {loginType === 'phone' && ( - <> - , - }} - name='mobile' - placeholder={'手机号'} - rules={[ - { - required: true, - message: '请输入手机号!', - }, - { - pattern: /^1\d{10}$/, - message: '手机号格式错误!', - }, - ]} - /> - , - }} - captchaProps={{ - size: 'large', - }} - placeholder={'请输入验证码'} - captchaTextRender={(timing, count) => { - if (timing) { - return `${count} ${'获取验证码'}` - } - return '获取验证码' - }} - name='captcha' - rules={[ - { - required: true, - message: '请输入验证码!', - }, - ]} - onGetCaptcha={async () => { - message.success('获取验证码成功!验证码为:1234') - }} - /> - - )} -
- - 自动登录 - - 忘记密码 -
-
-
- ) -}) diff --git a/src/views/User/Login/index.less b/src/views/User/Login/index.less new file mode 100644 index 0000000..284cbf9 --- /dev/null +++ b/src/views/User/Login/index.less @@ -0,0 +1,154 @@ + +.container { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + height: 100vh; + width: 100vw; + overflow: auto; +} + +.login_content { + // margin-top: 40px; + // position: relative; + width: 782px; + background-color: rgb(255, 255, 255); + // height: 100%; + overflow: hidden; + box-shadow: rgb(0 0 0 / 15%) 0px 2px 15px; + //float: right; + //height: 538px; + position: relative; + padding: 30px 0 30px 0; + +} + +.go_to_register { + cursor: pointer; + height: 70px; + width: 70px; + background-image: url('@/assets/icons/corner_markers.svg'); + position: absolute; + top: 0px; + right: 0px; + text-align: right; +} + +.go_to_register span { + font-size: 14px; + color: rgb(255, 255, 255); + font-weight: 500; + position: relative; + top: 10px; + right: 7px; +} + +.lang { + width: 100%; + height: 40px; + line-height: 44px; + text-align: right; + + :global(.ant-dropdown-trigger) { + margin-right: 24px; + } +} + +.content { + //flex: 1; + //padding: 32px 0; + + //box-sizing: border-box; + //margin: 60px auto; + //display: flex; + //align-items: center; + //justify-content: center; + //flex-direction: column; + //height: 100vh; + //overflow: auto; + + +} + +@media (min-width: 768px) { + .container { + background-image: url('@/assets/images/background.png'); + background-size: cover; + } + + .content { + padding: 32px 0 24px; + } + + .content img { + text-align: center; + } +} + +.icon { + margin-left: 8px; + color: rgba(0, 0, 0, 0.2); + font-size: 24px; + vertical-align: middle; + cursor: pointer; + transition: color 0.3s; + + &:hover { + color: aquamarine; + } +} + +.mp_code { + padding: 0px 60px; + width: 361px; + height: 490px; + background-color: rgb(255, 255, 255); + border-right: 0.5px solid rgb(196, 203, 215); +} + +.mp_code_title { + margin-top: 50px; + font-weight: 500; + font-size: 24px; + color: rgb(24, 24, 24) +} + +.mp_code_img { + margin-top: 10px; +} + +.alert { + margin-top: 25px; + width: 250px; + padding: 5px; + text-align: left; + vertical-align: middle; +} + +.login_form { + // height: 100%; + // float: left; + margin: 0; + padding: 0 32px; +} + +.mp_tips { + font-weight: bold; + color: rgb(7, 221, 7); +} + +.logo span { + position: relative; + top: 2px; + color: rgba(0, 0, 0, .85); + font-weight: 600; + font-size: 33px; +} + +.subTitle { + margin-top: 12px; + margin-bottom: 10px; + color: rgba(0, 0, 0, .45); + font-size: 14px; +} diff --git a/src/views/User/Login/index.tsx b/src/views/User/Login/index.tsx new file mode 100644 index 0000000..a5004fb --- /dev/null +++ b/src/views/User/Login/index.tsx @@ -0,0 +1,377 @@ +import { + BarcodeOutlined, + GithubOutlined, + GitlabOutlined, + LockOutlined, + MobileOutlined, + QqOutlined, + UserOutlined, + WechatOutlined, +} from '@ant-design/icons' +import { ProFormCaptcha, ProFormCheckbox, ProFormText } from '@ant-design/pro-components' +import { Divider, Space, Tabs, message, Image, Alert, Form, Button } from 'antd' +import { CSSProperties } from 'react' +import { useState } from 'react' +import logo from '@/assets/icons/schisandra.svg' +import qrCode from '@/assets/images/login_qrcode-landaiqing.jpg' +import './index.less' +import { observer } from 'mobx-react' +// import useStore from '@/utils/store/useStore.tsx' +type LoginType = 'account' | 'phone' + +const iconStyles: CSSProperties = { + color: 'rgba(0, 0, 0, 0.2)', + fontSize: '18px', + verticalAlign: 'middle', + cursor: 'pointer', +} + +export default observer(() => { + const [generateMpRegCodeData, setGenerateMpRegCodeData] = useState({}) + const [form] = Form.useForm() + const [base64Code, setBase64Code] = useState({ data: '' }) + const clickGetBase64CodeMethod = async () => { + await getBase64CodeMethod() + } + const CodeImg = ( + + ) + const getBase64CodeMethod = async () => {} + + const items = [ + { + label: ( + + + 账户登录 + + ), + key: 'account', + }, + { + label: ( + + + 短信登录 + + ), + key: 'phone', + }, + ] + const [loginType, setLoginType] = useState('account') + + const onSubmit = async (formData: object) => { + console.log(formData) + } + return ( +
+
+ + + + + 微信扫码登录 + + 微信扫码关注公众号)} + description={ +
+ + 微信扫码 + 关注公众号 + +
+ 登录更快更安全 +
+ } + // type="success" + showIcon={true} + className={'alert'} + icon={} + /> +
+
+
+ + + logo + 五味子云相册 + +
随时随地分享你的美好瞬间
+
+ + + setLoginType(activeKey as LoginType) + }> + + {loginType === 'account' && ( + <> + , + }} + placeholder={'请输入账号/邮箱/电话号码'} + rules={[ + { + required: true, + message: '请输入用户名!', + }, + ]} + /> + , + }} + placeholder={'请输入密码'} + rules={[ + { + required: true, + message: '请输入密码!', + }, + { + pattern: + /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z\\W]{6,18}$/, + message: + '密码长度需在6~18位字符,且必须包含字母和数字!', + }, + ]} + /> + , + autoComplete: 'off', + }} + placeholder='请输入图形验证码' + rules={[ + { + required: true, + message: '请输入图形验证码!', + }, + { + pattern: /^[a-zA-Z0-9]{5}$/, + message: '图形验证码格式不正确', + }, + ]} + /> + + )} + {loginType === 'phone' && ( + <> + , + autoComplete: 'off', + }} + name='mobile' + placeholder={'请输入手机号'} + rules={[ + { + required: true, + message: '请输入手机号!', + }, + { + pattern: /^1\d{10}$/, + message: '手机号格式错误!', + }, + ]} + /> + , + autoComplete: 'off', + }} + placeholder='请输入图形验证码' + rules={[ + { + required: true, + message: '请输入图形验证码!', + }, + { + pattern: /^[a-zA-Z0-9]{5}$/, + message: '图形验证码格式不正确', + }, + ]} + /> + , + }} + captchaProps={{ + size: 'large', + }} + placeholder={'请输入验证码'} + captchaTextRender={(timing, count) => { + if (timing) { + return `${count} ${'获取验证码'}` + } + return '获取验证码' + }} + name='captcha' + rules={[ + { + required: true, + message: '请输入验证码!', + }, + ]} + onGetCaptcha={async () => { + message.success('获取验证码成功!验证码为:1234') + }} + /> + + )} +
+ + 自动登录 + + 忘记密码 +
+ + + +
+ + + 其他登录方式 + + + +
+ +
+
+ +
+
+ +
+
+ +
+
+
+ + + 注册 + +
+
+
+
+ ) +}) diff --git a/src/views/User/Register/index.less b/src/views/User/Register/index.less new file mode 100644 index 0000000..284cbf9 --- /dev/null +++ b/src/views/User/Register/index.less @@ -0,0 +1,154 @@ + +.container { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + height: 100vh; + width: 100vw; + overflow: auto; +} + +.login_content { + // margin-top: 40px; + // position: relative; + width: 782px; + background-color: rgb(255, 255, 255); + // height: 100%; + overflow: hidden; + box-shadow: rgb(0 0 0 / 15%) 0px 2px 15px; + //float: right; + //height: 538px; + position: relative; + padding: 30px 0 30px 0; + +} + +.go_to_register { + cursor: pointer; + height: 70px; + width: 70px; + background-image: url('@/assets/icons/corner_markers.svg'); + position: absolute; + top: 0px; + right: 0px; + text-align: right; +} + +.go_to_register span { + font-size: 14px; + color: rgb(255, 255, 255); + font-weight: 500; + position: relative; + top: 10px; + right: 7px; +} + +.lang { + width: 100%; + height: 40px; + line-height: 44px; + text-align: right; + + :global(.ant-dropdown-trigger) { + margin-right: 24px; + } +} + +.content { + //flex: 1; + //padding: 32px 0; + + //box-sizing: border-box; + //margin: 60px auto; + //display: flex; + //align-items: center; + //justify-content: center; + //flex-direction: column; + //height: 100vh; + //overflow: auto; + + +} + +@media (min-width: 768px) { + .container { + background-image: url('@/assets/images/background.png'); + background-size: cover; + } + + .content { + padding: 32px 0 24px; + } + + .content img { + text-align: center; + } +} + +.icon { + margin-left: 8px; + color: rgba(0, 0, 0, 0.2); + font-size: 24px; + vertical-align: middle; + cursor: pointer; + transition: color 0.3s; + + &:hover { + color: aquamarine; + } +} + +.mp_code { + padding: 0px 60px; + width: 361px; + height: 490px; + background-color: rgb(255, 255, 255); + border-right: 0.5px solid rgb(196, 203, 215); +} + +.mp_code_title { + margin-top: 50px; + font-weight: 500; + font-size: 24px; + color: rgb(24, 24, 24) +} + +.mp_code_img { + margin-top: 10px; +} + +.alert { + margin-top: 25px; + width: 250px; + padding: 5px; + text-align: left; + vertical-align: middle; +} + +.login_form { + // height: 100%; + // float: left; + margin: 0; + padding: 0 32px; +} + +.mp_tips { + font-weight: bold; + color: rgb(7, 221, 7); +} + +.logo span { + position: relative; + top: 2px; + color: rgba(0, 0, 0, .85); + font-weight: 600; + font-size: 33px; +} + +.subTitle { + margin-top: 12px; + margin-bottom: 10px; + color: rgba(0, 0, 0, .45); + font-size: 14px; +} diff --git a/src/views/User/Register/index.tsx b/src/views/User/Register/index.tsx new file mode 100644 index 0000000..72f658b --- /dev/null +++ b/src/views/User/Register/index.tsx @@ -0,0 +1,256 @@ +import { BarcodeOutlined, LockOutlined, MobileOutlined, WechatOutlined } from '@ant-design/icons' +import { ProFormCaptcha, ProFormText } from '@ant-design/pro-components' +import { Space, Tabs, message, Image, Alert, Form, Button } from 'antd' +import { useState } from 'react' +import logo from '@/assets/icons/schisandra.svg' +// import background from '@/assets/images/background.png' +import qrCode from '@/assets/images/login_qrcode-landaiqing.jpg' +import './index.less' +import { observer } from 'mobx-react' +// import useStore from '@/utils/store/useStore.tsx' +type LoginType = 'phone' + +export default observer(() => { + const [generateMpRegCodeData, setGenerateMpRegCodeData] = useState({}) + const [form] = Form.useForm() + const [base64Code, setBase64Code] = useState({ data: '' }) + const clickGetBase64CodeMethod = async () => { + await getBase64CodeMethod() + } + const CodeImg = ( + + ) + const getBase64CodeMethod = async () => {} + + const items = [ + { + key: 'phone', + label: ( + + + 手机号注册 + + ), + }, + ] + const [loginType, setLoginType] = useState('phone') + + const onSubmit = async (formData: object) => { + console.log(formData) + } + return ( +
+
+ + + + + 微信扫码登录 + + 微信扫码关注公众号)} + description={ +
+ + 微信扫码 + 关注公众号 + +
+ 登录更快更安全 +
+ } + // type="success" + showIcon={true} + className={'alert'} + icon={} + /> +
+
+
+ + + logo + 五味子云相册 + +
随时随地分享你的美好瞬间
+
+ + + setLoginType(activeKey as LoginType) + }> + + <> + , + autoComplete: 'off', + }} + name='phone' + placeholder='请输入手机号!' + rules={[ + { + required: true, + message: '请输入手机号!', + }, + { + pattern: /^1\d{10}$/, + message: '手机号格式错误!', + }, + ]} + /> + + , + }} + placeholder='请输入密码' + rules={[ + { + required: true, + message: '请输入密码!', + }, + { + pattern: + /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z\\W]{6,18}$/, + message: + '密码长度需在6~18位字符,且必须包含字母和数字!', + }, + ]} + /> + + , + }} + placeholder='请再次确认密码' + rules={[ + { + required: true, + message: '请再次确认密码!', + }, + ({ getFieldValue }) => ({ + validator(_, value) { + if (!value || getFieldValue('password') === value) { + return Promise.resolve() + } + return Promise.reject( + new Error('两次输入的密码不一致!'), + ) + }, + }), + ]} + /> + + , + autoComplete: 'off', + }} + placeholder='请输入图形验证码' + rules={[ + { + required: true, + message: '请输入图形验证码!', + }, + { + pattern: /^[a-zA-Z0-9]{5}$/, + message: '图形验证码格式不正确!', + }, + ]} + /> + + , + }} + captchaProps={{ + size: 'large', + }} + placeholder={'请输入验证码'} + captchaTextRender={(timing, count) => { + if (timing) { + return `${count} ${'获取验证码'}` + } + return '获取验证码' + }} + name='captcha' + rules={[ + { + required: true, + message: '请输入验证码!', + }, + ]} + onGetCaptcha={async () => { + message.success('获取验证码成功!验证码为:1234') + }} + /> + + + + + 登录 + +
+
+
+
+ ) +}) diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 4dafaa8..7985ae1 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -15,6 +15,10 @@ declare module '*.svg' { const content: any export default content } +declare module '.*' { + const value: any + export default value +} declare module '*.tsx' declare module '*.svg' declare module '*.png'