From e4e617b835e21c885208e0e53a5896a225435a3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E7=94=B0=E5=BC=98?= <1240092443@qq.com> Date: Mon, 6 Jan 2025 18:33:17 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=AF=B9=E6=8E=A5=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E7=99=BB=E5=BD=95=E3=80=82=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=E8=81=8A=E5=A4=A9=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/components.d.ts | 3 + frontend/pnpm-lock.yaml | 55 ++ frontend/src/assets/login/QQ.png | Bin 2761 -> 0 bytes frontend/src/assets/login/dingding.png | Bin 0 -> 3651 bytes frontend/src/assets/login/gitee.png | Bin 3288 -> 3397 bytes frontend/src/assets/login/phone.png | Bin 0 -> 2658 bytes frontend/src/assets/login/qywechat.png | Bin 0 -> 4825 bytes frontend/src/assets/login/sina.png | Bin 4601 -> 0 bytes frontend/src/assets/login/wechat.png | Bin 3718 -> 0 bytes frontend/src/components/chat/Chat.vue | 428 +++++---- frontend/src/components/chat/ChatMenu.vue | 2 +- .../src/components/desktop/LockDesktop.vue | 398 +++++---- frontend/src/components/setting/SetSystem.vue | 817 ++++++++++-------- frontend/src/stores/login.ts | 15 +- frontend/src/system/config.ts | 9 +- frontend/src/system/index.ts | 76 +- frontend/src/system/type/type.ts | 14 +- go.mod | 32 +- go.sum | 45 +- 19 files changed, 1106 insertions(+), 788 deletions(-) delete mode 100644 frontend/src/assets/login/QQ.png create mode 100644 frontend/src/assets/login/dingding.png create mode 100644 frontend/src/assets/login/phone.png create mode 100644 frontend/src/assets/login/qywechat.png delete mode 100644 frontend/src/assets/login/sina.png delete mode 100644 frontend/src/assets/login/wechat.png diff --git a/frontend/components.d.ts b/frontend/components.d.ts index b9b837b..b532055 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -66,6 +66,7 @@ declare module 'vue' { EditType: typeof import('./src/components/builtin/EditType.vue')['default'] ElAside: typeof import('element-plus/es')['ElAside'] ElAvatar: typeof import('element-plus/es')['ElAvatar'] + ElB: typeof import('element-plus/es')['ElB'] ElBadge: typeof import('element-plus/es')['ElBadge'] ElButton: typeof import('element-plus/es')['ElButton'] ElCard: typeof import('element-plus/es')['ElCard'] @@ -90,6 +91,7 @@ declare module 'vue' { ElIcon: typeof import('element-plus/es')['ElIcon'] ElImage: typeof import('element-plus/es')['ElImage'] ElInput: typeof import('element-plus/es')['ElInput'] + ElItem: typeof import('element-plus/es')['ElItem'] ElMain: typeof import('element-plus/es')['ElMain'] ElMenu: typeof import('element-plus/es')['ElMenu'] ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] @@ -140,6 +142,7 @@ declare module 'vue' { MessageIcon: typeof import('./src/components/taskbar/MessageIcon.vue')['default'] Mobile: typeof import('./src/components/desktop/mobile/Mobile.vue')['default'] MobileApp: typeof import('./src/components/desktop/mobile/MobileApp.vue')['default'] + MobileTemplate: typeof import('./src/components/window/MobileTemplate.vue')['default'] MusicStore: typeof import('./src/components/builtin/MusicStore.vue')['default'] MusicViewer: typeof import('./src/components/builtin/MusicViewer.vue')['default'] NasClient: typeof import('./src/components/setting/NasClient.vue')['default'] diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 5236b5e..bea3482 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: '@liripeng/vue-audio-player': specifier: ^1.6.2 version: 1.6.2(typescript@5.6.3) + '@onlyoffice/document-editor-vue': + specifier: ^1.4.0 + version: 1.4.0(vue@3.5.12(typescript@5.6.3)) cherry-markdown: specifier: ^0.8.52 version: 0.8.52 @@ -44,6 +47,12 @@ importers: pinia-plugin-persist: specifier: ^1.0.0 version: 1.0.0(pinia@2.2.4(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3)) + swiper: + specifier: ^11.1.15 + version: 11.2.0 + vant: + specifier: ^4.9.15 + version: 4.9.15(vue@3.5.12(typescript@5.6.3)) vue: specifier: ^3.4.31 version: 3.5.12(typescript@5.6.3) @@ -317,6 +326,11 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@onlyoffice/document-editor-vue@1.4.0': + resolution: {integrity: sha512-Fg5gSc1zF6bmpRapUd7rMpm7kEDF7mQIHQKfcsfJcILdFX9bwIhnkXEucETEA9zdt92nWMS6qiAgVeT61TdCyw==} + peerDependencies: + vue: ^3.0.0 + '@parcel/watcher-android-arm64@2.4.1': resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} engines: {node: '>= 10.0.0'} @@ -533,6 +547,14 @@ packages: '@types/web-bluetooth@0.0.16': resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + '@vant/popperjs@1.3.0': + resolution: {integrity: sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw==} + + '@vant/use@1.6.0': + resolution: {integrity: sha512-PHHxeAASgiOpSmMjceweIrv2AxDZIkWXyaczksMoWvKV2YAYEhoizRuk/xFnKF+emUIi46TsQ+rvlm/t2BBCfA==} + peerDependencies: + vue: ^3.0.0 + '@vitejs/plugin-vue@5.1.4': resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==} engines: {node: ^18.0.0 || >=20.0.0} @@ -572,6 +594,9 @@ packages: '@vue/shared@3.5.12': resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + '@vueuse/core@9.13.0': resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} @@ -1270,6 +1295,10 @@ packages: stylis@4.3.4: resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} + swiper@11.2.0: + resolution: {integrity: sha512-rjjAKgDEs+grR2eQshVDCcE4KNPC7CI294nfcbV9gE8WCsLdvOYXDeZKUYevqAZZp8j5hE7kpT3dAGVKFBWlxQ==} + engines: {node: '>= 4.7.0'} + symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -1366,6 +1395,11 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + vant@4.9.15: + resolution: {integrity: sha512-XyIAnoGu2P/dc5R2NnjIJgKwfOTTVM2FJW/8WpsZA0FUBL6Lu+KHBaAY/x3IduwbowkaCIUUPViUopI2JSjbug==} + peerDependencies: + vue: ^3.0.0 + vite@5.4.9: resolution: {integrity: sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -1667,6 +1701,10 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@onlyoffice/document-editor-vue@1.4.0(vue@3.5.12(typescript@5.6.3))': + dependencies: + vue: 3.5.12(typescript@5.6.3) + '@parcel/watcher-android-arm64@2.4.1': optional: true @@ -1813,6 +1851,12 @@ snapshots: '@types/web-bluetooth@0.0.16': {} + '@vant/popperjs@1.3.0': {} + + '@vant/use@1.6.0(vue@3.5.12(typescript@5.6.3))': + dependencies: + vue: 3.5.12(typescript@5.6.3) + '@vitejs/plugin-vue@5.1.4(vite@5.4.9(@types/node@20.16.13)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))': dependencies: vite: 5.4.9(@types/node@20.16.13)(sass@1.80.3)(terser@5.36.0) @@ -1874,6 +1918,8 @@ snapshots: '@vue/shared@3.5.12': {} + '@vue/shared@3.5.13': {} + '@vueuse/core@9.13.0(vue@3.5.12(typescript@5.6.3))': dependencies: '@types/web-bluetooth': 0.0.16 @@ -2696,6 +2742,8 @@ snapshots: stylis@4.3.4: optional: true + swiper@11.2.0: {} + symbol-tree@3.2.4: {} terser@5.36.0: @@ -2811,6 +2859,13 @@ snapshots: uuid@9.0.1: optional: true + vant@4.9.15(vue@3.5.12(typescript@5.6.3)): + dependencies: + '@vant/popperjs': 1.3.0 + '@vant/use': 1.6.0(vue@3.5.12(typescript@5.6.3)) + '@vue/shared': 3.5.13 + vue: 3.5.12(typescript@5.6.3) + vite@5.4.9(@types/node@20.16.13)(sass@1.80.3)(terser@5.36.0): dependencies: esbuild: 0.21.5 diff --git a/frontend/src/assets/login/QQ.png b/frontend/src/assets/login/QQ.png deleted file mode 100644 index 715df9b7a113040480f0460ec2698faa9eedfc3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2761 zcmZ{m`#;m|AIGoH*f6JI=BzEMk*JkW$sEQU%W~MdBjlJv3n8ht><&52Dw=YpkkEuA z9Vo|=Lvo0+yXlTbROpt&cl`n1AFk_lJ+Alb`tA9;9jUkfkVV{e!C;{q;j zN5Gzpa9m+|Jbi8Oyo)Yg`&%VachmxN5YK?gEB|8d6=|k2K#enDhtL2eWWvBDiNl3X z5P{5%xMiFI1B5P{-LD96Q0ipTn`;9Bu79ywAQuKGw>5&Civh!l&@WTx1OdIl^t!FC zfOu=$N@UaHDqPq`e##eft%MeDi;by4ZwQ3cOiy4uQHtUg+Zm=;V#KCS!2ezDms(wG zf&srtwwFhoS9Y21?gtq&vOe9qa5iD$NnX8G7K2Cfw%(~H+^-?1g(1n2Gb0r%jDSK7GuGi%rvbn3Ch@K{jwRpn7Kg!)12U| z!Z>;Wk~1-F$Ot&KRZd>=jYm@(PPR*iG4B>3W2@VEF$uvM&_}2>;{^`)d?6@&mz43Mhx|Qnr{B0|FZBFE2}Yhu?w` zmOxfZY(L!#7&QcnmxNIZeZY@>U<+djah;uu@v^he`<_qrnvCjrR@e6AMFbw=i&?VK9Y}yRt zuy?xHp-zG$2GxD{bZ7GFmlOi_vBQ3h4sICN{bvd%t2;j=I4X+f3!PLuaqN!U7~;`# zRbDzhAp0c3cTHj7_0FC$o?BIvGj)4MoVUV~SUox!|QM)wW|1FJe9OIY^ z$G48~9J$K-64~bB;bAHShOmCixe+tx2LS*=xqgj7zW?OhR=WjL^DZVb&&9-_eN(2j zMPBR2QZkwdN|WCB|E8a{(2YzXA+i>E_LCs;s^zcvO-cnJduQ$w4>^!}v7mT5Ahq0! zXBSQM&JM6=&s#z{9Ztn!t&SANeLaA^srdD4{q+0yM-co(m_3xU;{#od75k=$p8_-d z%HEk8o!kbytSIf?^NhD<0u*|B0uPLe*kdKDS%mH80XDweYC-gEv<*u*=X2nO4X zel8u>GFR0sBH#Gk$pCL=$D zVtcY5g?tcyyi^VApNV>cP2NBUQv&P7MRs!?y*@#^uM)9SJ1fD` zU_ZRFPLeTsCri0}Ju=DT5949GC+@rF(1t|k=|@4AJ40jZfIlMVm3e#R8L~7HU-Nmd z&(D6(>oj+fgS3oT7+Q~pF(!-n%H_1Ax3Jc4l5(eNa0u#Sxe7RIu>-ZPb^)~p@rMg9 zn+%b~q9N9%QOz!^6PabdGU89Cyp(%4lA#_J{qnCCK)9i#+Uo^B27D!?O)BvKtG}Cc z%Mb~YQ-#r$#S8=Nw~d3y`Ql>2>2Cc(DRR6x`QZIw&9dJa_vGE->}5WuEfZ z`$=9{(b02XHSpN?Uu4s*vzr7Vg~pzeT)l05yOHB!rPCy{Z8we*BZqM`w2C(_vb}4U zAM${HYH#+E@sxY24CjXn8KW6$tKVdm>}<{t#M9lv_q6P^NWG(Tlp;`%Tuf?dIg_4*^@i3^f#ekD%9Fh1+E1`GN)Rw|D_~w7@C~a0#&rP;7m!zm$ z!2Ktz{hSGmGl@ z5Qq#Ja$+Wz4eg~W6CW~z0}m}%JAMhTsTwU0t>Dn2Ah@wh?D&!t=~g1;86Ku z>`+j<)?3xOLuflB`sq~cTYAq^$12MRiC5;FYz#fb5hmB9_*D)c1~va`t~{bd;uZK>x&Cg!$-im|x zfj)6c%aS|A@qE$up#9K<<4@cS6G-1u1|O!s3gp65?{bBtzgN-C^VE<4t@RrTsFo=o4V~ z4O-JbAYVz7Dfy=;KbMYwSs#4~WA`Bz<*I+nd8pINNh`UehbsSszl>XpHM+M~YBP-R zqY?jPV&U^ryI|?gsJCiVqK-d;R!8nVwW+--XrBZW$_i-o;A;J zZa9sYCklO1s%a|b4mb`Zxc!szd$UBWlJE&=J2%S1)#I2e7dW`>QR^aXnoJ2i!i$$UD>vIUWj(5_>H<_NDEg zvurch*X!Au{ih E2mQ#yX8-^I diff --git a/frontend/src/assets/login/dingding.png b/frontend/src/assets/login/dingding.png new file mode 100644 index 0000000000000000000000000000000000000000..d9150194ba220a5363915ccc882881bd471d8fc1 GIT binary patch literal 3651 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/login/gitee.png b/frontend/src/assets/login/gitee.png index 8d8c1224c6169486ac5409c45d2430a7db0a3d08..b218efea5368fc009e86d654d4afaca2067ec120 100644 GIT binary patch delta 3381 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 FV1j=Hw(9@@ diff --git a/frontend/src/assets/login/phone.png b/frontend/src/assets/login/phone.png new file mode 100644 index 0000000000000000000000000000000000000000..f00f2b7651cb8410c970a9234f9747972b10e640 GIT binary patch literal 2658 zcmeHJS5%V;7LE`lAdElKix?p2K!{*MF(|@M3)Q8Vpdo-j1a%-NJs3cKm@LiEi-e+p ziXf4q#9=`C%F;!nNWvfkh$t2!5h=>V$9>p`ecG3Kxc7edeCK<(_uO;Om+pRoASa_P z1B1cjoE+^u#dY9EAa;p!!zoUMxa^4ZB-p?>qnb-Fn2e^A9e6U%?|nH)(=b+2+2p=F|k zEWB3hpIeEEdLbt2(djC1WMjUylm^23jQI|DK#cV(Er}0s`bKMI>^~+};$0I;^Ep8h zzT}vM4dbj=pFOy>mryh~J#ortBMRei6}6P_dfjEI#>}Hmh1wA~Jn@@rr_y; zGk|vycYEY0ITOW`5ia{CjpCW>?VovPii=e4{hpFn&hZ3DtURx(<{*`#8VfL|x>=eG z#yZoubqez@&(C=0Nc+}iS$8^1`Tr3$B$%#q21wb0m7^AZHyTJps4@OXY2(f|a-h;3 z2QeXm8|7>7zN^DS^t_!7Yb{#(*zZvsJsNB|d8md#_6u&NAG`1&jHCoLb_kCUhgR`x zdj4?zd>mn)3-U7^0cFW$v|-_7#nesC;IL^i!5%1Xda^`;11OdAthqcG~R`-X`;E)^`IUt3a6Ex`I=UtX3YC60rb(d<{t&q zUPNwV+`hb2h9+Hqns1z~y^l>tA*$>meA#MMV0N!rK%%r&WGj*3eopT2np{{w2)Day z_+yJLfKh5Csdwtvxou0OA<1@#sugzCRFo13V5$UM+h01us@1{1GEDKAQL8@V0|w@s zHk#L!N#2QAq1%XzW{rM`Q;!hM)J9ewpHh@szSf*FEdHsPH8)EviIP7#6%k14iBXr z_TeC=fOB64gfyv(#y3^+d+f za~W`gB0a~RI)vFAit16qc-3WJ2<>Qy&trLom+AZ5C9KT6a|`8u>Cx+;13_jkku7La ztcZyzDtI#bCs;6R6+sIei%rNq8|T&(7#gbrE=$(*TZ@04dx>m+1q_Gh8^f~W6aZ}i;ScsoJ8-kA{B>_;r6YdbF277~M0uH7Ojz|+xb3xiE= zchsB!)GegfV3YRqzL?!$pbWMw@>o>iVBmb`*7tIIoTxP!DGJ85hTuurZZkdM4*=@2 z$zATD7jK)ifp{e_C;s3@NyP%ivhZPDQC93Mn zf;a&Hy&? z+m_)}_uhz;4^iWy-MlH_s+rJK;R&@m~2|%rQsL zZtBSNuRZ)aes4qkPOw0LYx%TdaN3k2(<9B8{rAy@S+rshj$)1;@LiWJP7P@>sl*m{sN^YKr#RT literal 0 HcmV?d00001 diff --git a/frontend/src/assets/login/qywechat.png b/frontend/src/assets/login/qywechat.png new file mode 100644 index 0000000000000000000000000000000000000000..1a8d327a6c9ae713d8d70eabaa8063fce75ce100 GIT binary patch literal 4825 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 diff --git a/frontend/src/assets/login/wechat.png b/frontend/src/assets/login/wechat.png deleted file mode 100644 index e0c0b23ba6b84ac701655052bf5c490a36a95448..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3718 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 D>FAtJ diff --git a/frontend/src/components/chat/Chat.vue b/frontend/src/components/chat/Chat.vue index f2a1f2e..2fcfac3 100644 --- a/frontend/src/components/chat/Chat.vue +++ b/frontend/src/components/chat/Chat.vue @@ -1,46 +1,46 @@ diff --git a/frontend/src/components/chat/ChatMenu.vue b/frontend/src/components/chat/ChatMenu.vue index d7cb073..122c410 100644 --- a/frontend/src/components/chat/ChatMenu.vue +++ b/frontend/src/components/chat/ChatMenu.vue @@ -8,7 +8,7 @@ const store = useChatStore(); @@ -153,7 +172,7 @@ import { getSystemConfig, setSystemConfig } from "@/system/config"; import router from "@/system/router"; import { RestartApp } from "@/util/goutil"; - import { notifyError } from "@/util/msg"; + import { notifyError, notifySuccess } from "@/util/msg"; import { onMounted, ref, watchEffect } from "vue"; import { useRoute } from "vue-router"; const route = useRoute(); @@ -164,19 +183,52 @@ const lockClassName = ref("screen-show"); const isRegisterMode = ref(false); + onMounted(() => { + getThirdpartyList(); + }); + + const getThirdpartyList = async () => { + const result = await fetch( + config.userInfo.url + "/user/thirdparty/list" + ); + if (result.ok) { + const data = await result.json(); + console.log(data, "data"); + } + }; + + const setPhone = async () => { + console.log("123"); + const res = await fetch(config.userInfo.url + "/user/editdata", { + method: "POST", + body: JSON.stringify({ + phone: userName.value, + }), + headers: { + ClientID: store.tempClientId, + Authorization: store.tempToken, + }, + }); + if (res.ok) { + notifySuccess("手机号设置成功"); + } else { + notifyError("手机号设置失败"); + } + }; + const thirdPartyPlatforms = [ - // { - // name: "wechat", - // icon: new URL("@/assets/login/wechat.png", import.meta.url).href, - // }, - // { - // name: "qq", - // icon: new URL("@/assets/login/qq.png", import.meta.url).href, - // }, - // { - // name: "sina", - // icon: new URL("@/assets/login/sina.png", import.meta.url).href, - // }, + { + name: "qywechat", + icon: new URL("@/assets/login/qywechat.png", import.meta.url).href, + }, + { + name: "dingding", + icon: new URL("@/assets/login/dingding.png", import.meta.url).href, + }, + { + name: "phone", + icon: new URL("@/assets/login/phone.png", import.meta.url).href, + }, { name: "github", icon: new URL("@/assets/login/github.png", import.meta.url).href, @@ -211,55 +263,46 @@ watchEffect(() => { const code = route.query.code; if (code) { - console.log(code, "---"); + console.log("code:", code); onLogin(); } }); - const onLogin = async () => { - //localStorage.removeItem("godoosClientId"); + async function onLogin() { if (loginCallback) { - const platform = store.ThirdPartyPlatform; + const platform = localStorage.getItem("ThirdPartyPlatform"); const code = router.currentRoute.value.query.code as string; + console.log(platform, "platform"); // 使用映射对象,将平台名称映射到相应的参数名称 const platformCodeMap: Record = { - github: "github_code", - gitee: "gitee_code", - wechat: "wechat_code", - qq: "qq_code", + github: "github", + gitee: "gitee", + wechat: "wechat", + qq: "qq", }; // 获取对应的参数名称 const codeParam = platform ? platformCodeMap[platform] : null; - let res; - if (codeParam) { - // 第三方登录统一调用 - const returnedState = router.currentRoute.value.query - .state as string; + // 根据登录类型传递参数 + const login_type = codeParam ? codeParam : "password"; + console.log(login_type, "login_type"); - if (returnedState !== store.State) { - notifyError("登录失败,请重试"); - return; - } + const param = codeParam + ? { code: code } + : { username: userName.value, password: userPassword.value }; - res = await loginCallback(userName.value, userPassword.value, { - [codeParam]: code, - }); - } else { - // 普通登录 - res = await loginCallback(userName.value, userPassword.value); - } + const res = await loginCallback(login_type, param); if (res) { - store.ThirdPartyPlatform = null; + localStorage.removeItem("ThirdPartyPlatform"); loginSuccess(); } else { notifyError("登录失败,请重试"); } } - }; + } const toggleRegister = () => { isRegisterMode.value = !isRegisterMode.value; @@ -365,36 +408,21 @@ }; const onThirdPartyLogin = async (platform: string) => { + localStorage.setItem("ThirdPartyPlatform", platform); let loginFunction: (() => Promise) | undefined; - // 当前选择的第三方登录方式 - store.ThirdPartyPlatform = platform; + switch (platform) { case "github": - // 跳转到 GitHub 授权页面 loginFunction = async function () { return await authWithGithub(); }; break; - case "wechat": - loginFunction = async function () { - return await authWithWechat(); - }; - break; - case "qq": - loginFunction = async function () { - return await authWithQQ(); - }; - break; - case "sina": - loginFunction = async function () { - return await authWithSina(); - }; - break; case "gitee": loginFunction = async function () { return await authWithGitee(); }; break; + // 其他平台的处理 default: notifyError("不支持的第三方登录平台"); return; @@ -414,7 +442,8 @@ store.State = state; // 获取当前页面url当做回调参数 const currentUrl = window.location.href; - const url = config.userInfo.url + "/github/authorize?state=" + state; + const url = + config.userInfo.url + "/user/github/authorize?state=" + state; const res: any = await fetch(url, { method: "POST", body: JSON.stringify({ @@ -461,7 +490,8 @@ store.State = state; // 获取当前页面url当做回调参数 const currentUrl = window.location.href; - const url = config.userInfo.url + "/gitee/authorize?state=" + state; + const url = + config.userInfo.url + "/user/gitee/authorize?state=" + state; const res: any = await fetch(url, { method: "POST", body: JSON.stringify({ @@ -487,6 +517,8 @@ notifyError("获取授权URL失败"); return false; } + // store.page = "phone"; + // return true; }; diff --git a/frontend/src/components/setting/SetSystem.vue b/frontend/src/components/setting/SetSystem.vue index da33df0..bafcc7c 100644 --- a/frontend/src/components/setting/SetSystem.vue +++ b/frontend/src/components/setting/SetSystem.vue @@ -2,53 +2,87 @@
-
+
- +
- + {{ t("confirm") }}
-
+
- +