Files
AIclinicalresearch/backend/scripts/seed-modules.js
HaHafeng d595037316 feat(admin): Complete tenant management and module access control system
Major Features:
- Tenant management CRUD (list, create, edit, delete, module configuration)
- Dynamic module management system (modules table with 8 modules)
- Multi-tenant module permission merging (ModuleService)
- Module access control middleware (requireModule)
- User module permission API (GET /api/v1/auth/me/modules)
- Frontend module permission filtering (HomePage + TopNavigation)

Module Integration:
- RVW module integrated with PromptService (editorial + methodology)
- All modules (RVW/PKB/ASL/DC) added authenticate + requireModule middleware
- Fixed ReviewTask foreign key constraint (cross-schema issue)
- Removed all MOCK_USER_ID, unified to request.user?.userId

Prompt Management Enhancements:
- Module names displayed in Chinese (RVW -> 智能审稿)
- Enhanced version history with view content and rollback features
- List page shows both activeVersion and draftVersion columns

Database Changes:
- Added platform_schema.modules table
- Modified tenant_modules table (added index and UUID)
- Removed ReviewTask foreign key to public.users (cross-schema fix)
- Seeded 8 modules: RVW, PKB, ASL, DC, IIT, AIA, SSA, ST

Documentation Updates:
- Updated ADMIN module development status
- Updated TODO checklist (89% progress)
- Updated Prompt management plan (Phase 3.5.5 completed)
- Added module authentication specification

Files Changed: 80+
Status: All features tested and verified locally
Next: User management module development
2026-01-13 07:34:30 +08:00

117 lines
2.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 初始化 modules 表数据
*
* 运行: node scripts/seed-modules.js
*/
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
const MODULES = [
{
code: 'RVW',
name: '智能审稿',
description: '基于AI的稿件自动审查系统支持稿约规范性评估和方法学评估',
icon: 'FileTextOutlined',
is_active: true,
sort_order: 1,
},
{
code: 'PKB',
name: '个人知识库',
description: '个人文档管理与智能检索系统,支持多格式文档上传和语义搜索',
icon: 'BookOutlined',
is_active: true,
sort_order: 2,
},
{
code: 'ASL',
name: '智能文献',
description: '文献筛选与管理系统支持批量导入、AI辅助筛选和全文复筛',
icon: 'ReadOutlined',
is_active: true,
sort_order: 3,
},
{
code: 'DC',
name: '数据清洗',
description: '智能数据清洗与整理工具支持双模型提取和AI辅助数据处理',
icon: 'DatabaseOutlined',
is_active: true,
sort_order: 4,
},
{
code: 'IIT',
name: 'IIT管理',
description: 'IIT项目管理系统支持REDCap集成和项目协作',
icon: 'ProjectOutlined',
is_active: true,
sort_order: 5,
},
{
code: 'AIA',
name: '智能问答',
description: 'AI智能问答助手提供临床研究相关问题的智能解答',
icon: 'RobotOutlined',
is_active: true,
sort_order: 6,
},
{
code: 'SSA',
name: '智能统计分析',
description: 'AI驱动的智能统计分析系统提供高级统计方法和自动化分析',
icon: 'BarChartOutlined',
is_active: true,
sort_order: 7,
},
{
code: 'ST',
name: '统计工具',
description: '统计分析工具集,提供常用统计方法和数据可视化功能',
icon: 'LineChartOutlined',
is_active: true,
sort_order: 8,
},
];
async function main() {
console.log('🚀 开始初始化 modules 表...\n');
for (const module of MODULES) {
const result = await prisma.modules.upsert({
where: { code: module.code },
update: {
name: module.name,
description: module.description,
icon: module.icon,
is_active: module.is_active,
sort_order: module.sort_order,
},
create: module,
});
console.log(`${result.code} - ${result.name}`);
}
console.log('\n========== 当前 modules 表数据 ==========\n');
const allModules = await prisma.modules.findMany({
orderBy: { sort_order: 'asc' },
});
console.table(allModules.map(m => ({
代码: m.code,
名称: m.name,
描述: m.description?.substring(0, 30) + '...',
状态: m.is_active ? '✅ 上线' : '❌ 下线',
排序: m.sort_order,
})));
console.log('\n✨ 初始化完成!');
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());