From 05c363fdd7ab04e3bd9a753e2c5d5bfff04d681c Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期二, 09 六月 2026 10:21:35 +0800
Subject: [PATCH] 备份上传
---
pages/login/Login.vue | 305 ++++++++++++++++++++++++--------------------------
1 files changed, 149 insertions(+), 156 deletions(-)
diff --git a/pages/login/Login.vue b/pages/login/Login.vue
index 71b5c44..fd82eea 100644
--- a/pages/login/Login.vue
+++ b/pages/login/Login.vue
@@ -1,16 +1,20 @@
<template>
<view class="login-container">
+ <view v-if="isAutoLogining" class="sso-mask">
+ <uni-load-more
+ status="loading"
+ :content-text="{ contentdown: '鑷姩鐧诲綍涓�...' }"
+ ></uni-load-more>
+ </view>
<view class="header">
<image src="/static/avatar/logo.png" class="logo" />
<text class="hospital-name">闈掑ぇ闄勯櫌OPO绠$悊骞冲彴</text>
</view>
-
<view class="form-container">
<view class="input-group">
<uni-icons type="contact" size="24" color="#409EFF" />
<input v-model="username" placeholder="璇疯緭鍏ヨ处鍙�" class="input" />
</view>
-
<view class="input-group">
<uni-icons type="locked" size="24" color="#409EFF" />
<input
@@ -26,7 +30,6 @@
@click="showPassword = !showPassword"
/>
</view>
-
<button
class="login-btn"
:class="{ active: username && password }"
@@ -35,11 +38,6 @@
>
鐧诲綍
</button>
-
- <!-- <view class="footer-links">
- <view @click="gotoRegister">娉ㄥ唽璐﹀彿</view>
- <view @click="gotoForgetPassword">蹇樿瀵嗙爜</view>
- </view> -->
</view>
</view>
</template>
@@ -59,151 +57,142 @@
const showPassword = ref(false);
const redirect = ref("");
-onLoad((options) => {
- console.log("鐧诲綍椤祇nLoad锛屽畬鏁村弬鏁�:", options);
- console.log("椤甸潰鏍�:", getCurrentPages());
+// tabBar 椤甸潰鍒楄〃锛堜笌 pages.json 淇濇寔涓�鑷达級
+const tabBarPages = [
+ "/pages/index/index",
+ "/pages/appointment/index",
+ "/pages/consultation/index",
+ "/pages/my/index",
+];
- // 鉁� 鑾峰彇瀹屾暣URL鍙傛暟
- const pages = getCurrentPages();
- if (pages.length > 0) {
- const currentPage = pages[pages.length - 1];
- console.log("褰撳墠椤甸潰瀵硅薄:", currentPage);
+onLoad(async (options) => {
+ console.log("鐧诲綍椤祇nLoad锛屽師濮嬪弬鏁�:", options);
+ const launchQuery = uni.getLaunchOptionsSync().query || {};
+ const allParams = { ...launchQuery, ...options };
+ console.log("鍚堝苟鍚庡弬鏁�:", allParams);
+
+ // 鎻愬彇 redirect
+ if (allParams.redirect) {
+ redirect.value = decodeURIComponent(allParams.redirect);
}
- // 澶勭悊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);
+ // 鉁� 浼樺厛澶勭悊 code 鍏嶇櫥
+ const code = allParams.code;
+ if (code) {
+ console.log("妫�娴嬪埌鍏嶇櫥鐮侊紝寮�濮嬭В鏋�:", code);
+ // 鏄剧ず loading
+ uni.showLoading({ title: "瑙f瀽鍏嶇櫥淇℃伅...", mask: true });
+ try {
+ // 璋冪敤瑙f瀽鎺ュ彛
+ const res = await uni.$uapi.get("/GiLink/getCode", { code });
+ uni.hideLoading();
+ console.log(res.data);
+ res.data.passWord = res.data.userPhone;
+ if (!res.data || !res.data.userName || !res.data.passWord) {
+ throw new Error("瑙f瀽鍏嶇櫥鐮佸け璐�");
+ }
+ let obj = JSON.parse(res.data.extContent);
+ // const { userName, passWord, ...otherParams } = res;
+ console.log(res.data.userName);
+
+ const userName = res.data.userName;
+ const passWord = res.data.passWord;
+ const otherParams = {
+ id: obj.infoId,
+ type: obj.type,
+ status: obj.status,
+ fcid: obj.id,
+ };
+ console.log("瑙f瀽缁撴灉:", { userName, otherParams });
+ // 娓呴櫎鍙兘瀛樺湪鐨勬棫 token
+ if (getToken()) uni.removeStorageSync("token");
+ // 鎵ц SSO 鐧诲綍锛屽苟灏嗗叾浠栦笟鍔″弬鏁颁紶閫掍笅鍘�
+ await handleSSOLogin(userName, passWord, otherParams);
+ } catch (err) {
+ uni.hideLoading();
+ console.error("鍏嶇櫥鐮佽В鏋愬け璐�:", err);
+ uni.showToast({ title: "鍏嶇櫥褰曞け璐ワ紝璇锋墜鍔ㄧ櫥褰�", icon: "none" });
}
- }
-
- // 妫�鏌ユ槸鍚﹀凡鏈塼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;
- }
+ // 鍘熸湁閫昏緫锛氭棤 code 涓斿凡鏈� token 璺宠浆鐩爣椤�
+ if (getToken()) {
+ setTimeout(() => navigateToTarget(), 100);
+ return;
}
- 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 = "";
- }
+ // 鏅�氱櫥褰曪紝娓呯┖琛ㄥ崟
+ username.value = "";
+ password.value = "";
});
onShow(() => {
- console.log("鐧诲綍椤祇nShow");
- if (hasAutoLogin) {
- hasAutoLogin = false;
- }
+ if (hasAutoLogin) hasAutoLogin = false;
});
-// 鉁� 鏀硅繘鐨凷SO鐧诲綍鍑芥暟
+/**
+ * SSO 鍏嶇櫥
+ */
const handleSSOLogin = async (userName, passWord, pageParams = {}) => {
- if (isAutoLogining) {
- console.log("姝e湪鑷姩鐧诲綍涓紝璺宠繃");
- return;
- }
-
+ if (isAutoLogining) 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);
-
+ const tokenRes = await uni.$uapi.post("/getToken", { userName, passWord });
uni.hideLoading();
- if (!tokenRes.data.token) {
- throw new Error("鑾峰彇token澶辫触");
- }
+ 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);
+ if (userInfo && userInfo.user) {
+ userStore.setUserInfo(userInfo.user);
+ if (userInfo.roles) userStore.setroleKey(userInfo.roles);
}
- // 4. 鏋勫缓鐩爣椤甸潰URL
+ // 纭畾鐩爣椤甸潰
let targetPage = redirect.value;
- if (!targetPage && Object.keys(pageParams).length > 0) {
- // 灏濊瘯浠庡師濮嬭闂矾寰勬瀯寤�
+ if (!targetPage) {
const launchOptions = uni.getLaunchOptionsSync();
- if (launchOptions.path && !launchOptions.path.includes("login/Login")) {
- targetPage = "/" + launchOptions.path;
+ const originalPath = launchOptions.path;
+ if (originalPath && !originalPath.includes("login/Login")) {
+ targetPage = "/" + originalPath;
}
}
+ if (!targetPage) targetPage = "/pages/index/index";
- // 5. 璺宠浆
hasAutoLogin = true;
+ // 璺宠浆鏃舵惡甯� pageParams锛堜笟鍔″弬鏁帮級
await navigateToTargetPage(targetPage, pageParams);
} catch (err) {
uni.hideLoading();
console.error("SSO鍏嶇櫥澶辫触:", err);
uni.showToast({
- title: "鑷姩鐧诲綍澶辫触锛岃鎵嬪姩鐧诲綍",
+ title: err.message || "鑷姩鐧诲綍澶辫触锛岃鎵嬪姩鐧诲綍",
icon: "none",
duration: 3000,
});
-
uni.removeStorageSync("token");
} finally {
isAutoLogining = false;
}
};
-// 鏅�氱櫥褰�
+/**
+ * 鏅�氱櫥褰�
+ */
const handleLogin = async () => {
try {
if (!username.value || !password.value) {
uni.showToast({ title: "璇疯緭鍏ヨ处鍙峰瘑鐮�", icon: "none" });
return;
}
-
uni.showLoading({ title: "鐧诲綍涓�...", mask: true });
const userStore = useUserStore();
@@ -215,15 +204,14 @@
password: encryptedPassword,
});
- if (!loginRes || !loginRes.token) {
- throw new Error("鐧诲綍澶辫触");
- }
-
+ if (!loginRes || !loginRes.token) throw new Error("鐧诲綍澶辫触");
setToken(loginRes.token);
const userInfo = await uni.$uapi.get("/getInfo");
- if (userInfo) {
- userStore.setUserInfo(userInfo);
+ if (userInfo && userInfo.user) {
+ userStore.setUserInfo(userInfo.user);
+
+ if (userInfo.roles) userStore.setroleKey(userInfo.roles);
}
uni.hideLoading();
@@ -239,65 +227,67 @@
}
};
-// 鉁� 鏀硅繘鐨勮烦杞嚱鏁�
+/**
+ * 鏍规嵁 redirect 璺宠浆
+ */
const navigateToTarget = () => {
- return navigateToTargetPage(redirect.value, {});
+ if (redirect.value) {
+ return navigateToTargetPage(redirect.value, {});
+ } else {
+ console.log("娌℃湁鐩爣椤甸潰锛岃烦杞椤�");
+ uni.switchTab({ url: "/pages/index/index" });
+ return Promise.resolve(true);
+ }
};
+/**
+ * 閫氱敤璺宠浆鍑芥暟
+ * @param {string} targetPage 鐩爣椤甸潰璺緞
+ * @param {object} pageParams 闄勫姞鍙傛暟
+ */
const navigateToTargetPage = (targetPage, pageParams = {}) => {
return new Promise((resolve) => {
+ if (!targetPage) {
+ console.log("鐩爣椤典负绌猴紝璺宠浆棣栭〉");
+ uni.switchTab({ url: "/pages/index/index" });
+ resolve(true);
+ return;
+ }
+
+ let finalUrl = targetPage;
+ const paramKeys = Object.keys(pageParams).filter(
+ (key) => pageParams[key] !== undefined && pageParams[key] !== null,
+ );
+ if (paramKeys.length > 0) {
+ const queryStr = paramKeys
+ .map((key) => `${key}=${encodeURIComponent(pageParams[key])}`)
+ .join("&");
+ finalUrl += (finalUrl.includes("?") ? "&" : "?") + queryStr + "&sso=1";
+ }
+
+ console.log("鏈�缁堣烦杞洰鏍嘦RL:", finalUrl);
+
+ const baseUrl = finalUrl.split("?")[0];
+ const isTabBar = tabBarPages.includes(baseUrl);
+
setTimeout(() => {
- let targetUrl = targetPage || "/pages/index/index";
-
- // 澶勭悊椤甸潰鍙傛暟
- const paramKeys = Object.keys(pageParams).filter(
- (key) =>
- pageParams[key] !== undefined &&
- pageParams[key] !== null &&
- key !== "userName" &&
- key !== "passWord" &&
- key !== "redirect",
- );
-
- 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" });
+ fail: (err) => {
+ console.error("switchTab澶辫触:", err);
+ uni.switchTab({ url: "/pages/index/index" });
resolve(false);
},
});
} else {
uni.redirectTo({
- url: targetUrl,
+ url: finalUrl,
success: () => resolve(true),
fail: (err) => {
- console.error("璺宠浆澶辫触:", err);
- // 濡傛灉鐩爣椤佃烦杞け璐ワ紝璺抽椤�
- uni.redirectTo({ url: "/pages/index/index" });
+ console.error("redirectTo澶辫触:", err);
+ uni.switchTab({ url: "/pages/index/index" });
resolve(false);
},
});
@@ -313,6 +303,20 @@
background: linear-gradient(to bottom, #e6f7ff, #ffffff);
height: 100vh;
box-sizing: border-box;
+ position: relative;
+}
+
+.sso-mask {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(255, 255, 255, 0.9);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 9999;
}
.header {
@@ -381,16 +385,5 @@
.button-hover {
opacity: 0.8;
-}
-
-.footer-links {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- text-align: center;
- margin-top: 30rpx;
- color: #1890ff;
- font-size: 28rpx;
- width: 100%;
}
</style>
--
Gitblit v1.9.3