You've already forked DataMate
feat(annotation): 添加模板受限编辑模式
- 引入 restrictedMode 属性控制表单编辑权限 - 在数据对象区域显示锁定状态提示 - 禁用受限制字段的输入功能 - 隐藏受限制时的删除和添加按钮 - 在标签控件区域显示可编辑状态提示 - 更新XML编辑器为只读模式并显示相应提示 - 添加模板选择状态跟踪功能
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { queryDatasetsUsingGet } from "@/pages/DataManagement/dataset.api";
|
||||
import { mapDataset } from "@/pages/DataManagement/dataset.const";
|
||||
import { Button, Form, Input, Modal, Select, message, Tabs, Radio, Typography } from "antd";
|
||||
import { Button, Form, Input, Modal, Select, message, Tabs, Radio } from "antd";
|
||||
import TextArea from "antd/es/input/TextArea";
|
||||
import { useEffect, useState } from "react";
|
||||
import {
|
||||
@@ -33,6 +33,8 @@ export default function CreateAnnotationTask({
|
||||
const [previewTaskData, setPreviewTaskData] = useState<Record<string, any>>({});
|
||||
const [configMode, setConfigMode] = useState<"template" | "custom">("template");
|
||||
const [templateEditTab, setTemplateEditTab] = useState<"visual" | "xml">("visual");
|
||||
// 是否已选择模板(用于启用受限编辑模式)
|
||||
const [hasSelectedTemplate, setHasSelectedTemplate] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
if (!open) return;
|
||||
@@ -76,6 +78,7 @@ export default function CreateAnnotationTask({
|
||||
setPreviewTaskData({});
|
||||
setConfigMode("template");
|
||||
setTemplateEditTab("visual");
|
||||
setHasSelectedTemplate(false);
|
||||
}
|
||||
}, [open, manualForm]);
|
||||
|
||||
@@ -179,6 +182,15 @@ export default function CreateAnnotationTask({
|
||||
|
||||
// 当选择模板时,加载模板配置到表单
|
||||
const handleTemplateSelect = (value: string, option: any) => {
|
||||
// 处理清除选择的情况
|
||||
if (!value) {
|
||||
setHasSelectedTemplate(false);
|
||||
setCustomXml("");
|
||||
return;
|
||||
}
|
||||
|
||||
setHasSelectedTemplate(true);
|
||||
|
||||
if (option && option.config) {
|
||||
setCustomXml(option.config);
|
||||
}
|
||||
@@ -297,7 +309,7 @@ export default function CreateAnnotationTask({
|
||||
<Form.Item
|
||||
label="数据集"
|
||||
name="datasetId"
|
||||
rules={[{ required: true, message: "请选择数据集" }]}
|
||||
rules={[{ required: true, message: "请选择数据集" }]}
|
||||
>
|
||||
<Select
|
||||
placeholder="请选择数据集"
|
||||
@@ -440,23 +452,29 @@ export default function CreateAnnotationTask({
|
||||
setTemplateEditTab(key as "visual" | "xml");
|
||||
}}
|
||||
size="small"
|
||||
items={[
|
||||
items={[
|
||||
{
|
||||
key: "visual",
|
||||
label: "可视化配置",
|
||||
children: (
|
||||
<div style={{ maxHeight: '350px', overflowY: 'auto' }}>
|
||||
<TemplateConfigurationForm form={manualForm} />
|
||||
<TemplateConfigurationForm
|
||||
form={manualForm}
|
||||
restrictedMode={hasSelectedTemplate}
|
||||
/>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
key: "xml",
|
||||
label: "XML编辑器(高级)",
|
||||
label: hasSelectedTemplate ? "XML配置(只读)" : "XML编辑器(高级)",
|
||||
children: (
|
||||
<div>
|
||||
<div className="mb-2 text-xs text-gray-500">
|
||||
直接编辑 Label Studio XML 配置。注意:在此修改后切换回可视化配置可能会丢失部分高级设置。
|
||||
{hasSelectedTemplate
|
||||
? "基于模板创建时,XML 配置为只读。如需完全自定义,请切换'自定义配置'模式。"
|
||||
: "直接编辑 Label Studio XML 配置。注意:在此修改后切换回可视化配置可能会丢失部分高级设置。"
|
||||
}
|
||||
</div>
|
||||
<TextArea
|
||||
rows={10}
|
||||
@@ -464,6 +482,7 @@ export default function CreateAnnotationTask({
|
||||
onChange={(e) => setCustomXml(e.target.value)}
|
||||
placeholder="<View>...</View>"
|
||||
style={{ fontFamily: 'monospace', fontSize: 12 }}
|
||||
disabled={hasSelectedTemplate}
|
||||
/>
|
||||
</div>
|
||||
),
|
||||
@@ -486,7 +505,7 @@ export default function CreateAnnotationTask({
|
||||
onCancel={() => setShowPreview(false)}
|
||||
title="标注界面预览"
|
||||
width={1000}
|
||||
footer={[
|
||||
footer={[
|
||||
<Button key="close" onClick={() => setShowPreview(false)}>
|
||||
关闭
|
||||
</Button>
|
||||
@@ -506,4 +525,4 @@ export default function CreateAnnotationTask({
|
||||
</Modal>
|
||||
</>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user