feat: 做了适配手机端的条件编译的

This commit is contained in:
2026-05-10 11:24:48 +08:00
parent 58a88b7953
commit bef68d4f3c
7 changed files with 117 additions and 62 deletions

View File

@@ -69,18 +69,41 @@ export const checkToken = () => {
// 刷新token // 刷新token
export const refreshToken = () => { export const refreshToken = () => {
let provider = "weixin";
let grant_type = "wechat";
// #ifdef APP-PLUS
const systemInfo = uni.getSystemInfoSync();
if (systemInfo.platform === "ios") {
provider = "apple";
grant_type = "apple";
}
// #endif
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
uni.login({ uni.login({
provider: "weixin", //使用微信登录 provider,
success: async ({ code }) => { success: async (loginRes) => {
console.log("进入 refreshToken success", code); console.log("refreshToken success: ", JSON.stringify(loginRes));
const openIdCode =
provider === "apple"
? loginRes.appleInfo && loginRes.appleInfo.identityToken
: loginRes.code;
console.log("获取到的授权code:", openIdCode);
if (!openIdCode) {
console.warn("refreshToken 未获取到登录 code");
resolve(true);
return;
}
const params = { const params = {
openIdCode: [code], openIdCode: [openIdCode],
grant_type: "wechat", grant_type: grant_type,
scope: "server",
clientId: clientId, clientId: clientId,
scope: "server",
}; };
console.log("获取到的微信授权params:", JSON.stringify(params)); console.log("获取到的授权params:", JSON.stringify(params));
const response = await oauthToken(params); const response = await oauthToken(params);
if (response.access_token) { if (response.access_token) {
@@ -89,7 +112,6 @@ export const refreshToken = () => {
const checkRes = await checkUserPhone({ const checkRes = await checkUserPhone({
token: response.access_token, token: response.access_token,
}); });
if (checkRes.data) { if (checkRes.data) {
// 登录成功后,触发登录成功事件 // 登录成功后,触发登录成功事件
uni.$emit(NOTICE_EVENT_LOGIN_SUCCESS); uni.$emit(NOTICE_EVENT_LOGIN_SUCCESS);
@@ -99,6 +121,10 @@ export const refreshToken = () => {
} }
} }
}, },
fail: (err) => {
console.warn("refreshToken uni.login fail:", err);
resolve(true);
},
}); });
}); });
}; };

View File

@@ -23,7 +23,9 @@ export function createApp() {
pinia.use(createUnistorage()); pinia.use(createUnistorage());
app.use(pinia); app.use(pinia);
// #ifdef MP-WEIXIN
app.use(share); app.use(share);
// #endif
return { return {
app, app,

View File

@@ -1,29 +0,0 @@
export const getWeChatAuthCode = (e) => {
return new Promise((resolve, reject) => {
// 条件编译微信小程序、抖音小程序
let provider = "";
// #ifdef MP-WEIXIN
provider = "weixin";
// #endif
// #ifdef MP-TOUTIAO
provider = "toutiao";
// #endif
// 判断用户拒绝授权
if (
e !== undefined &&
e.detail.errMsg === "getPhoneNumber:fail user deny"
) {
reject();
return;
}
uni.login({
provider,
onlyAuthorize: true,
success: (res) => resolve(res.code),
fail: (err) => reject(err),
});
});
};

View File

@@ -1,5 +1,4 @@
import { oauthToken, bindUserPhone } from "../request/api/LoginApi"; import { oauthToken, bindUserPhone } from "../request/api/LoginApi";
import { getWeChatAuthCode } from "./AuthManager";
import { clientId } from "@/constant/base"; import { clientId } from "@/constant/base";
import { NOTICE_EVENT_LOGIN_SUCCESS } from "@/constant/constant"; import { NOTICE_EVENT_LOGIN_SUCCESS } from "@/constant/constant";
import { removeAccessToken, setAccessToken } from "../constant/token"; import { removeAccessToken, setAccessToken } from "../constant/token";
@@ -7,25 +6,66 @@ import { removeAccessToken, setAccessToken } from "../constant/token";
const loginAuth = (e) => { const loginAuth = (e) => {
removeAccessToken(); removeAccessToken();
return new Promise(async (resolve, reject) => { // 条件编译微信小程序、抖音小程序、APP-PLUS包含iOS和Android
const openIdCode = await getWeChatAuthCode(e); let provider = "weixin";
console.log("获取到的微信授权code:", openIdCode); let grant_type = "wechat";
const params = {
openIdCode: [openIdCode],
grant_type: "wechat",
scope: "server",
clientId: clientId,
};
console.log("获取到的微信授权params:", JSON.stringify(params));
const response = await oauthToken(params);
console.log("获取到的微信授权response:", response);
if (response.access_token) { // #ifdef MP-WEIXIN
setAccessToken(response.access_token); provider = "weixin";
resolve(); grant_type = "wechat";
} else { // #endif
reject(response.message || "登录失败");
} // #ifdef MP-TOUTIAO
provider = "toutiao";
grant_type = "toutiao";
// #endif
// #ifdef APP-PLUS
const systemInfo = uni.getSystemInfoSync();
if (systemInfo.platform === "ios") {
provider = "apple";
grant_type = "apple";
}
// #endif
return new Promise(async (resolve, reject) => {
uni.login({
provider,
onlyAuthorize: true,
success: async (loginRes) => {
console.log("Authorize success: ", JSON.stringify(loginRes));
const openIdCode =
provider === "apple"
? loginRes.appleInfo && loginRes.appleInfo.identityToken
: loginRes.code;
console.log("获取到的授权code:", openIdCode);
if (!openIdCode) {
console.warn("refreshToken 未获取到登录 code");
reject("refreshToken 未获取到登录 code");
return;
}
const params = {
openIdCode: [openIdCode],
grant_type: grant_type,
clientId: clientId,
scope: "server",
};
console.log("获取到的授权params:", JSON.stringify(params));
const response = await oauthToken(params);
if (response.access_token) {
setAccessToken(response.access_token);
resolve();
} else {
reject(response.message || "登录失败");
}
},
fail: (err) => {
reject("登录失败");
},
});
}); });
}; };
@@ -34,7 +74,7 @@ const bindPhone = async (params) => {
const response = await bindUserPhone(params); const response = await bindUserPhone(params);
return response; return response;
} catch (error) { } catch (error) {
throw err; throw error;
} }
}; };

