From 53155db13999ddd90ca0d8dc393f2f5e6bee14d5 Mon Sep 17 00:00:00 2001
From: yvan <8574526@qq.com>
Date: Fri, 5 Sep 2025 21:16:21 +0800
Subject: [PATCH] 1
---
App.vue | 44 +
http/api/profile.js | 46 +-
http/config/config.js | 8 +-
pages/profile/profile.vue | 1963 ++++++++++++++++++++++---------------
utils/wechat-auth.js | 271 +++++
5 files changed, 1555 insertions(+), 777 deletions(-)
create mode 100644 utils/wechat-auth.js
diff --git a/App.vue b/App.vue
index f7422a3..0273d98 100644
--- a/App.vue
+++ b/App.vue
@@ -1,13 +1,57 @@
diff --git a/http/api/profile.js b/http/api/profile.js
index 89b9be5..c1facef 100644
--- a/http/api/profile.js
+++ b/http/api/profile.js
@@ -71,13 +71,23 @@ export const userLogin = (loginData, config = {}) => {
}
/**
- * 微信登录
+ * 微信小程序登录
* @param {Object} wxData 微信登录数据
+ * @param {string} wxData.code 微信授权码(必需)
+ * @param {string} wxData.encryptedData 加密数据(可选,用户授权后获取)
+ * @param {string} wxData.iv 初始向量(可选,用户授权后获取)
+ * @param {string} wxData.signature 签名(可选,用户授权后获取)
+ * @param {Object} wxData.userInfo 用户信息(可选,用户授权后获取)
* @param {Object} config 自定义配置
- * @returns {Promise}
+ * @returns {Promise} 返回包含token和用户信息的Promise
*/
export const wxLogin = (wxData, config = {}) => {
- return uni.$u.http.post('/auth/wx-login', wxData, {
+ // 验证必需参数
+ if (!wxData || !wxData.code) {
+ return Promise.reject(new Error('微信授权码(code)是必需的'))
+ }
+
+ return uni.$u.http.post('/wechat/user/mini/login', wxData, {
custom: {
auth: false,
loading: true,
@@ -210,12 +220,16 @@ export const updateUserSettings = (settings, config = {}) => {
/**
* 绑定手机号
* @param {Object} phoneData 手机号数据
+ * @param {string} phoneData.encryptedData 加密数据
+ * @param {string} phoneData.iv 初始向量
+ * @param {string} phoneData.cloudID 云函数ID(可选)
* @param {Object} config 自定义配置
* @returns {Promise}
*/
export const bindPhone = (phoneData, config = {}) => {
return uni.$u.http.post('/user/bind-phone', phoneData, {
custom: {
+ auth: true,
loading: true,
loadingText: '正在绑定手机号...',
...config.custom
@@ -224,6 +238,32 @@ export const bindPhone = (phoneData, config = {}) => {
})
}
+/**
+ * 微信小程序登录并绑定手机号
+ * @param {Object} loginData 登录和手机号数据
+ * @param {string} loginData.code 微信授权码
+ * @param {string} loginData.phoneEncryptedData 手机号加密数据(可选)
+ * @param {string} loginData.phoneIv 手机号初始向量(可选)
+ * @param {string} loginData.phoneCloudID 手机号云函数ID(可选)
+ * @param {Object} config 自定义配置
+ * @returns {Promise}
+ */
+export const wxLoginWithPhone = (loginData, config = {}) => {
+ if (!loginData || !loginData.code) {
+ return Promise.reject(new Error('微信授权码(code)是必需的'))
+ }
+
+ return uni.$u.http.post('/auth/wx-login-phone', loginData, {
+ custom: {
+ auth: false,
+ loading: true,
+ loadingText: '正在登录...',
+ ...config.custom
+ },
+ ...config
+ })
+}
+
/**
* 获取用户权限
* @param {Object} config 自定义配置
diff --git a/http/config/config.js b/http/config/config.js
index 513b1f8..7b76ee1 100644
--- a/http/config/config.js
+++ b/http/config/config.js
@@ -6,7 +6,7 @@
const ENV_CONFIG = {
// 开发环境
development: {
- baseURL: 'https://dev-api.pet-ai.com',
+ baseURL: 'http://127.0.0.1:8080',
timeout: 30000
},
// 测试环境
@@ -33,8 +33,8 @@ export const HTTP_CONFIG = {
// 当前环境配置
...ENV_CONFIG[CURRENT_ENV],
- // 登录页面路径
- loginPage: '/pages/login/login',
+ // 登录页面路径(个人中心页面,点击头像登录)
+ loginPage: '/pages/profile/profile',
// 存储键名配置
storageKeys: {
@@ -59,7 +59,7 @@ export const NO_AUTH_APIS = [
// 用户认证相关
'/auth/login',
'/auth/register',
- '/auth/wx-login',
+ '/wechat/user/mini/login',
'/auth/refresh',
// 公开浏览的接口
diff --git a/pages/profile/profile.vue b/pages/profile/profile.vue
index ce129c8..1305581 100644
--- a/pages/profile/profile.vue
+++ b/pages/profile/profile.vue
@@ -1,922 +1,1345 @@
-
-
-
-
-
-
-
-
-
-
-
-
- {{ userInfo.nickName || '点击登录' }}
- {{ userInfo.nickName ? '已登录' : '未登录' }}
- 已使用 {{ loginDays }} 天
-
-
- {{ userInfo.nickName ? '⚙️' : '👋' }}
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ userInfo.nickName || '点击登录' }}
+ {{ userInfo.nickName ? '已登录' : '未登录' }}
+ 已使用 {{ loginDays }} 天
+
+
+
+
+
+
+ ⚙️
+
+
+
-
-
-
-
-
- ➕
- 邀请成员
-
-
- 👥
- 家庭设置
-
-
-
+
+
+
+
+
+ {{ petStats.petCount }}
+ 宠物
+ 🐱
+
+
+ {{ petStats.recordCount }}
+ 记录
+ 📝
+
+
+ {{ petStats.reminderCount }}
+ 提醒
+ ⏰
+
+
+
-
-
-
-
-
- {{ adoptionStats.publishedCount }}
- 已发布
-
-
- {{ adoptionStats.applicationCount }}
- 已申请
-
-
-
- 📝
- 发布领养信息
-
-
+
+
+
+
+
+ ➕
+ 邀请成员
+
+
+ 👥
+ 家庭设置
+
+
+
-
-
-
-
-
- 🔔
- 消息通知
-
-
- {{ notificationCount }}
- →
-
-
-
-
- 🔒
- 隐私设置
-
-
- →
-
-
-
-
- 💬
- 意见反馈
-
-
- →
-
-
-
-
- ℹ️
- 关于我们
-
-
- →
-
-
-
-
-
+
+
+
+
+
+ {{ adoptionStats.publishedCount }}
+ 已发布
+
+
+ {{ adoptionStats.applicationCount }}
+ 已申请
+
+
+
+ 📝
+ 发布领养信息
+
+
+
+
+
+
+
+
+ 🔔
+ 消息通知
+
+
+ {{ notificationCount }}
+ →
+
+
+
+
+ 🔒
+ 隐私设置
+
+
+ →
+
+
+
+
+ 💬
+ 意见反馈
+
+
+ →
+
+
+
+
+ ℹ️
+ 关于我们
+
+
+ →
+
+
+
+
+
+
+
+
+
+ 手机号授权
+ 为了更好的服务体验,需要获取您的手机号
+
+
+
+
+
+
+
diff --git a/utils/wechat-auth.js b/utils/wechat-auth.js
new file mode 100644
index 0000000..86ffa7a
--- /dev/null
+++ b/utils/wechat-auth.js
@@ -0,0 +1,271 @@
+// 微信小程序认证工具类
+// 封装微信小程序登录的核心逻辑
+
+import { HTTP_CONFIG } from '@/http/config/config.js'
+
+/**
+ * 微信小程序认证工具类
+ */
+export class WechatAuth {
+ /**
+ * 微信登录获取code
+ * @returns {Promise} 微信授权码
+ */
+ static async getWxCode() {
+ return new Promise((resolve, reject) => {
+ wx.login({
+ success: (res) => {
+ console.log(res)
+ if (res.code) {
+ resolve(res.code)
+ } else {
+ reject(new Error('获取微信授权码失败'))
+ }
+ },
+ fail: (error) => {
+ reject(new Error('微信登录失败: ' + (error.errMsg || '未知错误')))
+ }
+ })
+ })
+ }
+
+ /**
+ * 获取用户信息(需要用户授权)
+ * @param {string} desc 申请理由
+ * @returns {Promise