From f9b5d7f2c083af2926ff679d266d7eff6cb15590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E9=A3=9E=E6=B4=8B?= <15778543+xufeiyang6017@user.noreply.gitee.com> Date: Mon, 22 Dec 2025 14:10:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BB=93=E7=AE=97=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=AE=8C=E6=88=90=E6=8C=89=E9=92=AE=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E9=A6=96=E9=A1=B5=EF=BC=8C=E4=BC=98=E5=8C=96=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E5=8F=B7=E6=8E=88=E6=9D=83=E6=B5=81=E7=A8=8B=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8DapplicationId=E8=AE=BE=E7=BD=AE=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- custom-tab-bar/index.js | 10 +- images/轮播图3.jpg | Bin 0 -> 11404 bytes pages/buyer/index.js | 111 ++++---- pages/buyer/index.wxml | 7 +- pages/favorites/index.js | 17 +- pages/favorites/index.wxml | 9 +- pages/goods-detail/goods-detail.js | 55 +++- pages/goods-detail/goods-detail.wxml | 15 +- pages/goods-detail/goods-detail.wxss | 38 ++- pages/index/index.js | 17 +- pages/index/index.wxml | 5 +- pages/index/index.wxss | 6 + pages/settlement/index.js | 380 +++++++++++++++++---------- pages/settlement/index.wxml | 2 +- 14 files changed, 463 insertions(+), 209 deletions(-) create mode 100644 images/轮播图3.jpg diff --git a/custom-tab-bar/index.js b/custom-tab-bar/index.js index 0bd5a5a..bd1cde4 100644 --- a/custom-tab-bar/index.js +++ b/custom-tab-bar/index.js @@ -199,7 +199,15 @@ Component({ // 检查全局数据中是否有控制tab-bar显示的状态 let showTabBar = true - if (app && app.globalData && typeof app.globalData.showTabBar !== 'undefined') { + // 如果是tabBar页面,默认显示tab-bar + const tabBarPages = this.data.tabBarItems.map(item => item.route) + if (tabBarPages.includes(currentRoute)) { + showTabBar = true + // 同时更新全局状态,确保一致性 + if (app && app.globalData) { + app.globalData.showTabBar = true + } + } else if (app && app.globalData && typeof app.globalData.showTabBar !== 'undefined') { showTabBar = app.globalData.showTabBar } diff --git a/images/轮播图3.jpg b/images/轮播图3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92bf382058a03452c26b4e34176aa94ae99c285c GIT binary patch literal 11404 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 aLo^}z$0~BBF{ZjK0I9!v-K%H*@c;m==|qnJ literal 0 HcmV?d00001 diff --git a/pages/buyer/index.js b/pages/buyer/index.js index 4096fd6..0b09c70 100644 --- a/pages/buyer/index.js +++ b/pages/buyer/index.js @@ -493,12 +493,17 @@ Page({ // 更新自定义tabBar状态 if (typeof this.getTabBar === 'function' && this.getTabBar()) { this.getTabBar().setData({ - selected: 1 + selected: 1, + show: true // 确保导航栏显示 }); } // 更新全局tab状态 const app = getApp(); app.updateCurrentTab('buyer'); + // 确保全局tabBar显示状态为true + if (app.globalData) { + app.globalData.showTabBar = true; + } }, // 带分页的本地存储回退函数 @@ -840,53 +845,63 @@ Page({ const reservedGoodsIds = wx.getStorageSync('reservedGoodsIds') || [] // 将服务器返回的商品数据转换为本地需要的格式 - const newGoods = pagedProducts.map(product => { - // 处理grossWeight为null或无效的情况,返回空字符串以支持文字输入 - const grossWeightValue = product.grossWeight !== null && product.grossWeight !== undefined ? product.grossWeight : ''; - - // 确保商品ID的一致性 - const productIdStr = String(product.productId || product.id); - - // 增强的预约人数计算逻辑 - const selectedValue = product.selected; - const reservedCountValue = product.reservedCount; - const reservationCountValue = product.reservationCount; - - const finalReservationCount = selectedValue !== undefined && selectedValue !== null ? selectedValue : - (reservedCountValue !== undefined && reservedCountValue !== null ? reservedCountValue : - (reservationCountValue || 0)); - - return { - id: productIdStr, - productId: productIdStr, - name: product.productName, - price: product.price, - minOrder: product.quantity, - yolk: product.yolk, - spec: (product.spec && product.spec !== '无') ? product.spec : (product.specification && product.specification !== '无') ? product.specification : '', - specification: (product.spec && product.spec !== '无') ? product.spec : (product.specification && product.specification !== '无') ? product.specification : '', - region: product.region || '', // 【新增】添加地区字段 - grossWeight: grossWeightValue, - displayGrossWeight: formatGrossWeight(grossWeightValue, product.weight), - seller: product.seller && (product.seller.name || product.seller.nickName) ? (product.seller.name || product.seller.nickName) : '未知卖家', - status: product.status || 'published', - imageUrls: product.imageUrls || [], - createdAt: product.created_at || product.createTime || null, - reservedCount: finalReservationCount, - product_contact: product.product_contact || '', // 【新增】添加联系人字段 - contact_phone: product.contact_phone || '', // 【新增】添加联系人电话字段 - debugInfo: { - originalSelected: selectedValue, - originalReservedCount: reservedCountValue, - originalReservationCount: reservationCountValue - }, - isReserved: reservedGoodsIds.some(id => - String(id) === productIdStr || - String(id) === String(product.id) - ), - isFavorite: false, // 初始化收藏状态为false - currentImageIndex: 0 - }; + const newGoods = pagedProducts.map(product => { + // 处理grossWeight为null或无效的情况,返回空字符串以支持文字输入 + const grossWeightValue = product.grossWeight !== null && product.grossWeight !== undefined ? product.grossWeight : ''; + + // 确保商品ID的一致性 + const productIdStr = String(product.productId || product.id); + + // 增强的预约人数计算逻辑 + const selectedValue = product.selected; + const reservedCountValue = product.reservedCount; + const reservationCountValue = product.reservationCount; + + const finalReservationCount = selectedValue !== undefined && selectedValue !== null ? selectedValue : + (reservedCountValue !== undefined && reservedCountValue !== null ? reservedCountValue : + (reservationCountValue || 0)); + + // 转换supplyStatus字段值 + let supplyStatusValue = product.supplyStatus || ''; + if (['平台货源', '三方认证'].includes(supplyStatusValue)) { + supplyStatusValue = '现货'; + } else if (supplyStatusValue === '三方未认证') { + supplyStatusValue = '预售'; + } + + return { + id: productIdStr, + productId: productIdStr, + name: product.productName, + price: product.price, + minOrder: product.quantity, + yolk: product.yolk, + spec: (product.spec && product.spec !== '无') ? product.spec : (product.specification && product.specification !== '无') ? product.specification : '', + specification: (product.spec && product.spec !== '无') ? product.spec : (product.specification && product.specification !== '无') ? product.specification : '', + region: product.region || '', // 【新增】添加地区字段 + grossWeight: grossWeightValue, + displayGrossWeight: formatGrossWeight(grossWeightValue, product.weight), + seller: product.seller && (product.seller.name || product.seller.nickName) ? (product.seller.name || product.seller.nickName) : '未知卖家', + status: product.status || 'published', + imageUrls: product.imageUrls || [], + createdAt: product.created_at || product.createTime || null, + reservedCount: finalReservationCount, + product_contact: product.product_contact || '', // 【新增】添加联系人字段 + contact_phone: product.contact_phone || '', // 【新增】添加联系人电话字段 + supplyStatus: supplyStatusValue, // 添加supplyStatus字段并进行转换 + sourceType: product.sourceType || '', // 新增sourceType字段 + debugInfo: { + originalSelected: selectedValue, + originalReservedCount: reservedCountValue, + originalReservationCount: reservationCountValue + }, + isReserved: reservedGoodsIds.some(id => + String(id) === productIdStr || + String(id) === String(product.id) + ), + isFavorite: false, // 初始化收藏状态为false + currentImageIndex: 0 + }; }); // 过滤掉hidden状态的商品 diff --git a/pages/buyer/index.wxml b/pages/buyer/index.wxml index 7ec3b49..8dfe355 100644 --- a/pages/buyer/index.wxml +++ b/pages/buyer/index.wxml @@ -55,9 +55,10 @@ - 金标蛋 - {{item.name}} - + {{item.supplyStatus || '暂无状态'}} + {{item.name}} + V + {{item.specification || '无'}} | {{item.yolk || '无'}} | {{item.minOrder || item.quantity || 1}}件 diff --git a/pages/favorites/index.js b/pages/favorites/index.js index 71c1e62..d80201c 100644 --- a/pages/favorites/index.js +++ b/pages/favorites/index.js @@ -160,7 +160,22 @@ Page({ console.log('获取收藏列表成功:', res); // 检查API返回是否成功 if (res && res.code === 200 && res.data) { - const favorites = res.data.favorites || []; + let favorites = res.data.favorites || []; + + // 转换supplyStatus字段值 + favorites = favorites.map(item => { + if (item.Product && item.Product.supplyStatus) { + // 将supplyStatus由"平台货源"、"三方认证"、"三方未认证"修改为"预售"、"现货" + // 平台货源和三方认证转为现货,三方未认证转为预售 + if (['平台货源', '三方认证'].includes(item.Product.supplyStatus)) { + item.Product.supplyStatus = "现货"; + } else if (item.Product.supplyStatus === '三方未认证') { + item.Product.supplyStatus = "预售"; + } + } + return item; + }); + this.setData({ favoritesList: favorites, hasFavorites: favorites.length > 0, diff --git a/pages/favorites/index.wxml b/pages/favorites/index.wxml index b3e1c7e..93a77a3 100644 --- a/pages/favorites/index.wxml +++ b/pages/favorites/index.wxml @@ -53,10 +53,11 @@ - - 金标蛋 - {{item.Product.productName || '未命名商品'}} - + + {{item.Product.supplyStatus || '暂无状态'}} + {{item.Product.productName || '未命名商品'}} + V + {{(item.Product.spec && item.Product.spec !== '无') ? item.Product.spec : (item.Product.specification && item.Product.specification !== '无') ? item.Product.specification : '无'}} | {{item.Product.yolk || '无'}} | {{item.Product.minOrder || item.Product.quantity || 1}}件 diff --git a/pages/goods-detail/goods-detail.js b/pages/goods-detail/goods-detail.js index e1fadf8..1db5793 100644 --- a/pages/goods-detail/goods-detail.js +++ b/pages/goods-detail/goods-detail.js @@ -1,6 +1,16 @@ // pages/goods-detail/goods-detail.js const API = require('../../utils/api.js') +// 根据sourceType获取对应的颜色 +function getSourceTypeColor(sourceType) { + const colorMap = { + '三方认证': '#4d9dff', + '三方未认证': '#ff4d4f', + '平台货源': '#2ad21f' + }; + return colorMap[sourceType] || '#4d9dff'; +} + // 格式化毛重显示的辅助函数 function formatGrossWeight(grossWeight, weight) { console.log('===== formatGrossWeight 函数调用 ====='); @@ -24,6 +34,36 @@ function formatGrossWeight(grossWeight, weight) { return ""; } +// 提取地区中的省份信息 +function extractProvince(region) { + if (!region || typeof region !== 'string') { + return region; + } + + // 查找各种省份格式的位置 + const provinceEndIndex = region.indexOf('省'); + const autonomousRegionEndIndex = region.indexOf('自治区'); + const municipalityEndIndex = region.indexOf('市'); // 用于直辖市,如北京市、上海市 + const specialRegionEndIndex = region.indexOf('特别行政区'); // 用于香港、澳门 + + if (provinceEndIndex !== -1) { + // 包含"省"字,提取到"省"字结束 + return region.substring(0, provinceEndIndex + 1); + } else if (autonomousRegionEndIndex !== -1) { + // 包含"自治区",提取到"自治区"结束 + return region.substring(0, autonomousRegionEndIndex + 3); + } else if (specialRegionEndIndex !== -1) { + // 包含"特别行政区",提取到"特别行政区"结束 + return region.substring(0, specialRegionEndIndex + 5); + } else if (municipalityEndIndex === 2) { + // 直辖市(如北京市、上海市),市字在第2个字符位置 + return region.substring(0, municipalityEndIndex + 1); + } + + // 如果没有找到匹配的格式,返回原字符串 + return region; +} + Page({ data: { goodsDetail: {}, // 当前商品详情 @@ -128,6 +168,14 @@ Page({ // 处理grossWeight为null或无效的情况,返回空字符串以支持文字输入 const grossWeightValue = product.grossWeight !== null && product.grossWeight !== undefined ? product.grossWeight : ''; + // 转换supplyStatus字段值 + let supplyStatusValue = product.supplyStatus || ''; + // 将"平台货源"、"三方认证"、"三方未认证"修改为"预售"、"现货" + if (supplyStatusValue === '平台货源' || supplyStatusValue === '三方认证') { + supplyStatusValue = '现货'; + } else if (supplyStatusValue === '三方未认证') { + supplyStatusValue = '预售'; + } // 转换商品数据格式 const formattedGoods = { id: productIdStr, @@ -137,7 +185,7 @@ Page({ minOrder: product.minOrder || product.quantity, yolk: product.yolk, spec: product.spec || product.specification, - region: product.region, + region: extractProvince(product.region), contact_phone: product.contact_phone || product.contactPhone, product_contact: product.product_contact || product.contactName, imageUrls: product.imageUrls || product.images || [], @@ -146,7 +194,10 @@ Page({ reservedCount: finalReservationCount, created_at: product.created_at || product.createdAt, updated_at: product.updated_at || product.updatedAt, - status: product.status + status: product.status, + supplyStatus: supplyStatusValue, + sourceType: product.sourceType || '', + sourceTypeColor: getSourceTypeColor(product.sourceType) }; this.setData({ diff --git a/pages/goods-detail/goods-detail.wxml b/pages/goods-detail/goods-detail.wxml index 9c3aa63..ba5bf06 100644 --- a/pages/goods-detail/goods-detail.wxml +++ b/pages/goods-detail/goods-detail.wxml @@ -30,11 +30,18 @@ - - - {{goodsDetail.name}} + + + + {{goodsDetail.supplyStatus || '暂无状态'}} + {{goodsDetail.name}} + V + + + {{goodsDetail.sourceType || '暂无'}} + - + 价格: {{goodsDetail.price}} diff --git a/pages/goods-detail/goods-detail.wxss b/pages/goods-detail/goods-detail.wxss index cdf13cf..eee8ecc 100644 --- a/pages/goods-detail/goods-detail.wxss +++ b/pages/goods-detail/goods-detail.wxss @@ -136,30 +136,60 @@ .goods-price { display: flex; - align-items: baseline; + align-items: center; margin-bottom: 4px; } .price-symbol { - font-size: 15px; + font-size: 18px; color: #666; margin-right: 4px; font-weight: 500; + display: inline-flex; + align-items: center; + justify-content: center; } .price-value { - font-size: 28px; + font-size: 24px; color: #ff4d4f; font-weight: 700; letter-spacing: -0.5px; + display: inline-flex; + align-items: center; + justify-content: center; } .price-value::before { content: '¥'; - font-size: 20px; + font-size: 24px; margin-right: 2px; } +.source-type-badge { + font-size: 24rpx; + color: #ffffff; + background: rgba(255, 255, 255, 0.15); + backdrop-filter: blur(12rpx); + -webkit-backdrop-filter: blur(12rpx); + border: 1rpx solid rgba(255, 255, 255, 0.25); + padding: 4rpx 12rpx; + border-radius: 8rpx; + font-weight: bold; + box-shadow: 0 6rpx 16rpx rgba(0, 0, 0, 0.12), inset 0 1rpx 0 rgba(255, 255, 255, 0.3); + text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.2); + transition: all 0.3s ease; + display: inline-flex; + align-items: center; + justify-content: center; + margin-top: -22rpx; +} + +.source-type-badge:active { + transform: scale(0.98); + box-shadow: 0 3rpx 8rpx rgba(0, 0, 0, 0.15), inset 0 1rpx 0 rgba(255, 255, 255, 0.3); +} + /* 商品详细信息网格 */ .info-grid { background-color: #ffffff; diff --git a/pages/index/index.js b/pages/index/index.js index ae91af7..4f7f7e3 100644 --- a/pages/index/index.js +++ b/pages/index/index.js @@ -11,7 +11,8 @@ Page({ userInfo: {}, needPhoneAuth: false, // 测试模式开关,用于在未完成微信认证时进行测试 - testMode: true + testMode: true, + partnerstatus: '' // 用户入驻状态,用于显示入驻/未入驻 }, // 跳转到聊天页面 @@ -952,7 +953,12 @@ Page({ app.globalData.userInfo = updatedUserInfo wx.setStorageSync('userInfo', updatedUserInfo) - this.setData({ userInfo: updatedUserInfo }) + + // 设置用户入驻状态 + this.setData({ + userInfo: updatedUserInfo, + partnerstatus: serverUserInfo.partnerstatus || '' + }) // 同步更新用户身份信息(当前身份由数据库决定) if (serverUserInfo.type) { @@ -979,7 +985,12 @@ Page({ app.globalData.userInfo = updatedUserInfo wx.setStorageSync('userInfo', updatedUserInfo) - this.setData({ userInfo: updatedUserInfo }) + + // 设置用户入驻状态 + this.setData({ + userInfo: updatedUserInfo, + partnerstatus: serverUserInfo.partnerstatus || '' + }) // 同步更新用户身份信息(当前身份由数据库决定) if (serverUserInfo.type) { diff --git a/pages/index/index.wxml b/pages/index/index.wxml index b40a050..3a5c3c0 100644 --- a/pages/index/index.wxml +++ b/pages/index/index.wxml @@ -23,7 +23,10 @@ - + diff --git a/pages/index/index.wxss b/pages/index/index.wxss index 04920cc..b1cb595 100644 --- a/pages/index/index.wxss +++ b/pages/index/index.wxss @@ -119,6 +119,12 @@ page { width: 100%; } +/* 未入驻按钮样式 */ +.settlement-btn.not-approved { + background: rgba(255, 77, 79, 0.15); + color: #ff4d4f; +} + /* 按钮点击效果 */ .btn:active { transform: scale(0.98); diff --git a/pages/settlement/index.js b/pages/settlement/index.js index 4482887..c0ff419 100644 --- a/pages/settlement/index.js +++ b/pages/settlement/index.js @@ -523,47 +523,47 @@ Page({ const openid = wx.getStorageSync('openid'); const userId = wx.getStorageSync('userId'); - // 如果本地有openid,查询数据库验证用户是否真的存在 - if (openid) { - try { - const API = require('../../utils/api'); - console.log('查询数据库验证用户是否存在...'); - const userRes = await API.getUserInfo(openid); - - // 如果用户存在,继续提交申请 - if (userRes && userRes.success && userRes.data) { - console.log('用户已在数据库中存在,跳过登录验证'); - // 更新本地存储的用户信息 - wx.setStorageSync('userInfo', userRes.data); - // 继续执行后续逻辑 - } else { - // 用户不存在,需要登录 - console.log('用户不存在于数据库中,需要登录'); - // 保存当前表单数据 - this.saveSettlementProgress(); - // 显示登录弹窗 - this.setData({ - showAuthModal: true - }); - return; // 取消提交申请 - } - } catch (error) { - console.error('查询用户信息失败:', error); - // 查询失败,可能是网络问题或其他原因,继续使用本地存储的信息 - console.log('查询失败,继续使用本地存储的用户信息:', openid, userId); - } - } else if (!openid || !userId) { - // 本地没有openid或userId,显示登录弹窗 - console.log('本地没有用户信息,显示授权弹窗'); + // 如果本地没有openid或用户信息,直接显示一键登录弹窗 + if (!openid || !userId) { + console.log('本地没有用户信息,显示一键登录弹窗'); // 保存当前表单数据 this.saveSettlementProgress(); - // 显示登录弹窗 + // 直接显示一键登录弹窗 this.setData({ - showAuthModal: true + showOneKeyLoginModal: true }); return; // 取消提交申请 } + // 如果本地有openid,查询数据库验证用户是否真的存在 + try { + const API = require('../../utils/api'); + console.log('查询数据库验证用户是否存在...'); + const userRes = await API.getUserInfo(openid); + + // 如果用户存在,继续提交申请 + if (userRes && userRes.success && userRes.data) { + console.log('用户已在数据库中存在,跳过登录验证'); + // 更新本地存储的用户信息 + wx.setStorageSync('userInfo', userRes.data); + // 继续执行后续逻辑 + } else { + // 用户不存在,需要登录 + console.log('用户不存在于数据库中,需要登录'); + // 保存当前表单数据 + this.saveSettlementProgress(); + // 直接显示一键登录弹窗 + this.setData({ + showOneKeyLoginModal: true + }); + return; // 取消提交申请 + } + } catch (error) { + console.error('查询用户信息失败:', error); + // 查询失败,可能是网络问题或其他原因,继续使用本地存储的信息 + console.log('查询失败,继续使用本地存储的用户信息:', openid, userId); + } + console.log('使用用户信息提交申请:', openid, userId); // 先上传所有文件 @@ -697,27 +697,7 @@ Page({ return; } - // 检查用户是否已经获取手机号 - let userInfo = wx.getStorageSync('userInfo'); - if (!userInfo || !userInfo.phoneNumber || userInfo.phoneNumber === '未绑定') { - wx.showToast({ - title: '请先授权手机号', - icon: 'none' - }); - // 显示登录弹窗,引导用户授权手机号 - this.setData({ - showAuthModal: true - }); - return; - } - - // 如果用户已经获取手机号,确保手机号字段正确赋值 - if (userInfo.phoneNumber && userInfo.phoneNumber !== '未绑定') { - submitData.phoneNumber = userInfo.phoneNumber; - contactPhone = userInfo.phoneNumber; - console.log('使用登录获取的手机号:', contactPhone); - } - + // 先检查所有必填表单字段 if (!this.data.collaborationid) { wx.showToast({ title: '请选择合作商身份', @@ -742,6 +722,21 @@ Page({ return; } + // 检查用户是否已经获取手机号 + let userInfo = wx.getStorageSync('userInfo'); + if (!userInfo || !userInfo.phoneNumber || userInfo.phoneNumber === '未绑定') { + // 直接显示一键登录弹窗,引导用户授权手机号 + this.setData({ + showOneKeyLoginModal: true + }); + return; + } + + // 如果用户已经获取手机号,确保手机号字段正确赋值 + submitData.phoneNumber = userInfo.phoneNumber; + contactPhone = userInfo.phoneNumber; + console.log('使用登录获取的手机号:', contactPhone); + // 强制要求手机号 if (!contactPhone) { wx.showToast({ @@ -751,10 +746,6 @@ Page({ return; } - // 更新submitData中的手机号 - submitData.phoneNumber = contactPhone; - console.log('使用的手机号:', contactPhone); - // 验证省市区字段是否填写完整(用于构建region字段) if (!this.data.province || !this.data.city || !this.data.district) { wx.showToast({ @@ -764,6 +755,10 @@ Page({ return; } + // 更新submitData中的手机号 + submitData.phoneNumber = contactPhone; + console.log('使用的手机号:', contactPhone); + // 记录省市区字段内容 console.log('省市区字段内容:', this.data.province, this.data.city, this.data.district); @@ -873,14 +868,26 @@ Page({ console.log('用户完整数据:', userRes.data); // 更新用户的申请状态 if (userRes.data && userRes.data.partnerstatus) { - this.setData({ - partnerstatus: userRes.data.partnerstatus, - applicationId: userRes.data.applicationId - }); + // 构建要更新的数据对象,确保只设置存在的值 + const updateData = { + partnerstatus: userRes.data.partnerstatus + }; + + // 只有当applicationId存在且不为undefined时才设置 + if (userRes.data.applicationId) { + updateData.applicationId = userRes.data.applicationId; + } else { + updateData.applicationId = null; // 设置为null而不是undefined + } + + this.setData(updateData); + // 保存最新状态到本地存储 wx.setStorageSync('settlementStatus', userRes.data.partnerstatus); if (userRes.data.applicationId) { wx.setStorageSync('applicationId', userRes.data.applicationId); + } else { + wx.removeStorageSync('applicationId'); // 如果不存在则移除本地存储 } } }).catch(err => { @@ -960,75 +967,182 @@ Page({ // 关闭登录弹窗 this.setData({ - showAuthModal: false + showOneKeyLoginModal: false }); - if (e.detail.errMsg === 'getPhoneNumber:ok') { - // 用户同意授权 - wx.showLoading({ - title: '登录中...', - mask: true + // 首先检查用户是否拒绝授权 + if (e.detail.errMsg !== 'getPhoneNumber:ok') { + console.log('用户拒绝授权手机号'); + wx.showToast({ + title: '您已拒绝授权,操作已取消', + icon: 'none' }); + return; + } + // 用户同意授权 + wx.showLoading({ + title: '登录中...', + mask: true + }); + + try { + // 引入API服务 + const API = require('../../utils/api.js'); + + // 1. 先执行微信登录获取code + const loginRes = await new Promise((resolve, reject) => { + wx.login({ + success: resolve, + fail: reject + }); + }); + + if (!loginRes.code) { + throw new Error('获取登录code失败'); + } + + console.log('获取登录code成功:', loginRes.code); + + // 2. 使用code换取openid + const openidRes = await API.getOpenid(loginRes.code); + + // 增强版响应处理逻辑,支持多种返回格式 + let openid = null; + let userId = null; + let sessionKey = null; + + // 优先从data字段获取数据 + if (openidRes && openidRes.data && typeof openidRes.data === 'object') { + openid = openidRes.data.openid || openidRes.data.OpenID || null; + userId = openidRes.data.userId || openidRes.data.userid || null; + sessionKey = openidRes.data.session_key || openidRes.data.sessionKey || null; + } + + // 如果data为空或不存在,尝试从响应对象直接获取 + if (!openid && openidRes && typeof openidRes === 'object') { + console.warn('服务器返回格式可能不符合预期,data字段为空或不存在,但尝试从根对象提取信息:', openidRes); + openid = openidRes.openid || openidRes.OpenID || null; + userId = openidRes.userId || openidRes.userid || null; + sessionKey = openidRes.session_key || openidRes.sessionKey || null; + } + + // 检查服务器状态信息 + const isSuccess = openidRes && (openidRes.success === true || openidRes.code === 200); + + if (!openid) { + throw new Error('获取openid失败: ' + (openidRes && openidRes.message ? openidRes.message : '未知错误')); + } + + // 存储openid和session_key + wx.setStorageSync('openid', openid); + if (sessionKey) { + wx.setStorageSync('sessionKey', sessionKey); + } + + // 确保始终使用从服务器获取的正式用户ID + if (userId) { + wx.setStorageSync('userId', userId); + } + + console.log('获取openid成功并存储:', openid); + + // 3. 上传手机号加密数据到服务器解密 + const phoneData = { + ...e.detail, + openid: openid, + sessionKey: sessionKey || '' + }; + + console.log('准备上传手机号加密数据到服务器'); + const phoneRes = await API.uploadPhoneNumberData(phoneData); + + // 改进手机号解密结果的处理逻辑 + if (!phoneRes || (!phoneRes.success && !phoneRes.phoneNumber)) { + // 如果服务器返回格式不标准但包含手机号,也接受 + if (!(phoneRes && phoneRes.phoneNumber)) { + throw new Error('获取手机号失败: ' + (phoneRes && phoneRes.message ? phoneRes.message : '未知错误')); + } + } + + const phoneNumber = phoneRes.phoneNumber || '未绑定'; + console.log('获取手机号成功:', phoneNumber); + + // 4. 获取用户信息 + let userInfo = { + name: '微信用户', + avatarUrl: '/images/default-avatar.png', + phoneNumber: phoneNumber, + gender: 0, + country: '', + province: '', + city: '', + language: 'zh_CN' + }; + try { - // 调用API解密手机号 - const app = getApp(); - if (app && app.uploadPhoneNumberData) { - const result = await app.uploadPhoneNumberData(e.detail); - - if (result && result.success) { - // 保存用户信息到全局和本地存储 - const userInfo = { - name: '微信用户', - avatarUrl: '/images/default-avatar.png', - phoneNumber: result.phoneNumber || '未绑定', - gender: 0, - country: '', - province: '', - city: '', - language: 'zh_CN' - }; - - // 保存到全局数据 - app.globalData.userInfo = userInfo; - - // 保存到本地存储 - wx.setStorageSync('userInfo', userInfo); - - console.log('用户信息已保存:', userInfo); - - wx.hideLoading(); - wx.showToast({ - title: '登录成功', - icon: 'success', - duration: 1500, - complete: () => { - // 登录成功后关闭弹窗,让用户决定是否继续提交 - setTimeout(() => { - this.closeOneKeyLoginModal(); - this.setData({ showAuthModal: false }); - }, 1500); - } - }); - } else { - throw new Error(result.message || '登录失败'); - } - } else { - // 备用方案:模拟登录 - await this.performBackupLogin(); + // 尝试获取用户微信头像和昵称 + const userProfileRes = await new Promise((resolve, reject) => { + wx.getUserProfile({ + desc: '用于完善会员资料', + success: resolve, + fail: reject + }); + }); + + if (userProfileRes && userProfileRes.userInfo) { + userInfo = { + ...userInfo, + ...userProfileRes.userInfo + }; } - } catch (error) { - wx.hideLoading(); - console.error('手机号授权登录失败:', error); - wx.showToast({ - title: '登录失败,请重试', - icon: 'none' + } catch (err) { + console.warn('获取用户头像昵称失败:', err); + // 不影响主流程,使用默认值 + } + + // 5. 更新用户信息到服务器 + try { + await API.updateUserInfo({ + openid: openid, + phoneNumber: phoneNumber, + ...userInfo }); + console.log('用户信息已更新到服务器'); + } catch (err) { + console.warn('更新用户信息到服务器失败:', err); + // 不影响主流程,继续执行 } - } else { - // 用户拒绝授权 + + // 6. 保存用户信息到全局和本地存储 + const app = getApp(); + if (app) { + app.globalData.userInfo = userInfo; + } + + wx.setStorageSync('userInfo', userInfo); + console.log('用户信息已保存到本地存储:', userInfo); + + wx.hideLoading(); wx.showToast({ - title: '需要手机号授权才能继续', + title: '登录成功', + icon: 'success', + duration: 1500, + complete: () => { + // 登录成功后关闭弹窗,让用户继续提交申请 + setTimeout(() => { + this.closeOneKeyLoginModal(); + // 用户登录成功后,可以选择自动提交申请 + // 这里保持原逻辑,让用户手动点击提交 + }, 1500); + } + }); + + } catch (error) { + wx.hideLoading(); + console.error('手机号授权登录失败:', error); + wx.showToast({ + title: '登录失败,请重试', icon: 'none' }); } @@ -1182,15 +1296,15 @@ Page({ }); } - // 跳转到seller页面,不显示提示 + // 跳转到index页面,不显示提示 wx.reLaunch({ - url: '/pages/seller/index' + url: '/pages/index/index' }); }).catch(err => { console.error('获取用户数据失败:', err); - // 即使获取失败也跳转到seller页面 + // 即使获取失败也跳转到index页面 wx.reLaunch({ - url: '/pages/seller/index' + url: '/pages/index/index' }); }); }, @@ -1263,18 +1377,10 @@ Page({ completeApplication() { // 更新入驻状态为审核通过 this.updateGlobalSettlementStatus('approved'); - - wx.showToast({ - title: '感谢您的提交,我们将尽快与您联系!', - icon: 'success' - }); - - // 延迟跳转到seller页面 - setTimeout(() => { + // 返回首页 wx.reLaunch({ - url: '/pages/seller/index' + url: '/pages/index/index' }); - }, 1500); }, // 重置申请流程 diff --git a/pages/settlement/index.wxml b/pages/settlement/index.wxml index 63e07e5..558ff35 100644 --- a/pages/settlement/index.wxml +++ b/pages/settlement/index.wxml @@ -357,7 +357,7 @@ 授权登录 - 请授权获取您的手机号用于登录 + 授权您的手机号后才能提交申请