refactor: 将数据存储模块移动到Pod资源配置部分

- 从顶部移除数据存储模块选择器
- 将数据存储模块选择器移动到Pod资源配置部分,替换原有的'数据模块'(选择已注册的工具)
- 将动态环境变量配置也移动到Pod资源配置部分
- 移除handleDeployAgent中对selectedDataTemplate的引用
This commit is contained in:
zhanggangyong
2026-01-13 12:51:04 +00:00
parent be8f217fcc
commit 9ab3cc9ada
+63 -94
View File
@@ -411,16 +411,6 @@ export default function DataToolsPage() {
const memoryRequest = `${podConfig.memoryGB}Gi`
const memoryLimit = `${podConfig.memoryGB}Gi` // 默认与request相同
// 收集选择的工具ID列表
const selectedTools: string[] = []
if (selectedDataTemplate) {
// 从工具列表中找到对应的工具ID
const tool = tools.find((t) => t.name === selectedDataTemplate || t.id === selectedDataTemplate)
if (tool?.id) {
selectedTools.push(tool.id)
}
}
// 框架类型(默认MCP)
const frameworkName = selectedFramework || "MCP"
@@ -434,7 +424,6 @@ export default function DataToolsPage() {
cpuLimit: cpuLimit, // 可选:CPU限制量
memoryRequest: memoryRequest, // 必填:内存请求量
memoryLimit: memoryLimit, // 可选:内存限制量
tools: selectedTools.length > 0 ? selectedTools : undefined, // 可选:工具ID列表
model: podConfig.model, // 可选:模型名称
}
@@ -462,7 +451,6 @@ export default function DataToolsPage() {
// 重置表单
setSelectedFramework("")
setSelectedServiceGateway("")
setSelectedDataTemplate("")
setSelectedApiDataTemplate("")
setEnvConfig({})
setAgentRole("")
@@ -867,78 +855,6 @@ export default function DataToolsPage() {
/>
</div>
{/* 数据存储模块选择 */}
<div className="space-y-2">
<Label>{t("数据存储模块", "Data Storage Module")} <span className="text-destructive">*</span></Label>
<Select
value={selectedApiDataTemplate}
onValueChange={(value) => {
setSelectedApiDataTemplate(value)
// 重置环境变量配置
setEnvConfig({})
}}
>
<SelectTrigger>
<SelectValue placeholder={t("选择数据存储模块", "Select data storage module")} />
</SelectTrigger>
<SelectContent>
{apiDataTemplates.length === 0 ? (
<SelectItem value="" disabled>
{t("暂无可用模块", "No modules available")}
</SelectItem>
) : (
apiDataTemplates.map((template) => (
<SelectItem key={template.template} value={template.template}>
<div className="flex flex-col">
<span>{template.template}</span>
{template.description && (
<span className="text-xs text-muted-foreground">{template.description}</span>
)}
</div>
</SelectItem>
))
)}
</SelectContent>
</Select>
<p className="text-xs text-muted-foreground">
{t("选择Agent使用的数据存储类型", "Select data storage type for the agent")}
</p>
</div>
{/* 动态环境变量配置(根据选择的模块) */}
{selectedApiDataTemplate && (() => {
const template = apiDataTemplates.find(t => t.template === selectedApiDataTemplate)
if (!template?.env_info) return null
const required = template.env_info.required || {}
const optional = template.env_info.optional || {}
return (
<div className="border rounded-lg p-4 space-y-3 bg-muted/30">
<h4 className="font-medium text-sm">{t("数据库连接配置", "Database Connection Config")}</h4>
{Object.entries(required).map(([key, desc]) => (
<div key={key} className="space-y-1">
<Label className="text-sm">{key} <span className="text-destructive">*</span></Label>
<Input
placeholder={String(desc)}
value={envConfig[key] || ""}
onChange={(e) => setEnvConfig({ ...envConfig, [key]: e.target.value })}
type={key.toLowerCase().includes('password') ? 'password' : 'text'}
/>
</div>
))}
{Object.entries(optional).map(([key, desc]) => (
<div key={key} className="space-y-1">
<Label className="text-sm text-muted-foreground">{key} {t("(可选)", "(Optional)")}</Label>
<Input
placeholder={String(desc)}
value={envConfig[key] || ""}
onChange={(e) => setEnvConfig({ ...envConfig, [key]: e.target.value })}
/>
</div>
))}
</div>
)
})()}
{/* 框架类型选择 */}
<div className="space-y-2">
<Label>{t("框架类型", "Framework Type")}</Label>
@@ -1019,31 +935,84 @@ export default function DataToolsPage() {
</div>
<div className="space-y-2">
<Label>{t("数据模块", "Data Module")}</Label>
<Select value={selectedDataTemplate} onValueChange={setSelectedDataTemplate}>
<Label>{t("数据存储模块", "Data Storage Module")} <span className="text-destructive">*</span></Label>
<Select
value={selectedApiDataTemplate}
onValueChange={(value) => {
setSelectedApiDataTemplate(value)
// 重置环境变量配置
setEnvConfig({})
}}
>
<SelectTrigger>
<SelectValue placeholder={t("选择已注册的工具", "Select registered tool")} />
<SelectValue placeholder={t("选择数据存储模块", "Select data storage module")} />
</SelectTrigger>
<SelectContent>
{dataTemplates.length === 0 ? (
<SelectItem value="none" disabled>
{t("暂无可用工具", "No available tools")}
{apiDataTemplates.length === 0 ? (
<SelectItem value="" disabled>
{t("暂无可用模块", "No modules available")}
</SelectItem>
) : (
dataTemplates.map((template) => (
<SelectItem key={template.name} value={template.name}>
{template.name}
apiDataTemplates.map((template) => (
<SelectItem key={template.template} value={template.template}>
<div className="flex flex-col">
<span>{template.template}</span>
{template.description && (
<span className="text-xs text-muted-foreground">{template.description}</span>
)}
</div>
</SelectItem>
))
)}
</SelectContent>
</Select>
<p className="text-xs text-muted-foreground">
{t("选择已注册的工具作为数据源", "Select registered tool as data source")}
{t("选择Agent使用的数据存储类型", "Select data storage type for the agent")}
</p>
</div>
</div>
{/* 动态环境变量配置(根据选择的数据存储模块) */}
{selectedApiDataTemplate && (() => {
const template = apiDataTemplates.find(t => t.template === selectedApiDataTemplate)
if (!template?.env_info) return null
const required = template.env_info.required || {}
const optional = template.env_info.optional || {}
return (
<div className="border rounded-lg p-4 space-y-3 bg-muted/30">
<h4 className="font-medium text-sm">{t("数据库连接配置", "Database Connection Config")}</h4>
{Object.entries(required).map(([key, desc]) => (
<div key={key} className="space-y-1">
<Label className="text-sm">{key} <span className="text-destructive">*</span></Label>
<Input
placeholder={String(desc)}
value={envConfig[key] || ""}
onChange={(e) => setEnvConfig({ ...envConfig, [key]: e.target.value })}
type={key.toLowerCase().includes('password') ? 'password' : 'text'}
/>
</div>
))}
{Object.keys(optional).length > 0 && (
<>
<div className="border-t pt-2 mt-2">
<p className="text-xs text-muted-foreground mb-2">{t("可选配置", "Optional Config")}</p>
</div>
{Object.entries(optional).map(([key, desc]) => (
<div key={key} className="space-y-1">
<Label className="text-sm text-muted-foreground">{key}</Label>
<Input
placeholder={String(desc)}
value={envConfig[key] || ""}
onChange={(e) => setEnvConfig({ ...envConfig, [key]: e.target.value })}
/>
</div>
))}
</>
)}
</div>
)
})()}
<div className="grid grid-cols-2 gap-4">
<div className="space-y-2">
<Label>{t("Agent个数", "Agent Count")}</Label>