# bttoxin_webserver BtToxin 毒素数据库 Web 前端项目,基于 Vue 3 + TypeScript + Vite 构建。 ## 快速启动 ```bash # 安装依赖 pnpm install # 启动开发服务器 pnpm dev ``` 启动后访问 http://localhost:5173/ 查看前端页面。 ### 主要页面 | 路由 | 页面 | 功能 | |------|------|------| | `/` | 任务提交页 | 上传 .fna 文件并提交分析任务 | | `/:sessionId` | 任务监控页 | 实时查看任务执行状态和日志 | ## 项目结构 ``` bttoxin_webserver/ ├── public/ # 静态资源 │ └── favicon.ico ├── src/ │ ├── api/ # API 请求层 │ │ ├── http.ts # axios 实例、拦截器、错误规范 │ │ ├── types.ts # API 类型定义 │ │ ├── bttoxin.ts # 毒素接口:list/detail/download │ │ └── task.ts # 任务接口:createTask/getTaskState/downloadResult │ ├── components/ │ │ └── task/ # 任务监控组件 │ │ ├── TaskFlowPanel.vue # 工作流步骤可视化 │ │ ├── TaskStatusBar.vue # 任务状态概览栏 │ │ ├── TaskStepLogDrawer.vue # 步骤日志抽屉 │ │ └── TaskSubmitForm.vue # 任务提交表单 │ ├── composables/ # 组合式函数 │ │ ├── useAsync.ts # 通用异步状态封装 │ │ └── useTaskState.ts # 任务状态管理 │ ├── router/ # 路由配置 │ │ └── index.ts │ ├── stores/ # Pinia 状态管理 │ │ ├── counter.ts # 示例 store │ │ └── toxin.ts # 毒素业务 store │ ├── types/ # TypeScript 类型定义 │ │ └── task.ts # 任务相关类型 │ ├── utils/ # 工具函数 │ │ ├── error.ts # 错误格式化、文件下载 │ │ └── task.ts # 任务工具函数 │ ├── views/ # 页面视图 │ │ ├── TaskSubmitView.vue # 任务提交页 │ │ └── TaskMonitorView.vue# 任务监控页 │ ├── __tests__/ # 单元测试 │ │ └── App.spec.ts │ ├── App.vue # 根组件 │ └── main.ts # 入口文件 ├── .env.development # 开发环境变量 ├── .env.production # 生产环境变量 ├── index.html ├── package.json ├── tsconfig.json ├── vite.config.ts └── vitest.config.ts ``` ## 环境配置 开发环境 `.env.development`: ``` VITE_API_BASE_URL=http://127.0.0.1:8000 ``` 生产环境 `.env.production`: ``` VITE_API_BASE_URL=https://your.domain/api ``` ## API 请求使用方式 ### 1. 直接调用 API 函数 ```ts import { listToxins, getToxinDetail } from '@/api/bttoxin' // 获取列表 const data = await listToxins({ q: 'Cry', page: 1, pageSize: 20 }) console.log(data.items, data.total) // 获取详情 const detail = await getToxinDetail('toxin-id') ``` ### 2. 通过 Pinia Store 调用(推荐) ```vue ``` ### 3. 使用 useAsync 组合式函数 ```vue ``` ### 4. 文件下载 ```ts import { downloadFasta, downloadCsv } from '@/api/bttoxin' import { downloadBlob } from '@/utils/error' // 下载单个 FASTA const blob = await downloadFasta('toxin-id') downloadBlob(blob, 'toxin.fasta') // 下载 CSV const csvBlob = await downloadCsv({ family: 'Cry' }) downloadBlob(csvBlob, 'toxins.csv') ``` ## 开发指南 ### 安装依赖 ```bash pnpm install ``` ### 启动开发服务器 ```bash pnpm dev ``` 访问 http://localhost:5173/ 查看前端页面。 ### 构建生产版本 ```bash pnpm build ``` ### 预览生产构建 ```bash pnpm preview ``` ### 运行单元测试 ```bash pnpm test:unit ``` ### 类型检查 ```bash pnpm type-check ``` ### 代码检查 ```bash pnpm lint ``` ## 推荐 IDE 配置 [VS Code](https://code.visualstudio.com/) + [Vue (Official)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) ## 浏览器插件 - Chrome: [Vue.js devtools](https://chromewebstore.google.com/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd) - Firefox: [Vue.js devtools ](https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/)