用uniapp 及socket.io做一个简单聊天app 4
创始人
2024-11-10 03:12:21
0

界面如下:
在这里插入图片描述

      

注册页:
在这里插入图片描述

      

在store加入index.js:

import Vue from 'vue'; import Vuex from 'vuex'; import config from '@/config/config.js'; Vue.use(Vuex); export default new Vuex.Store({ 	state: { 		token: uni.getStorageSync('token') || '', // 从本地存储中获取 token 		user: null, // 用户信息 		friends: [], // 好友列表 		groups: [], 		lastMessages: {}, // 新增状态,用于存储最后一条消息 		hasMoreFriends: true // 新增状态用于跟踪是否有更多好友 	}, 	mutations: { 		SET_TOKEN(state, token) { 			state.token = token; 			uni.setStorageSync('token', token); // 保存到本地存储 		}, 		CLEAR_TOKEN(state) { 			state.token = ''; 			uni.removeStorageSync('token'); // 从本地存储中删除 		}, 		SET_USER(state, user) { 			state.user = user; 		}, 		SET_FRIENDS(state, { 			friends, 			hasMoreFriends 		}) { 			state.friends = friends; 			state.hasMoreFriends = hasMoreFriends; 		}, 		SET_GROUPS(state, groups) { 			state.groups = groups; 		},  		SET_LAST_MESSAGE(state, { 			id, 			message 		}) { 			Vue.set(state.lastMessages, id, message); // 动态设置最后一条消息 		} 	}, 	actions: { 		async fetchGroups({ 			commit 		}) { 			const token = uni.getStorageSync('token'); 			const [error, response] = await uni.request({ 				url: `${config.apiBaseUrl}/groups`, 				method: 'GET', 				header: { 					'Authorization': `Bearer ${token}` 				} 			}); 			if (!error && response.data.code == 0) { 				commit('SET_GROUPS', response.data.data); 			} 			logoutpub(response, commit); 		}, 		async createGroup({ 			state 		}, { 			name, 			description, 			avatar_url 		}) { 			try { 				const token = uni.getStorageSync('token'); 				const [error, response] = await uni.request({ 					url: `${config.apiBaseUrl}/groups`, 					method: 'POST', 					header: { 						'Authorization': `Bearer ${token}`, 						'Content-Type': 'application/json' 					}, 					data: { 						name, 						description, 						avatar_url 					} 				}); 				logoutpub(response, commit); 				return response.data; 			} catch (error) { 				throw error; 			} 		}, 		async login({ 			commit 		}, { 			username, 			password 		}) { 			try { 				const [error, response] = await uni.request({ 					url: `${config.apiBaseUrl}/login`, 					method: 'POST', 					data: { 						username, 						password 					} 				}); 				if (error) { 					throw new Error(`Request failed with error: ${error}`); 				} 				response.data = response.data.data; 				if (response.data.token) { 					commit('SET_TOKEN', response.data.token); 					uni.redirectTo({ 						url: '/pages/index/friends' 					}); 				} else { 					throw new Error('Invalid credentials'); 				} 			} catch (error) { 				console.error('Login error:', error); 				throw error; 			} 		}, 		async fetchUser({ 			commit 		}) { 			const token = uni.getStorageSync('token'); 			if (!token) return;  			try { 				const [error, response] = await uni.request({ 					url: `${config.apiBaseUrl}/user`, 					method: 'GET', 					header: { 						'Authorization': `Bearer ${token}` 					} 				}); 				logoutpub(response, commit);  				if (error) { 					throw new Error(`Request failed with error: ${error}`); 				}  				if (response.statusCode === 200) { 					const userData = response.data.data || response.data; 					commit('SET_USER', userData); 				} else { 					throw new Error('Failed to fetch user data'); 				} 			} catch (error) { 				console.error('Failed to fetch user:', error); 			} 		}, 		async fetchFriends({ 			commit 		}, { 			page = 1, 			perPage = 20 		}) { 			const token = uni.getStorageSync('token'); 			if (!token) return; 			try { 				const [error, response] = await uni.request({ 					url: `${config.apiBaseUrl}/friends`, 					method: 'GET', 					header: { 						'Authorization': `Bearer ${token}` 					}, 					data: { 						page, 						perPage 					} 				}); 				 				console.log("friends",response) 				 				logoutpub(response, commit); 				if (error) { 					throw new Error(`Request failed with error: ${error}`); 				} 				if (response.data) { 					commit('SET_FRIENDS', { 						friends: response.data.data, 						hasMoreFriends: response.data.hasMoreFriends 					}); 				} 			} catch (error) { 				console.error(error); 			} 		}, 		async handleNewMessage({ 			commit 		}, { 			id, 			message 		}) { 			try { 				// 假设这是接收消息的逻辑 				commit('SET_LAST_MESSAGE', { 					id, 					message 				}); 			} catch (error) { 				console.error('Failed to handle new message:', error); 			} 		}, 		logout({ 			commit 		}) { 			commit('CLEAR_TOKEN'); 			commit('SET_USER', null); 			commit('SET_FRIENDS', { 				friends: [], 				hasMoreFriends: true 			}); 			uni.redirectTo({ 				url: '/pages/index/login' // 跳转到登录页面 			}); 		} 	} });  // Helper function for handling token expiration function logoutpub(response, commit) { 	if (response.data && response.data.code === -1 && response.data.message === 'expire') { 		commit('CLEAR_TOKEN'); 		commit('SET_USER', null); 		commit('SET_FRIENDS', { 			friends: [], 			hasMoreFriends: true 		}); 		uni.redirectTo({ 			url: '/pages/index/login' // 跳转到登录页面 		}); 	} } 

在config创建config.js:

const config = {   apiBaseUrl: 'http://localhost:3000' }; export default config; 

用户登陆后进入到friends页。

在这里插入图片描述
界面代码为:

    

相关内容

热门资讯

透视辅助!AAPOKEr软件透... 透视辅助!AAPOKEr软件透明挂,aapoker外挂一贯存在有挂(详细猫腻教程)1、许多玩家不知道...
透视辅助!wPk都是存在有挂,... 透视辅助!wPk都是存在有挂,WPK机器人果然是有挂(详细真的有外卦挂教程);1、透视辅助!wPk都...
aapoker俱乐部(aapo... 1、aapoker俱乐部(aapoker德州俱乐部)aa扑克软件(辅助挂)真是真的有挂(详细辅助教程...
wepoke辅助!德州wepo... wepoke辅助!德州wepower原来是真的有挂,来玩德州app辅助工具是真的(详细ai代打辅助工...
玩家必备科普!德扑ai辅助脚本... 玩家必备科普!德扑ai辅助脚本,德扑之星系统好像真的是有挂(详细作弊教程);辅助器中分为三种模型:软...
透视辅助!微扑克好像有挂,微扑... 透视辅助!微扑克好像有挂,微扑克钻石竟然真的是有挂(详细系统发牌规律教程);辅助器中分为三种模型:软...
微扑克ai机器人!手机德州好像... 微扑克ai机器人!手机德州好像存在有挂,cloudpoker辅助器(详细辅助工具教程),您好,微扑克...
德扑之星规律(德扑之星记分牌)... 德扑之星规律(德扑之星记分牌)辅助挂(辅助挂)真是真的有挂(详细发牌教程)1、不需要AI权限,帮助你...
透视辅助!wPK辅助插件,wp... 透视辅助!wPK辅助插件,wpk作弊果然有挂(详细俱乐部教程)小薇(透视辅助)致您一封信;亲爱玩家:...
黑科技透明挂!we poker... 黑科技透明挂!we poker真是有挂,wepoke免费果然有挂(详细智能ai教程);1、ai辅助优...