View File

@@ -31,7 +31,6 @@ import DrawerSection from "../DrawerSection/index.vue";
import Calender from "@/components/Calender/index.vue"; import Calender from "@/components/Calender/index.vue";
const appStore = useAppStore(); const appStore = useAppStore();
const locationStore = useLocationStore();
const calendarVisible = ref(false); const calendarVisible = ref(false);
const selectedDate = ref(""); const selectedDate = ref("");

View File

@@ -28,11 +28,17 @@
<!-- 按钮区域 --> <!-- 按钮区域 -->
<view class="login-btn-area"> <view class="login-btn-area">
<!-- 同意隐私协议并获取手机号按钮 --> <!-- 同意隐私协议并获取手机号按钮 -->
<button v-if="needWxAuthLogin" class="login-btn" type="primary" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"> <button
手机号快捷登录 v-if="needWxAuthLogin && !isAppleLogin"
class="login-btn"
type="primary"
open-type="getPhoneNumber"
@getphonenumber="getPhoneNumber"
>
{{ loginButtonText }}
</button> </button>
<button v-else class="login-btn" type="primary" @click="handleAgreeAndGetPhone"> <button v-else class="login-btn" type="primary" @click="handleAgreeAndGetPhone">
手机号快捷登录 {{ loginButtonText }}
</button> </button>
</view> </view>
@@ -62,11 +68,20 @@ const privacyAgreement = ref("");
// 协议类型 // 协议类型
const AgreeType = ref("service"); const AgreeType = ref("service");
const logo = computed(() => getCurrentConfig().logo); const logo = computed(() => getCurrentConfig().logo);
const isAppleLogin = ref(false);
const loginButtonText = computed(() =>
isAppleLogin.value ? "Apple ID快捷登录" : "手机号快捷登录"
);
// #ifdef APP-PLUS
const systemInfo = uni.getSystemInfoSync();
isAppleLogin.value = systemInfo.platform === "ios";
// #endif
// 同意隐私协议并获取手机号 // 同意隐私协议并获取手机号
const handleAgreeAndGetPhone = () => { const handleAgreeAndGetPhone = () => {
// 如果需要微信登录,直接返回 // 如果需要微信登录,直接返回
if (needWxAuthLogin.value) { if (needWxAuthLogin.value && !isAppleLogin.value) {
return; return;
} }

View File

@@ -1,5 +1,6 @@
export default { export default {
install(app) { install(app) {
// #ifdef MP-WEIXIN
app.mixin({ app.mixin({
onLoad() { onLoad() {
const page = getCurrentPages().pop(); const page = getCurrentPages().pop();
@@ -13,5 +14,6 @@ export default {
} }
}, },
}); });
// #endif
}, },
}; };