import { useEffect, useState } from 'react'; import { Button, Collapse, Form, Input, Select, Typography, message } from 'antd'; import type { DevPlanSettingsDto, KnowledgeBaseOptionDto, LlmApiConfigOptionDto, } from '@dukang/shared-types'; import { request } from '../lib/api'; export default function DevPlanSettingsPage() { const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [llmOptions, setLlmOptions] = useState([]); const [kbOptions, setKbOptions] = useState([]); const [settingsForm] = Form.useForm(); async function loadAll() { setLoading(true); try { const [s, llm, kb] = await Promise.all([ request('/admin/dev-plan/settings'), request('/admin/llm-configs/options'), request('/admin/knowledge-bases/options'), ]); setLlmOptions(llm); setKbOptions(kb); settingsForm.setFieldsValue({ reviewAssistantLlmConfigId: s.reviewAssistantLlmConfigId, reviewAssistantKnowledgeBaseId: s.reviewAssistantKnowledgeBaseId, reviewAssistantPrompt: s.reviewAssistantPrompt, }); } catch (e) { message.error(e instanceof Error ? e.message : '加载失败'); } finally { setLoading(false); } } useEffect(() => { void loadAll(); }, []); async function saveSettings() { const values = await settingsForm.validateFields(); setSaving(true); try { await request('/admin/dev-plan/settings', { method: 'PUT', body: JSON.stringify(values), }); message.success('设置已保存'); } catch (e) { message.error(e instanceof Error ? e.message : '保存失败'); } finally { setSaving(false); } } return (
开发计划 · 开发设置 任务评审派发 Webhook 已迁移至「企微机器人 → 消息推送」,勾选「开发任务评审派发」条件即可。 仅用于技术支持批量预审(只读知识库 + LLM),preview 阶段不写库。 ({ value: o.id, label: o.name }))} /> ), }, ]} />
); }