修改问题.
This commit is contained in:
parent
b7b399ba66
commit
3468be4716
|
|
@ -15,7 +15,9 @@ import { get, post } from './request'
|
|||
* @returns {Promise<Object>} 推荐用户列表
|
||||
*/
|
||||
export async function getRecommend(pageIndex = 1, pageSize = 10) {
|
||||
const response = await get('/users/recommend', { pageIndex, pageSize }, { needAuth: false })
|
||||
// 如果用户已登录,发送token以便后端排除当前用户
|
||||
const token = uni.getStorageSync('token')
|
||||
const response = await get('/users/recommend', { pageIndex, pageSize }, { needAuth: !!token })
|
||||
return response
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ const ENV = {
|
|||
}
|
||||
|
||||
// 当前环境 - 开发时使用 development,打包时改为 production
|
||||
const CURRENT_ENV = 'production'
|
||||
const CURRENT_ENV = 'development'
|
||||
|
||||
// 导出配置
|
||||
export const config = {
|
||||
|
|
|
|||
|
|
@ -585,6 +585,7 @@
|
|||
import { ref, reactive, computed, onMounted, watch } from 'vue'
|
||||
import { useUserStore } from '@/store/user.js'
|
||||
import { createOrUpdate, getMyProfile, uploadPhotos, deletePhoto, cleanupOrphanPhotos } from '@/api/profile.js'
|
||||
import { decryptPhone } from '@/api/user.js'
|
||||
import { generateNickname, getBirthYearRange } from '@/utils/format.js'
|
||||
import config from '@/config/index.js'
|
||||
|
||||
|
|
@ -1095,15 +1096,19 @@ const handleChoosePhoto = () => {
|
|||
const handleDeletePhoto = async (index) => {
|
||||
const photo = formData.photos[index]
|
||||
|
||||
if (photo.id) {
|
||||
try {
|
||||
await deletePhoto(photo.id)
|
||||
} catch (error) {
|
||||
console.error('删除照片失败:', error)
|
||||
}
|
||||
}
|
||||
uni.showLoading({ title: '删除中...' })
|
||||
|
||||
formData.photos.splice(index, 1)
|
||||
try {
|
||||
if (photo.id) {
|
||||
await deletePhoto(photo.id)
|
||||
}
|
||||
formData.photos.splice(index, 1)
|
||||
} catch (error) {
|
||||
console.error('删除照片失败:', error)
|
||||
uni.showToast({ title: '删除失败', icon: 'none' })
|
||||
} finally {
|
||||
uni.hideLoading()
|
||||
}
|
||||
}
|
||||
|
||||
// 手机号验证 - 处理微信获取手机号回调
|
||||
|
|
@ -1123,7 +1128,6 @@ const handleGetPhoneNumber = async (e) => {
|
|||
uni.showLoading({ title: '验证中...' })
|
||||
|
||||
try {
|
||||
const { decryptPhone } = await import('@/api/user.js')
|
||||
const res = await decryptPhone(code)
|
||||
|
||||
if (res && res.code === 0 && res.data?.phone) {
|
||||
|
|
@ -1322,6 +1326,12 @@ const loadProfile = async () => {
|
|||
formData.introduction = profile.introduction || ''
|
||||
formData.weChatNo = profile.weChatNo || ''
|
||||
|
||||
// 手机号
|
||||
if (profile.phone) {
|
||||
formData.phone = profile.phone
|
||||
phoneVerified.value = true
|
||||
}
|
||||
|
||||
// 照片 - 需要拼接完整URL(使用统一配置的地址)
|
||||
if (profile.photos && profile.photos.length > 0) {
|
||||
formData.photos = profile.photos.map(p => ({
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ export default {
|
|||
// 上传图片(使用统一配置的地址)
|
||||
const uploadRes = await new Promise((resolve, reject) => {
|
||||
uni.uploadFile({
|
||||
url: `${API_BASE_URL}/api/app/upload/image`,
|
||||
url: `${API_BASE_URL}/upload/image`,
|
||||
filePath: tempFilePath,
|
||||
name: 'file',
|
||||
header: {
|
||||
|
|
|
|||
|
|
@ -110,6 +110,11 @@ public class ProfileRequest
|
|||
/// </summary>
|
||||
public string WeChatNo { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 手机号
|
||||
/// </summary>
|
||||
public string? Phone { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 择偶要求
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -130,6 +130,11 @@ public class ProfileResponse
|
|||
/// </summary>
|
||||
public string WeChatNo { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 手机号
|
||||
/// </summary>
|
||||
public string? Phone { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审核状态:0待审核 1已通过 2已拒绝
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ public class ProfileService : IProfileService
|
|||
private readonly IRepository<UserProfile> _profileRepository;
|
||||
private readonly IRepository<UserPhoto> _photoRepository;
|
||||
private readonly IRepository<UserRequirement> _requirementRepository;
|
||||
private readonly IRepository<DailyRecommend> _recommendRepository;
|
||||
private readonly IStorageProvider _storageProvider;
|
||||
private readonly ILogger<ProfileService> _logger;
|
||||
|
||||
|
|
@ -34,6 +35,7 @@ public class ProfileService : IProfileService
|
|||
IRepository<UserProfile> profileRepository,
|
||||
IRepository<UserPhoto> photoRepository,
|
||||
IRepository<UserRequirement> requirementRepository,
|
||||
IRepository<DailyRecommend> recommendRepository,
|
||||
IStorageProvider storageProvider,
|
||||
ILogger<ProfileService> logger)
|
||||
{
|
||||
|
|
@ -41,6 +43,7 @@ public class ProfileService : IProfileService
|
|||
_profileRepository = profileRepository;
|
||||
_photoRepository = photoRepository;
|
||||
_requirementRepository = requirementRepository;
|
||||
_recommendRepository = recommendRepository;
|
||||
_storageProvider = storageProvider;
|
||||
_logger = logger;
|
||||
}
|
||||
|
|
@ -146,9 +149,18 @@ public class ProfileService : IProfileService
|
|||
user.Nickname = nickname;
|
||||
user.Gender = request.ChildGender;
|
||||
user.IsProfileCompleted = true;
|
||||
if (!string.IsNullOrEmpty(request.Phone))
|
||||
{
|
||||
user.Phone = request.Phone;
|
||||
}
|
||||
user.UpdateTime = DateTime.Now;
|
||||
await _userRepository.UpdateAsync(user);
|
||||
|
||||
// 6. 清除今日推荐(性别等关键信息变更后需要重新生成推荐)
|
||||
var today = DateTime.Today;
|
||||
await _recommendRepository.DeleteAsync(r => r.UserId == userId && r.RecommendDate == today);
|
||||
_logger.LogInformation("已清除用户今日推荐: UserId={UserId}", userId);
|
||||
|
||||
return profileId;
|
||||
}
|
||||
|
||||
|
|
@ -202,6 +214,7 @@ public class ProfileService : IProfileService
|
|||
Nickname = user.Nickname,
|
||||
XiangQinNo = user.XiangQinNo,
|
||||
Avatar = user.Avatar,
|
||||
Phone = user.Phone,
|
||||
Relationship = profile.Relationship,
|
||||
Surname = profile.Surname,
|
||||
ChildGender = profile.ChildGender,
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ public class RecommendService : IRecommendService
|
|||
// 未登录用户,返回默认推荐(随机推荐已审核通过的用户)
|
||||
if (userId <= 0)
|
||||
{
|
||||
return await GetDefaultRecommendAsync(pageIndex, pageSize);
|
||||
return await GetDefaultRecommendAsync(pageIndex, pageSize, 0);
|
||||
}
|
||||
|
||||
// 获取今日推荐列表
|
||||
|
|
@ -92,8 +92,15 @@ public class RecommendService : IRecommendService
|
|||
|
||||
if (!recommends.Any())
|
||||
{
|
||||
// 如果今日没有推荐,生成新的推荐
|
||||
await GenerateDailyRecommendForUserAsync(userId);
|
||||
// 如果今日没有推荐,尝试生成新的推荐
|
||||
var generatedCount = await GenerateDailyRecommendForUserAsync(userId);
|
||||
|
||||
// 如果生成失败(用户资料未完成等),返回默认推荐但排除当前用户
|
||||
if (generatedCount == 0)
|
||||
{
|
||||
return await GetDefaultRecommendAsync(pageIndex, pageSize, userId);
|
||||
}
|
||||
|
||||
recommends = await _recommendRepository.GetListAsync(
|
||||
r => r.UserId == userId && r.RecommendDate == today);
|
||||
}
|
||||
|
|
@ -163,13 +170,16 @@ public class RecommendService : IRecommendService
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取默认推荐列表(未登录用户)
|
||||
/// 获取默认推荐列表(未登录用户或无每日推荐时)
|
||||
/// </summary>
|
||||
private async Task<PagedResult<RecommendUserResponse>> GetDefaultRecommendAsync(int pageIndex, int pageSize)
|
||||
/// <param name="pageIndex">页码</param>
|
||||
/// <param name="pageSize">每页数量</param>
|
||||
/// <param name="excludeUserId">要排除的用户ID(当前登录用户)</param>
|
||||
private async Task<PagedResult<RecommendUserResponse>> GetDefaultRecommendAsync(int pageIndex, int pageSize, long excludeUserId = 0)
|
||||
{
|
||||
// 获取已完成资料、状态正常的用户
|
||||
// 获取已完成资料、状态正常的用户,排除当前用户
|
||||
var allUsers = await _userRepository.GetListAsync(
|
||||
u => u.IsProfileCompleted && u.Status == 1);
|
||||
u => u.IsProfileCompleted && u.Status == 1 && (excludeUserId == 0 || u.Id != excludeUserId));
|
||||
|
||||
// 过滤出审核通过的用户
|
||||
var validUsers = new List<(Core.Entities.Biz.User User, Core.Entities.Biz.UserProfile Profile)>();
|
||||
|
|
|
|||
|
|
@ -99,10 +99,27 @@ public class WeChatService : IWeChatService
|
|||
}
|
||||
|
||||
var url = $"https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token={accessToken}";
|
||||
var requestBody = new { code };
|
||||
var requestBodyJson = System.Text.Json.JsonSerializer.Serialize(new { code });
|
||||
|
||||
var response = await _httpClient.PostAsJsonAsync(url, requestBody);
|
||||
var result = await response.Content.ReadFromJsonAsync<GetPhoneNumberResponse>();
|
||||
var content = new StringContent(requestBodyJson, System.Text.Encoding.UTF8, "application/json");
|
||||
var response = await _httpClient.PostAsync(url, content);
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
|
||||
if (string.IsNullOrWhiteSpace(responseContent))
|
||||
{
|
||||
_logger.LogError("微信接口返回空响应");
|
||||
await _cache.RemoveAsync(AccessTokenCacheKey);
|
||||
return null;
|
||||
}
|
||||
|
||||
var result = System.Text.Json.JsonSerializer.Deserialize<GetPhoneNumberResponse>(responseContent);
|
||||
|
||||
// 如果是AccessToken过期,清除缓存
|
||||
if (result?.ErrCode == 40001 || result?.ErrCode == 42001)
|
||||
{
|
||||
_logger.LogWarning("AccessToken已过期,清除缓存");
|
||||
await _cache.RemoveAsync(AccessTokenCacheKey);
|
||||
}
|
||||
|
||||
if (result?.ErrCode != 0)
|
||||
{
|
||||
|
|
@ -365,7 +382,9 @@ public class WeChatService : IWeChatService
|
|||
$"&appid={_options.MiniProgram.AppId}" +
|
||||
$"&secret={_options.MiniProgram.AppSecret}";
|
||||
|
||||
var response = await _httpClient.GetFromJsonAsync<AccessTokenResponse>(url);
|
||||
var httpResponse = await _httpClient.GetAsync(url);
|
||||
var responseContent = await httpResponse.Content.ReadAsStringAsync();
|
||||
var response = System.Text.Json.JsonSerializer.Deserialize<AccessTokenResponse>(responseContent);
|
||||
|
||||
if (response == null || string.IsNullOrEmpty(response.AccessToken))
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user