From b7b8202e3ecb7f720eefd7a226b2ee8166fc5057 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期四, 04 六月 2026 14:57:17 +0800
Subject: [PATCH] 青岛移动端维护
---
pages/login/Login.vue | 287 +++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 218 insertions(+), 69 deletions(-)
diff --git a/pages/login/Login.vue b/pages/login/Login.vue
index 110a36a..71b5c44 100644
--- a/pages/login/Login.vue
+++ b/pages/login/Login.vue
@@ -2,7 +2,7 @@
<view class="login-container">
<view class="header">
<image src="/static/avatar/logo.png" class="logo" />
- <text class="hospital-name">闈掗檮闄PO绠$悊骞冲彴</text>
+ <text class="hospital-name">闈掑ぇ闄勯櫌OPO绠$悊骞冲彴</text>
</view>
<view class="form-container">
@@ -46,115 +46,264 @@
<script setup>
import { ref } from "vue";
-import { onLoad } from "@dcloudio/uni-app";
+import { onLoad, onShow } from "@dcloudio/uni-app";
import { useUserStore } from "@/stores/user";
+import { getToken, setToken } from "@/utils/auth";
import { encrypt } from "@/utils/crypto";
+
+let isAutoLogining = false;
+let hasAutoLogin = false;
const username = ref("");
const password = ref("");
const showPassword = ref(false);
-const isHarmonyOS = ref(false);
-const redirect = ref("/pages/index/index"); // 榛樿璺宠浆棣栭〉
+const redirect = ref("");
onLoad((options) => {
- // 鏍煎紡鍖栧綋鍓嶆棩鏈熶负 YYYYMMDD
- const getCurrentDate = () => {
- const now = new Date();
- const year = now.getFullYear();
- const month = String(now.getMonth() + 1).padStart(2, "0");
- const day = String(now.getDate()).padStart(2, "0");
- return `${year}${month}${day}`;
- };
+ console.log("鐧诲綍椤祇nLoad锛屽畬鏁村弬鏁�:", options);
+ console.log("椤甸潰鏍�:", getCurrentPages());
- // 鑷姩鐢熸垚瀵嗙爜鍑芥暟
- const generatePassword = () => {
- const currentDate = getCurrentDate(); // 鐩存帴璋冪敤鍑芥暟
- return `Hrs#${currentDate}*`;
- };
- // uni.$uapi.post("/getToken", {
- // userName: "娴嬭瘯鍚撮緳",
- // passWord: "13803963330",
- // });
+ // 鉁� 鑾峰彇瀹屾暣URL鍙傛暟
+ const pages = getCurrentPages();
+ if (pages.length > 0) {
+ const currentPage = pages[pages.length - 1];
+ console.log("褰撳墠椤甸潰瀵硅薄:", currentPage);
+ }
+ // 澶勭悊redirect鍙傛暟
if (options.redirect) {
redirect.value = decodeURIComponent(options.redirect);
+ } else if (options.userName && options.passWord) {
+ // 濡傛灉娌℃湁redirect浣嗘湁SSO鍙傛暟锛屽皾璇曚粠referrer鑾峰彇
+ const launchOptions = uni.getLaunchOptionsSync();
+ if (launchOptions.referrerInfo && launchOptions.referrerInfo.extraData) {
+ const referrer = launchOptions.referrerInfo.extraData;
+ console.log("referrer淇℃伅:", referrer);
+ }
}
- // password.value = generatePassword(); // 鐩存帴璋冪敤鍑芥暟
- password.value = ""; // 鐩存帴璋冪敤鍑芥暟
- username.value = "";
- // 妫�娴嬫槸鍚﹂缚钂欑郴缁�
- // #ifdef HARMONY
- isHarmonyOS.value = true;
- // #endif
+ // 妫�鏌ユ槸鍚﹀凡鏈塼oken
+ if (getToken()) {
+ console.log("宸插瓨鍦╰oken锛岀洿鎺ヨ烦杞�");
+ setTimeout(() => {
+ navigateToTarget();
+ }, 100);
+ return;
+ }
+
+ // 鉁� SSO鐧诲綍锛氭鏌ユ墍鏈夊彲鑳界殑鍙傛暟浣嶇疆
+ let ssoUserName = options.userName;
+ let ssoPassWord = options.passWord;
+
+ // 濡傛灉娌℃湁浠巓ptions鑾峰彇鍒帮紝灏濊瘯浠庡惎鍔ㄥ弬鏁拌幏鍙�
+ if (!ssoUserName || !ssoPassWord) {
+ const launchOptions = uni.getLaunchOptionsSync();
+ if (launchOptions.query) {
+ ssoUserName = ssoUserName || launchOptions.query.userName;
+ ssoPassWord = ssoPassWord || launchOptions.query.passWord;
+ }
+ }
+
+ if (ssoUserName && ssoPassWord) {
+ console.log("妫�娴嬪埌SSO鍙傛暟锛岃嚜鍔ㄧ櫥褰�", { ssoUserName });
+
+ // 鍚堝苟鎵�鏈夐〉闈㈠弬鏁�
+ const pageParams = { ...options };
+ delete pageParams.userName;
+ delete pageParams.passWord;
+ delete pageParams.redirect;
+
+ handleSSOLogin(ssoUserName, ssoPassWord, pageParams);
+ } else {
+ // 鏅�氱櫥褰�
+ password.value = "";
+ username.value = "";
+ }
});
+
+onShow(() => {
+ console.log("鐧诲綍椤祇nShow");
+ if (hasAutoLogin) {
+ hasAutoLogin = false;
+ }
+});
+
+// 鉁� 鏀硅繘鐨凷SO鐧诲綍鍑芥暟
+const handleSSOLogin = async (userName, passWord, pageParams = {}) => {
+ if (isAutoLogining) {
+ console.log("姝e湪鑷姩鐧诲綍涓紝璺宠繃");
+ return;
+ }
+
+ isAutoLogining = true;
+ console.log("寮�濮婼SO鍏嶇櫥:", { userName, pageParams });
+
+ uni.showLoading({ title: "鑷姩鐧诲綍涓�...", mask: true });
+
+ try {
+ console.log(11);
+
+ // 1. 鑾峰彇token
+ const tokenRes = await uni.$uapi.post("/getToken", {
+ userName,
+ passWord,
+ });
+ console.log(tokenRes.data);
+
+ uni.hideLoading();
+
+ if (!tokenRes.data.token) {
+ throw new Error("鑾峰彇token澶辫触");
+ }
+
+ console.log("鑾峰彇鍒皌oken鎴愬姛");
+
+ // 2. 淇濆瓨token
+ setToken(tokenRes.data.token);
+
+ // 3. 鑾峰彇鐢ㄦ埛淇℃伅
+ const userStore = useUserStore();
+ const userInfo = await uni.$uapi.get("/getInfo");
+ if (userInfo) {
+ userStore.setUserInfo(userInfo);
+ }
+
+ // 4. 鏋勫缓鐩爣椤甸潰URL
+ let targetPage = redirect.value;
+ if (!targetPage && Object.keys(pageParams).length > 0) {
+ // 灏濊瘯浠庡師濮嬭闂矾寰勬瀯寤�
+ const launchOptions = uni.getLaunchOptionsSync();
+ if (launchOptions.path && !launchOptions.path.includes("login/Login")) {
+ targetPage = "/" + launchOptions.path;
+ }
+ }
+
+ // 5. 璺宠浆
+ hasAutoLogin = true;
+ await navigateToTargetPage(targetPage, pageParams);
+ } catch (err) {
+ uni.hideLoading();
+ console.error("SSO鍏嶇櫥澶辫触:", err);
+ uni.showToast({
+ title: "鑷姩鐧诲綍澶辫触锛岃鎵嬪姩鐧诲綍",
+ icon: "none",
+ duration: 3000,
+ });
+
+ uni.removeStorageSync("token");
+ } finally {
+ isAutoLogining = false;
+ }
+};
+
+// 鏅�氱櫥褰�
const handleLogin = async () => {
try {
- const userStore = useUserStore();
+ if (!username.value || !password.value) {
+ uni.showToast({ title: "璇疯緭鍏ヨ处鍙峰瘑鐮�", icon: "none" });
+ return;
+ }
- // 鉁� 瀵嗙爜鍔犲瘑
+ uni.showLoading({ title: "鐧诲綍涓�...", mask: true });
+
+ const userStore = useUserStore();
const encryptedPassword = encrypt(password.value);
const encryptedUsername = encrypt(username.value);
const loginRes = await uni.$uapi.post("/login", {
username: encryptedUsername,
- password: encryptedPassword, // 鈿狅笍 浼犲瘑鏂�
+ password: encryptedPassword,
});
- userStore.setToken(loginRes.token);
+ if (!loginRes || !loginRes.token) {
+ throw new Error("鐧诲綍澶辫触");
+ }
+
+ setToken(loginRes.token);
const userInfo = await uni.$uapi.get("/getInfo");
- userStore.setUserInfo(userInfo);
-
- const redirects = redirect.value || "/pages/index/index";
-
- const tabBarPages = [
- "/pages/index/index",
- "/pages/appointment/index",
- "/pages/consultation/index",
- "/pages/my/index",
- ];
-
- if (tabBarPages.includes(redirects)) {
- uni.switchTab({ url: redirects });
- } else {
- uni.redirectTo({ url: redirects });
+ if (userInfo) {
+ userStore.setUserInfo(userInfo);
}
+
+ uni.hideLoading();
+ await navigateToTarget();
} catch (err) {
+ uni.hideLoading();
+ console.error("鐧诲綍澶辫触:", err);
uni.showToast({
title: err.message || "鐧诲綍澶辫触",
icon: "none",
+ duration: 3000,
});
}
};
-const gotoRegister = () => {
- uni.navigateTo({
- url: "/pages/login/Register",
- });
+// 鉁� 鏀硅繘鐨勮烦杞嚱鏁�
+const navigateToTarget = () => {
+ return navigateToTargetPage(redirect.value, {});
};
-const gotoForgetPassword = () => {
- uni.navigateTo({
- url: "/pages/login/ForgetPwd",
- });
-};
+const navigateToTargetPage = (targetPage, pageParams = {}) => {
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ let targetUrl = targetPage || "/pages/index/index";
-const appleLogin = () => {
- uni.showToast({
- title: "鏆傛湭寮�閫� Apple 鐧诲綍",
- icon: "none",
- });
-};
+ // 澶勭悊椤甸潰鍙傛暟
+ const paramKeys = Object.keys(pageParams).filter(
+ (key) =>
+ pageParams[key] !== undefined &&
+ pageParams[key] !== null &&
+ key !== "userName" &&
+ key !== "passWord" &&
+ key !== "redirect",
+ );
-const harmonyLogin = () => {
- // 璋冪敤楦胯挋鐧诲綍鎻掍欢
- // #ifdef HARMONY
- const harmonyAuth = uni.requireNativePlugin("Harmony-Auth");
- harmonyAuth.login((result) => {
- console.log("楦胯挋鐧诲綍缁撴灉:", result);
+ if (paramKeys.length > 0) {
+ const queryStr = paramKeys
+ .map((key) => `${key}=${encodeURIComponent(pageParams[key])}`)
+ .join("&");
+
+ targetUrl = targetUrl.includes("?")
+ ? `${targetUrl}&${queryStr}`
+ : `${targetUrl}?${queryStr}`;
+ }
+
+ console.log("鏈�缁堣烦杞洰鏍�:", targetUrl);
+
+ const tabBarPages = [
+ "/pages/index/index",
+ "/pages/appointment/index",
+ "/pages/consultation/index",
+ "/pages/my/index",
+ ];
+
+ const baseUrl = targetUrl.split("?")[0];
+ const isTabBar = tabBarPages.includes(baseUrl);
+
+ if (isTabBar) {
+ uni.switchTab({
+ url: baseUrl,
+ success: () => resolve(true),
+ fail: () => {
+ uni.redirectTo({ url: "/pages/index/index" });
+ resolve(false);
+ },
+ });
+ } else {
+ uni.redirectTo({
+ url: targetUrl,
+ success: () => resolve(true),
+ fail: (err) => {
+ console.error("璺宠浆澶辫触:", err);
+ // 濡傛灉鐩爣椤佃烦杞け璐ワ紝璺抽椤�
+ uni.redirectTo({ url: "/pages/index/index" });
+ resolve(false);
+ },
+ });
+ }
+ }, 300);
});
- // #endif
};
</script>
--
Gitblit v1.9.3