# Sport Training System - UTSJSONObject Architecture ## 概述 (Overview) 这是一个完全基于 UTSJSONObject 的AI监测系统,专为解决 UTS Android 平台上的类型转换问题而设计。系统采用安全的数据访问模式,避免了传统 TypeScript 接口在 Android 平台上可能出现的 ClassCastException 错误。 ## 系统架构 (System Architecture) ### 核心设计原则 1. **UTSJSONObject 优先**: 所有数据处理都使用 UTSJSONObject,避免复杂的类型转换 2. **安全访问模式**: 使用 `safeGet()` 函数进行所有属性访问 3. **Android 兼容性**: 专门优化以在 UTS Android 平台上稳定运行 4. **类型安全**: 通过工具函数确保类型安全,而不依赖泛型转换 ### 目录结构 ``` pages/sport/ ├── index.uvue # 主入口页面 ├── types.uts # 核心类型系统和工具函数 ├── SUPACLINET_GUIDE.md # 直接使用 supaClient 链式调用指南 ├── teacher/ # 教师端功能 │ ├── dashboard.uvue # 教师工作台 │ ├── projects.uvue # 项目管理 │ ├── project-detail.uvue # 项目详情 │ ├── assignments.uvue # 作业管理 │ ├── create-assignment.uvue # 创建作业 │ ├── analytics.uvue # 数据分析 │ └── records.uvue # 记录管理 └── student/ # 学生端功能 ├── dashboard.uvue # 学生主页 ├── assignments.uvue # 作业列表 (已更新为 supaClient) ├── assignment-detail.uvue # 作业详情 ├── training-record.uvue # 训练记录 ├── record-detail.uvue # 记录详情 ├── records.uvue # 训练历史 ├── simple-records.uvue # 简化记录管理 (supaClient 示例) ├── progress.uvue # 进度跟踪 └── achievements.uvue # 成就系统 ``` ## 核心组件说明 ### 1. types.uts - 类型系统 这是整个系统的核心,提供了: #### 安全访问函数 ```typescript // 安全获取属性值 function safeGet(obj: UTSJSONObject, key: string, defaultValue: any): any // 项目相关访问器 function getProjectId(project: UTSJSONObject): string function getProjectDisplayName(project: UTSJSONObject): string function getProjectDescription(project: UTSJSONObject): string // 作业相关访问器 function getAssignmentId(assignment: UTSJSONObject): string function getAssignmentDisplayName(assignment: UTSJSONObject): string function getAssignmentStatus(assignment: UTSJSONObject): string ``` #### 格式化函数 ```typescript function formatDate(dateString: string, format?: string): string function formatDifficulty(difficulty: string): string function formatProjectStatus(status: string): string ``` #### Android 优化工具 ```typescript function processUTSJSONArray(data: any): Array function createEmptyUTSJSONObject(): UTSJSONObject function validateUTSJSONObject(obj: any): boolean ``` ## ️ 系统架构 ### 核心文件 - `types.uts` - UTSJSONObject 类型系统和安全访问函数 - `index.uvue` - 主入口,角色导航 - `SUPACLINET_GUIDE.md` - 直接使用 supaClient 的完整指南 ### 数据访问模式 ** 直接使用 AkSupa 链式调用** - 移除了 API 包装层,直接使用 `supaClient` 进行数据库操作 - 链式调用语法简洁:`supaClient.from('table').select('*').eq('id', value).execute()` - 支持实时订阅、文件上传、认证等完整功能 - 参考 `SUPACLINET_GUIDE.md` 获取详细使用说明 ### 数据库表结构 - `ak_training_projects` - 训练项目表 - `ak_assignments` - 作业分配表 - `ak_training_records` - 训练记录表 - `ak_users` - 用户信息表 ## 使用指南 ### 1. 数据访问模式 **❌ 错误的方式 (会在 Android 上出错):** ```typescript const project = response.data as Project const title = project.title // 可能导致 ClassCastException ``` **✅ 正确的方式:** ```typescript const project = response.data as UTSJSONObject const title = getProjectDisplayName(project) // 安全访问 ``` ### 2. 组件中的数据处理 **在模板中:** ```vue ``` **在脚本中:** ```typescript import { safeGet, getProjectId, getProjectDisplayName } from '../types.uts' const projects = ref>([]) function handleProjectsData(data: UTSJSONObject) { const projectList = safeGet(data, 'projects', []) if (projectList instanceof Array) { projects.value = projectList.map(item => item as UTSJSONObject) } } ``` ### 3. API 调用示例 ```typescript import { projectAPI, handleAPIError } from '../api.uts' async function loadProjects() { try { const response = await projectAPI.getProjects({ category: 'athletics', status: 'active' } as UTSJSONObject) if (isAPISuccess(response)) { const data = getAPIData(response) handleProjectsData(data) } } catch (error) { const errorInfo = handleAPIError(error) console.error('Load projects failed:', getAPIMessage(errorInfo)) } } ``` ## 页面功能详解 ### 教师端功能 #### 1. 教师工作台 (teacher/dashboard.uvue) - 统计概览卡片 - 快速操作入口 - 近期活动展示 - 响应式设计 #### 2. 项目管理 (teacher/projects.uvue) - 项目的增删改查 - 高级筛选和搜索 - 统计数据计算 - 卡片式布局 #### 3. 作业管理 (teacher/assignments.uvue) - 作业的创建和管理 - 批改状态跟踪 - 进度可视化 - 筛选和搜索功能 #### 4. 数据分析 (teacher/analytics.uvue) - 训练数据统计 - 成绩趋势分析 - 学生表现排名 - 图表数据展示 ### 学生端功能 #### 1. 学生主页 (student/dashboard.uvue) - 个人进度展示 - 待完成作业 - 快速操作入口 - 训练记录概览 #### 2. 训练记录 (student/training-record.uvue) - 计时器功能 - 成绩录入表单 - 动态字段适配 - 实时数据保存 #### 3. 训练历史 (student/records.uvue) - 历史记录查看 - 时间线展示 - 筛选和搜索 - 成绩趋势分析 #### 4. 成就系统 (student/achievements.uvue) - 成就列表展示 - 进度跟踪 - 积分和等级系统 - 激励机制 ## 最佳实践 ### 1. 数据安全访问 始终使用工具函数访问数据: ```typescript // 而不是直接访问 object.property const value = safeGet(object, 'property', defaultValue) ``` ### 2. 错误处理 使用统一的错误处理模式: ```typescript try { const result = await someAPI() // 处理成功结果 } catch (error) { const errorInfo = handleAPIError(error) // 处理错误 } ``` ### 3. 组件状态管理 使用 ref 和 UTSJSONObject: ```typescript const data = ref({}) const list = ref>([]) ``` ### 4. API 响应处理 检查 API 响应状态: ```typescript if (isAPISuccess(response)) { const data = getAPIData(response) // 处理数据 } else { const message = getAPIMessage(response) // 处理错误消息 } ``` ## 性能优化 ### 1. 数据处理优化 - 使用 `processUTSJSONArray()` 处理大型数组 - 避免深层嵌套的对象访问 - 合理使用默认值减少空值检查 ### 2. 内存管理 - 及时清理不需要的数据引用 - 使用分页加载大量数据 - 避免循环引用 ### 3. 网络优化 - 实现请求去重 - 使用适当的缓存策略 - 合并多个小请求 ## 部署和配置 ### 1. 环境配置 在 `api.uts` 中配置 API 基础 URL: ```typescript const API_BASE_URL = 'https://your-api-domain.com/api/v1' ``` ### 2. 路由注册 在 `pages.json` 中注册所有页面路由(已完成)。 ### 3. 权限配置 根据用户角色配置页面访问权限。 ## 故障排除 ### 常见问题 1. **ClassCastException 错误** - 确保使用 UTSJSONObject 而不是接口类型 - 使用 `safeGet()` 函数访问属性 2. **数据显示为空** - 检查 API 响应格式 - 验证数据访问路径 - 确认默认值设置 3. **Android 平台特定问题** - 使用 Android 优化的工具函数 - 避免复杂的泛型操作 - 简化数据结构 ### 调试技巧 1. 使用 `console.log()` 输出 UTSJSONObject 内容 2. 检查 API 响应的原始数据格式 3. 验证数据类型转换过程 4. 测试不同 Android 设备的兼容性 ## 扩展开发 ### 添加新功能 1. 在 `types.uts` 中添加新的访问器函数 2. 在 `api.uts` 中添加相应的 API 接口 3. 创建新的页面组件 4. 在 `pages.json` 中注册路由 ### 自定义组件 遵循 UTSJSONObject 数据处理模式: ```typescript // 组件 props 接收 UTSJSONObject props: { data: { type: Object as PropType, required: true } } // 在组件中安全访问数据 const title = computed(() => safeGet(props.data, 'title', '')) ``` ## 总结 这个基于 UTSJSONObject 的AI监测系统提供了: - **稳定性**: 完全兼容 UTS Android 平台 - **安全性**: 避免类型转换错误 - **可维护性**: 统一的数据访问模式 - **可扩展性**: 模块化的架构设计 - **用户体验**: 现代化的 UI 设计 通过遵循本文档中的最佳实践,开发者可以安全地扩展系统功能,同时保持在所有平台上的稳定运行。