feat(rvw): complete journal config center MVP and tenant login routing
Deliver the RVW V4.0 journal configuration center across backend, frontend, migration, and docs with zh/en editorial baseline support and tenant-level prompt/template overrides. Unify tenant login to /:tenantCode/login and auto-enable RVW module when tenant type is JOURNAL to prevent post-login access gaps. Made-with: Cursor
This commit is contained in:
@@ -20,14 +20,20 @@ function getAuthHeaders(): HeadersInit {
|
||||
|
||||
// ==================== 类型定义 ====================
|
||||
|
||||
export type TenantType = 'HOSPITAL' | 'PHARMA' | 'INTERNAL' | 'PUBLIC';
|
||||
export type TenantType = 'HOSPITAL' | 'PHARMA' | 'JOURNAL' | 'INTERNAL' | 'PUBLIC';
|
||||
export type TenantStatus = 'ACTIVE' | 'SUSPENDED' | 'EXPIRED';
|
||||
export type JournalLanguage = 'ZH' | 'EN' | 'OTHER';
|
||||
|
||||
export interface TenantInfo {
|
||||
id: string;
|
||||
code: string;
|
||||
name: string;
|
||||
type: TenantType;
|
||||
journalLanguage?: JournalLanguage | null;
|
||||
journalFullName?: string | null;
|
||||
logoUrl?: string | null;
|
||||
brandColor?: string | null;
|
||||
loginBackgroundUrl?: string | null;
|
||||
status: TenantStatus;
|
||||
contactName?: string | null;
|
||||
contactPhone?: string | null;
|
||||
@@ -60,6 +66,11 @@ export interface CreateTenantRequest {
|
||||
code: string;
|
||||
name: string;
|
||||
type: TenantType;
|
||||
journalLanguage?: JournalLanguage;
|
||||
journalFullName?: string;
|
||||
logoUrl?: string;
|
||||
brandColor?: string;
|
||||
loginBackgroundUrl?: string;
|
||||
contactName?: string;
|
||||
contactPhone?: string;
|
||||
contactEmail?: string;
|
||||
@@ -69,6 +80,12 @@ export interface CreateTenantRequest {
|
||||
|
||||
export interface UpdateTenantRequest {
|
||||
name?: string;
|
||||
type?: TenantType;
|
||||
journalLanguage?: JournalLanguage | null;
|
||||
journalFullName?: string | null;
|
||||
logoUrl?: string | null;
|
||||
brandColor?: string | null;
|
||||
loginBackgroundUrl?: string | null;
|
||||
contactName?: string;
|
||||
contactPhone?: string;
|
||||
contactEmail?: string;
|
||||
@@ -250,24 +267,30 @@ export async function fetchModuleList(): Promise<ModuleInfo[]> {
|
||||
export interface TenantRvwConfig {
|
||||
id: string;
|
||||
tenantId: string;
|
||||
editorialRules: unknown | null;
|
||||
editorialBaseStandard: 'zh' | 'en';
|
||||
editorialExpertPrompt: string | null;
|
||||
editorialHandlebarsTemplate: string | null;
|
||||
methodologyExpertPrompt: string | null;
|
||||
methodologyHandlebarsTemplate: string | null;
|
||||
dataForensicsLevel: string;
|
||||
finerWeights: Record<string, number> | null;
|
||||
dataForensicsExpertPrompt: string | null;
|
||||
dataForensicsHandlebarsTemplate: string | null;
|
||||
clinicalExpertPrompt: string | null;
|
||||
clinicalHandlebarsTemplate: string | null;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
/** 更新审稿配置请求 */
|
||||
export interface UpdateRvwConfigRequest {
|
||||
editorialRules?: unknown | null;
|
||||
editorialBaseStandard?: 'zh' | 'en';
|
||||
editorialExpertPrompt?: string | null;
|
||||
editorialHandlebarsTemplate?: string | null;
|
||||
methodologyExpertPrompt?: string | null;
|
||||
methodologyHandlebarsTemplate?: string | null;
|
||||
dataForensicsLevel?: string;
|
||||
finerWeights?: Record<string, number> | null;
|
||||
dataForensicsExpertPrompt?: string | null;
|
||||
dataForensicsHandlebarsTemplate?: string | null;
|
||||
clinicalExpertPrompt?: string | null;
|
||||
clinicalHandlebarsTemplate?: string | null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user