feat(project): 初始化项目结构和配置

- 添加.gitignore和.flaskenv环境配置文件
- 创建Flask应用基础架构,包括models、services、utils模块
- 配置数据库模型User和Setting,集成SQLAlchemy和Alembic迁移
- 添加前端Vue项目结构,包含Element Plus组件库
- 配置前后端API路由和蓝prints模块
- 实现书籍下载服务BookService功能模块
- 添加代码规范配置.editorconfig、.oxfmtrc.json、.oxlintrc.json
- 配置VSCode推荐插件和前端构建工具链
- 实现文件服务FileService和相关业务逻辑
This commit is contained in:
2026-04-19 15:43:45 +08:00
parent b9fad6344f
commit ade1b6c9b0
63 changed files with 9610 additions and 1 deletions
+77
View File
@@ -0,0 +1,77 @@
<script setup lang="ts">
import {onMounted, ref} from 'vue'
import {torrent_statistics} from '@/api'
interface StatisticsData {
[key: string]: any
}
let aa = ref<StatisticsData>({})
let bb = ref("")
let cc = ref("")
let dd = ref("")
onMounted(async () => {
const res = await torrent_statistics()
console.log(res.message)
aa.value = res.message
})
const getSecondLevelOptions = () => {
if (!bb.value || !aa.value[bb.value]) {
return []
}
return aa.value[bb.value]
}
const getThirdLevelOptions = () => {
if (!bb.value || !cc.value || !aa.value[bb.value] || !aa.value[bb.value][cc.value]) {
return []
}
console.log(aa.value[bb.value])
return aa.value[bb.value][cc.value]
}
</script>
<template>
<el-main>
<el-card shadow="never">
<template #default>
<div v-for="(v,i) in getSecondLevelOptions()">
<div>{{i}}</div>
<el-button v-for="(v2,i2) in v" :key="i2">{{ v2 }}</el-button>
</div>
</template>
<template #footer>
<el-select style="width: 120px" placeholder="请选择" v-model="bb">
<el-option v-for="(v,i) in aa" :key="i" :label="i" :value="i"></el-option>
</el-select>
<el-select style="width: 120px" placeholder="请选择" v-model="cc">
<el-option v-for="(v,i) in getSecondLevelOptions()" :key="i" :label="i"
:value="i"></el-option>
</el-select>
<el-select style="width: 120px" placeholder="请选择" v-model="dd">
<el-option v-for="(v,i) in getThirdLevelOptions()" :key="i" :label="v"
:value="v"></el-option>
</el-select>
<el-button type="primary" @click="">
<el-icon>
<Plus/>
</el-icon>
添加
</el-button>
</template>
</el-card>
</el-main>
</template>
<style scoped lang="scss">
:deep(.el-card__body) {
//height: calc(100vh - 211px + 60px);
height: calc(100vh - 211px);
}
</style>