commit 6146a0b27070d89bbdaa660d9cfd6b5809f2ec16 Author: madayouxi Date: Mon Nov 17 00:53:14 2025 +0800 添加 index.html diff --git a/index.html b/index.html new file mode 100644 index 0000000..c0144ab --- /dev/null +++ b/index.html @@ -0,0 +1,322 @@ +import React, { useState } from 'react'; +import { AlertCircle, CheckCircle, Code, Folder, FileText } from 'lucide-react'; + +const LingChairAndroidPlan = () => { + const [activeTab, setActiveTab] = useState('structure'); + + const projectStructure = { + name: 'LingChairApp', + children: [ + { + name: 'app/src/main', + children: [ + { + name: 'java/com/lingchair', + children: [ + { name: 'MainActivity.kt', type: 'file', desc: '主活动入口' }, + { name: 'LingChairApp.kt', type: 'file', desc: 'Application类' }, + { + name: 'network/', + children: [ + { name: 'SocketClient.kt', type: 'file', desc: 'Socket.IO客户端封装' }, + { name: 'ApiService.kt', type: 'file', desc: 'RPC方法调用' }, + { name: 'ApiCallback.kt', type: 'file', desc: '响应数据类' } + ] + }, + { + name: 'data/', + children: [ + { name: 'model/', children: [ + { name: 'User.kt', type: 'file' }, + { name: 'Chat.kt', type: 'file' }, + { name: 'Message.kt', type: 'file' }, + { name: 'JoinRequest.kt', type: 'file' } + ]}, + { name: 'repository/', children: [ + { name: 'UserRepository.kt', type: 'file' }, + { name: 'ChatRepository.kt', type: 'file' } + ]} + ] + }, + { + name: 'ui/', + children: [ + { name: 'auth/', children: [ + { name: 'LoginActivity.kt', type: 'file' }, + { name: 'RegisterActivity.kt', type: 'file' } + ]}, + { name: 'chat/', children: [ + { name: 'ChatListActivity.kt', type: 'file' }, + { name: 'ChatActivity.kt', type: 'file' }, + { name: 'ChatAdapter.kt', type: 'file' } + ]}, + { name: 'profile/', children: [ + { name: 'ProfileActivity.kt', type: 'file' } + ]} + ] + }, + { + name: 'viewmodel/', + children: [ + { name: 'AuthViewModel.kt', type: 'file' }, + { name: 'ChatViewModel.kt', type: 'file' } + ] + }, + { + name: 'util/', + children: [ + { name: 'PreferenceManager.kt', type: 'file', desc: 'SharedPreferences封装' }, + { name: 'HashUtil.kt', type: 'file', desc: 'SHA256加密' } + ] + } + ] + }, + { + name: 'res/', + children: [ + { name: 'layout/', type: 'folder', desc: 'XML布局文件' }, + { name: 'values/', type: 'folder', desc: '字符串、颜色、主题' }, + { name: 'drawable/', type: 'folder', desc: '图标和图片资源' } + ] + } + ] + }, + { name: 'build.gradle.kts', type: 'file', desc: 'Gradle构建配置' } + ] + }; + + const dependencies = [ + { name: 'Socket.IO Client', version: '2.1.0', purpose: 'WebSocket通信' }, + { name: 'Kotlin Coroutines', version: '1.7.3', purpose: '异步操作' }, + { name: 'Lifecycle ViewModel', version: '2.7.0', purpose: 'MVVM架构' }, + { name: 'RecyclerView', version: '1.3.2', purpose: '列表展示' }, + { name: 'Gson', version: '2.10.1', purpose: 'JSON解析' }, + { name: 'Material Components', version: '1.11.0', purpose: 'Material Design UI' }, + { name: 'Glide', version: '4.16.0', purpose: '图片加载' } + ]; + + const coreFeatures = [ + { + title: '用户认证', + items: ['注册(昵称、用户名、密码)', '登录(SHA256密码加密)', 'Token刷新机制', '自动重连'] + }, + { + title: '聊天功能', + items: ['获取最近聊天列表', '创建私聊/群聊', '发送/接收消息', '消息历史分页加载', '实时消息推送'] + }, + { + title: '用户管理', + items: ['个人资料编辑', '头像上传', '联系人管理', '好友列表'] + }, + { + title: '群组管理', + items: ['创建群组', '加入请求处理', '群设置修改', '群头像设置'] + } + ]; + + const implementationSteps = [ + { step: 1, title: '项目初始化', desc: '创建Android项目,配置依赖', status: 'pending' }, + { step: 2, title: '网络层', desc: '实现Socket.IO客户端和RPC封装', status: 'pending' }, + { step: 3, title: '数据模型', desc: '创建Bean类对应TypeScript接口', status: 'pending' }, + { step: 4, title: '认证模块', desc: '实现登录/注册界面和逻辑', status: 'pending' }, + { step: 5, title: '聊天列表', desc: '实现聊天列表UI和数据加载', status: 'pending' }, + { step: 6, title: '聊天界面', desc: '实现消息发送/接收和UI展示', status: 'pending' }, + { step: 7, title: '用户管理', desc: '实现个人资料和设置页面', status: 'pending' }, + { step: 8, title: '测试优化', desc: '功能测试、性能优化、错误处理', status: 'pending' } + ]; + + const FileTreeNode = ({ node, level = 0 }) => { + const [expanded, setExpanded] = useState(level < 2); + const hasChildren = node.children && node.children.length > 0; + + return ( +
+
hasChildren && setExpanded(!expanded)} + > + {hasChildren ? ( + {expanded ? '▼' : '▶'} + ) : ( + + {node.type === 'file' ? : } + + )} + + {node.name} + + {node.desc && - {node.desc}} +
+ {expanded && hasChildren && ( +
+ {node.children.map((child, idx) => ( + + ))} +
+ )} +
+ ); + }; + + return ( +
+
+
+
+

LingChair Android App

+

基于 Socket.IO 的原生聊天应用开发方案

+
+ +
+
+ {['structure', 'features', 'steps', 'tech'].map((tab) => ( + + ))} +
+
+ +
+ {activeTab === 'structure' && ( +
+

+ + 项目目录结构 +

+
+ +
+
+ )} + + {activeTab === 'features' && ( +
+

核心功能模块

+
+ {coreFeatures.map((feature, idx) => ( +
+

+ + {feature.title} +

+
    + {feature.items.map((item, i) => ( +
  • + + {item} +
  • + ))} +
+
+ ))} +
+
+ )} + + {activeTab === 'steps' && ( +
+

开发实施步骤

+
+ {implementationSteps.map((step, idx) => ( +
+
+ {step.step} +
+
+

{step.title}

+

{step.desc}

+
+
+ + 待开发 + +
+
+ ))} +
+
+ )} + + {activeTab === 'tech' && ( +
+

技术栈与依赖

+
+
+

+ + 开发环境 +

+
+
+

开发语言

+

Kotlin

+
+
+

最低版本

+

Android 6.0 (API 23)

+
+
+

架构模式

+

MVVM

+
+
+

构建工具

+

Gradle (Kotlin DSL)

+
+
+
+ +

主要依赖库

+
+ {dependencies.map((dep, idx) => ( +
+
+

{dep.name}

+

{dep.purpose}

+
+ + v{dep.version} + +
+ ))} +
+
+
+ )} +
+
+ +
+
+ +
+

注意事项

+
    +
  • • 登录时需要对密码进行 SHA256 加密,注册时直接传明文(需与服务端确认)
  • +
  • • Socket.IO 事件通道固定为 "The_White_Silk"
  • +
  • • 所有 RPC 调用需要处理 code != 200 的错误情况
  • +
  • • 实现 Token 过期自动刷新机制
  • +
  • • 需要处理 Socket 断线重连逻辑
  • +
+
+
+
+
+
+ ); +}; + +export default LingChairAndroidPlan; \ No newline at end of file