Initial Commit

This commit is contained in:
Rajuahamedkst 2025-09-12 16:08:17 +08:00
commit 1d71a02738
237 changed files with 64293 additions and 0 deletions

View file

@ -0,0 +1,291 @@
// 搜索用户页面
const app = getApp();
const friendAPI = require('../../../utils/friend-api.js');
Page({
data: {
// 搜索相关
searchKeyword: '',
searchResults: [],
loading: false,
hasSearched: false,
// 搜索类型
searchType: 'all', // all, nickname, custom_id, phone
searchTypes: [
{ value: 'all', label: '全部' },
{ value: 'nickname', label: '昵称' },
{ value: 'custom_id', label: 'ID' },
{ value: 'phone', label: '手机号' }
],
// 分页
currentPage: 1,
pageSize: 20,
hasMore: true,
// 系统信息
statusBarHeight: 0,
navBarHeight: 0
},
onLoad(options) {
console.log('搜索用户页面加载');
this.initSystemInfo();
// 如果有传入的搜索关键词,直接搜索
if (options.keyword) {
this.setData({
searchKeyword: decodeURIComponent(options.keyword)
});
this.performSearch();
}
},
// 初始化系统信息
initSystemInfo() {
try {
// 使用新的API替代已弃用的wx.getSystemInfoSync
const windowInfo = wx.getWindowInfo();
const menuButton = wx.getMenuButtonBoundingClientRect();
this.setData({
statusBarHeight: windowInfo.statusBarHeight,
navBarHeight: menuButton.bottom + 10
});
} catch (error) {
console.error('获取系统信息失败,使用兜底方案:', error);
// 兜底方案
try {
const systemInfo = wx.getSystemInfoSync();
const menuButton = wx.getMenuButtonBoundingClientRect();
this.setData({
statusBarHeight: systemInfo.statusBarHeight,
navBarHeight: menuButton.bottom + 10
});
} catch (fallbackError) {
console.error('兜底方案也失败了:', fallbackError);
// 设置默认值
this.setData({
statusBarHeight: 44,
navBarHeight: 88
});
}
}
},
// 返回上一页
goBack() {
wx.navigateBack();
},
// 搜索输入
onSearchInput(e) {
this.setData({
searchKeyword: e.detail.value
});
},
// 搜索确认
onSearchConfirm() {
this.performSearch();
},
// 清空搜索
clearSearch() {
this.setData({
searchKeyword: '',
searchResults: [],
hasSearched: false,
currentPage: 1,
hasMore: true
});
},
// 切换搜索类型
onSearchTypeChange(e) {
const searchType = e.currentTarget.dataset.type;
this.setData({
searchType
});
if (this.data.searchKeyword) {
this.performSearch();
}
},
// 执行搜索
async performSearch() {
const keyword = this.data.searchKeyword.trim();
if (!keyword) {
wx.showToast({
title: '请输入搜索关键词',
icon: 'none'
});
return;
}
this.setData({
loading: true,
currentPage: 1,
searchResults: [],
hasMore: true
});
try {
const response = await friendAPI.searchUsers(
keyword,
this.data.searchType,
1,
this.data.pageSize
);
// 根据正确的接口文档处理API响应结构
const searchData = response.data || {};
const users = searchData.users || [];
const total = searchData.total || 0;
this.setData({
searchResults: users,
hasSearched: true,
hasMore: users.length >= this.data.pageSize && this.data.currentPage * this.data.pageSize < total,
loading: false
});
if (users.length === 0) {
wx.showToast({
title: '未找到相关用户',
icon: 'none'
});
}
} catch (error) {
console.error('搜索失败:', error);
this.setData({
loading: false,
hasSearched: true
});
wx.showToast({
title: error.message || '搜索失败',
icon: 'none'
});
}
},
// 加载更多
async loadMore() {
if (!this.data.hasMore || this.data.loading) return;
this.setData({ loading: true });
try {
const response = await friendAPI.searchUsers(
this.data.searchKeyword,
this.data.searchType,
this.data.currentPage + 1,
this.data.pageSize
);
const searchData = response.data || {};
const newUsers = searchData.users || [];
const total = searchData.total || 0;
const newResults = [...this.data.searchResults, ...newUsers];
this.setData({
searchResults: newResults,
currentPage: this.data.currentPage + 1,
hasMore: newResults.length < total,
loading: false
});
} catch (error) {
console.error('加载更多失败:', error);
this.setData({ loading: false });
}
},
// 添加好友
async addFriend(e) {
const { customId, nickname } = e.currentTarget.dataset;
try {
// 显示输入框让用户输入验证消息
const result = await this.showAddFriendDialog(nickname);
if (!result.confirm) return;
wx.showLoading({ title: '发送中...' });
await friendAPI.addFriend(customId, result.message);
wx.hideLoading();
wx.showToast({
title: '好友请求已发送',
icon: 'success'
});
// 更新按钮状态
const updatedResults = this.data.searchResults.map(user => {
if (user.customId === customId) {
return {
...user,
relationStatus: 'pending',
actionText: '等待验证',
canAddFriend: false
};
}
return user;
});
this.setData({
searchResults: updatedResults
});
} catch (error) {
wx.hideLoading();
console.error('添加好友失败:', error);
wx.showToast({
title: error.message || '添加好友失败',
icon: 'none'
});
}
},
// 显示添加好友对话框
showAddFriendDialog(nickname) {
return new Promise((resolve) => {
wx.showModal({
title: `添加 ${nickname} 为好友`,
editable: true,
placeholderText: '请输入验证消息',
content: `我是 ${app.globalData.userInfo?.user?.nickname || ''}`,
success: (res) => {
resolve({
confirm: res.confirm,
message: res.content || `我是 ${app.globalData.userInfo?.user?.nickname || ''}`
});
},
fail: () => {
resolve({ confirm: false });
}
});
});
},
// 查看用户详情
viewUserDetail(e) {
const { customId } = e.currentTarget.dataset;
wx.navigateTo({
url: `/pages/social/user-detail/user-detail?customId=${customId}`
});
},
// 发送消息
sendMessage(e) {
const { customId, nickname } = e.currentTarget.dataset;
wx.navigateTo({
url: `/pages/message/chat/chat?targetId=${customId}&name=${encodeURIComponent(nickname)}&chatType=0`
});
}
});