From 5aac96fba3abedc3211f9d5917d8e3c6a2e70680 Mon Sep 17 00:00:00 2001 From: web-admin Date: Wed, 14 Oct 2026 06:14:59 +0000 Subject: [PATCH] platform/lms-adm-fe release promotion snapshot --- src/lib/curriculum.ts | 3 ++- src/pages/curriculum/CurriculumPage.tsx | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/lib/curriculum.ts b/src/lib/curriculum.ts index a05c691..d6bed9f 100644 --- a/src/lib/curriculum.ts +++ b/src/lib/curriculum.ts @@ -117,6 +117,7 @@ export type CourseAiSetting = { enabled: boolean; provider: 'OPENAI' | 'ANTHROPIC' | 'GEMINI' | 'QWEN'; model: string; + endpointUrl?: string | null; hasApiKey: boolean; updatedAt?: string | null; }; @@ -154,7 +155,7 @@ export async function getCourseAiSetting(accessToken: string, courseId: string): export async function updateCourseAiSetting( accessToken: string, courseId: string, - input: Pick & { apiKey?: string }, + input: Pick & { apiKey?: string; endpointUrl?: string }, ): Promise { const response = await fetch(`${LMS_API_BASE_URL}/instructor/courses/${encodeURIComponent(courseId)}/ai-setting`, { method: 'PUT', diff --git a/src/pages/curriculum/CurriculumPage.tsx b/src/pages/curriculum/CurriculumPage.tsx index af4b8bb..89de717 100644 --- a/src/pages/curriculum/CurriculumPage.tsx +++ b/src/pages/curriculum/CurriculumPage.tsx @@ -17,6 +17,8 @@ const AI_MODEL_DEFAULTS: Record = { QWEN: 'qwen3.7-plus', }; +const DEFAULT_QWEN_ENDPOINT = 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1'; + const AI_PROVIDER_LABELS: Record = { OPENAI: 'OpenAI', ANTHROPIC: 'Claude', @@ -187,6 +189,7 @@ export function CurriculumPage({ session, selectedCourseId }: { session: AuthSes const [aiEnabled, setAiEnabled] = useState(false); const [aiProvider, setAiProvider] = useState('OPENAI'); const [aiModel, setAiModel] = useState(AI_MODEL_DEFAULTS.OPENAI); + const [aiEndpointUrl, setAiEndpointUrl] = useState(DEFAULT_QWEN_ENDPOINT); const [aiApiKey, setAiApiKey] = useState(''); const [aiHasApiKey, setAiHasApiKey] = useState(false); const [aiConfiguredProvider, setAiConfiguredProvider] = useState(null); @@ -326,6 +329,7 @@ export function CurriculumPage({ session, selectedCourseId }: { session: AuthSes setAiEnabled(setting.enabled); setAiProvider(setting.provider); setAiModel(setting.model); + setAiEndpointUrl(setting.endpointUrl || DEFAULT_QWEN_ENDPOINT); setAiHasApiKey(setting.hasApiKey); setAiConfiguredProvider(setting.hasApiKey ? setting.provider : null); setAiApiKey(''); @@ -348,11 +352,13 @@ export function CurriculumPage({ session, selectedCourseId }: { session: AuthSes enabled: aiEnabled, provider: aiProvider, model: aiModel.trim(), + ...(aiProvider === 'QWEN' ? { endpointUrl: aiEndpointUrl.trim() } : {}), ...(aiApiKey.trim() ? { apiKey: aiApiKey.trim() } : {}), }); setAiEnabled(setting.enabled); setAiProvider(setting.provider); setAiModel(setting.model); + setAiEndpointUrl(setting.endpointUrl || DEFAULT_QWEN_ENDPOINT); setAiHasApiKey(setting.hasApiKey); setAiConfiguredProvider(setting.hasApiKey ? setting.provider : null); setAiApiKey(''); @@ -1317,6 +1323,7 @@ export function CurriculumPage({ session, selectedCourseId }: { session: AuthSes onClick={() => { setAiProvider(provider); setAiModel(AI_MODEL_DEFAULTS[provider]); + if (provider === 'QWEN' && !aiEndpointUrl.trim()) setAiEndpointUrl(DEFAULT_QWEN_ENDPOINT); setAiApiKey(''); }} className={`h-10 rounded-md border text-[13px] font-black transition disabled:cursor-not-allowed disabled:opacity-60 ${ @@ -1343,6 +1350,19 @@ export function CurriculumPage({ session, selectedCourseId }: { session: AuthSes ))} + {aiProvider === 'QWEN' ? ( + + ) : null}