feat: 支持绑定外部 bt_toxin 数据库 (2025-11-04 更新)
- docker_client.py: run_bttoxin_digger() 新增 bttoxin_db_dir 参数,支持挂载外部数据库 - run_single_fna_pipeline.py: 新增 --bttoxin_db_dir 参数,自动检测 external_dbs/bt_toxin - README.md: 添加 bttoxin_db 更新说明和 Docker 绑定文档 - external_dbs/bt_toxin: 添加 2025-11-04 版本数据库文件 测试验证: HAN055 样本毒素命名版本号变化 (Cry2Aa9→22, Cry2Ab35→41, Cry1Ia40→42, Vip3Aa7→79)
This commit is contained in:
@@ -1,12 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>BtToxin Pipeline</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"name": "bttoxin-frontend",
|
||||
"version": "1.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"vue": "^3.5.13",
|
||||
"vue-router": "^4.5.0",
|
||||
"pinia": "^2.3.0",
|
||||
"axios": "^1.7.9",
|
||||
"naive-ui": "^2.40.1",
|
||||
"@vicons/ionicons5": "^0.12.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^5.2.1",
|
||||
"vite": "^6.0.5"
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
<template>
|
||||
<n-config-provider :theme="darkTheme">
|
||||
<n-layout>
|
||||
<n-layout-header bordered>
|
||||
<n-space align="center" justify="space-between" style="padding: 16px">
|
||||
<n-h2>BtToxin Pipeline</n-h2>
|
||||
<n-menu mode="horizontal" :options="menuOptions" />
|
||||
</n-space>
|
||||
</n-layout-header>
|
||||
|
||||
<n-layout-content style="padding: 24px">
|
||||
<router-view />
|
||||
</n-layout-content>
|
||||
|
||||
<n-layout-footer bordered style="padding: 16px; text-align: center">
|
||||
BtToxin Pipeline © 2025
|
||||
</n-layout-footer>
|
||||
</n-layout>
|
||||
</n-config-provider>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { darkTheme } from 'naive-ui'
|
||||
import { h } from 'vue'
|
||||
import { RouterLink } from 'vue-router'
|
||||
|
||||
const menuOptions = [
|
||||
{
|
||||
label: () => h(RouterLink, { to: '/' }, { default: () => 'Home' }),
|
||||
key: 'home'
|
||||
},
|
||||
{
|
||||
label: () => h(RouterLink, { to: '/upload' }, { default: () => 'Upload' }),
|
||||
key: 'upload'
|
||||
},
|
||||
{
|
||||
label: () => h(RouterLink, { to: '/jobs' }, { default: () => 'Jobs' }),
|
||||
key: 'jobs'
|
||||
}
|
||||
]
|
||||
</script>
|
||||
@@ -1,14 +0,0 @@
|
||||
import { createApp } from 'vue'
|
||||
import { createPinia } from 'pinia'
|
||||
import naive from 'naive-ui'
|
||||
import App from './App.vue'
|
||||
import router from './router'
|
||||
|
||||
const app = createApp(App)
|
||||
const pinia = createPinia()
|
||||
|
||||
app.use(pinia)
|
||||
app.use(router)
|
||||
app.use(naive)
|
||||
|
||||
app.mount('#app')
|
||||
@@ -1,31 +0,0 @@
|
||||
import { createRouter, createWebHistory } from 'vue-router'
|
||||
|
||||
const routes = [
|
||||
{
|
||||
path: '/',
|
||||
name: 'Home',
|
||||
component: () => import('./views/Home.vue')
|
||||
},
|
||||
{
|
||||
path: '/upload',
|
||||
name: 'Upload',
|
||||
component: () => import('./views/Upload.vue')
|
||||
},
|
||||
{
|
||||
path: '/jobs',
|
||||
name: 'Jobs',
|
||||
component: () => import('./views/Jobs.vue')
|
||||
},
|
||||
{
|
||||
path: '/jobs/:id',
|
||||
name: 'JobDetail',
|
||||
component: () => import('./views/JobDetail.vue')
|
||||
}
|
||||
]
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHistory(),
|
||||
routes
|
||||
})
|
||||
|
||||
export default router
|
||||
@@ -1,22 +0,0 @@
|
||||
import axios from 'axios'
|
||||
|
||||
const api = axios.create({
|
||||
baseURL: '/api/v1',
|
||||
timeout: 30000
|
||||
})
|
||||
|
||||
export default {
|
||||
createJob(formData) {
|
||||
return api.post('/jobs/create', formData, {
|
||||
headers: { 'Content-Type': 'multipart/form-data' }
|
||||
})
|
||||
},
|
||||
|
||||
getJob(jobId) {
|
||||
return api.get(`/jobs/${jobId}`)
|
||||
},
|
||||
|
||||
getJobProgress(jobId) {
|
||||
return api.get(`/jobs/${jobId}/progress`)
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
<template>
|
||||
<n-space vertical size="large">
|
||||
<n-card title="Welcome to BtToxin Pipeline">
|
||||
<p>Automated Bacillus thuringiensis toxin mining system</p>
|
||||
</n-card>
|
||||
</n-space>
|
||||
</template>
|
||||
@@ -1,5 +0,0 @@
|
||||
<template>
|
||||
<n-card title="Job Details">
|
||||
<p>Job ID: {{ $route.params.id }}</p>
|
||||
</n-card>
|
||||
</template>
|
||||
@@ -1,5 +0,0 @@
|
||||
<template>
|
||||
<n-card title="Job List">
|
||||
<n-empty description="No jobs yet" />
|
||||
</n-card>
|
||||
</template>
|
||||
@@ -1,7 +0,0 @@
|
||||
<template>
|
||||
<n-card title="Upload Genome Files">
|
||||
<n-upload multiple>
|
||||
<n-button>Select Files</n-button>
|
||||
</n-upload>
|
||||
</n-card>
|
||||
</template>
|
||||
@@ -1,21 +0,0 @@
|
||||
import { defineConfig } from 'vite'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import { fileURLToPath, URL } from 'node:url'
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [vue()],
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': fileURLToPath(new URL('./src', import.meta.url))
|
||||
}
|
||||
},
|
||||
server: {
|
||||
port: 3000,
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: 'http://localhost:8000',
|
||||
changeOrigin: true
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user