From db685b04e52efd75213ef7540fdc0bed7dccfd9e Mon Sep 17 00:00:00 2001
From: wangrong <wangrong@shsening.com>
Date: 星期一, 26 十月 2026 21:13:37 +0800
Subject: [PATCH] 更新小程序

---
 components/phone-auth.vue |   48 ++++++++++++++++++++++++++++++------------------
 1 files changed, 30 insertions(+), 18 deletions(-)

diff --git a/components/phone-auth.vue b/components/phone-auth.vue
index 9747ff1..23185ff 100644
--- a/components/phone-auth.vue
+++ b/components/phone-auth.vue
@@ -24,9 +24,10 @@
 import { computed, ref } from "vue";
 import { onShow } from "@dcloudio/uni-app";
 import { useCool, useStore, useWx } from "/@/cool";
+import { phoneAuthState } from "/@/cool/mini-login";
 import { useUi } from "/$/cool-ui";
 
-const authState = ((globalThis as any).__phoneAuthState ||= { dismissed: false });
+const authState = phoneAuthState();
 
 const { service, router } = useCool();
 const { user } = useStore();
@@ -37,7 +38,7 @@
 
 const visible = computed(() => {
 	tick.value;
-	return !authState.dismissed && !user.info?.phone;
+	return authState.ready && !authState.dismissed && (!user.token || !user.info?.phone);
 });
 
 function later() {
@@ -87,23 +88,34 @@
 	submitting.value = true;
 	ui.showLoading();
 
-	const payload = phonePayload(detail);
-	const task = user.token
-		? service.user.info.miniPhone(payload).then(async (phone: string) => {
-				const info = user.info || (await service.user.info.person());
-				if (info) {
-					user.set({ ...info, phone });
-				}
-				return phone;
-			})
-		: service.user.login.miniPhone(payload).then(async (res) => {
-				user.setToken(res);
-				const info = await service.user.info.person();
-				if (info) {
-					user.set(info);
-				}
-				return info?.phone as string | undefined;
+	const task = new Promise<string>((resolve) => {
+		uni.login({
+			provider: "weixin",
+			success: (res) => resolve(res.code || ""),
+			fail: () => resolve(""),
+		});
+	})
+		.then((loginCode) => {
+			return service.user.login.miniPhone({
+				...phonePayload(detail),
+				loginCode,
 			});
+		})
+		.then(async (res) => {
+		user.setToken(res);
+		let info = user.info;
+		try {
+			info = (await service.user.info.person()) || info;
+		} catch (err) {
+			console.error(err);
+		}
+		const phone = info?.phone || res.phone;
+		user.set({
+			...(info || {}),
+			phone,
+		});
+		return phone as string | undefined;
+	});
 
 	task
 		.then((phone) => {

--
Gitblit v1.9.1