diff --git a/apps/dmp/src/modules/Admin/Dicom/List/columns.tsx b/apps/dmp/src/modules/Admin/Dicom/List/columns.tsx index 34ff424..6c54b50 100644 --- a/apps/dmp/src/modules/Admin/Dicom/List/columns.tsx +++ b/apps/dmp/src/modules/Admin/Dicom/List/columns.tsx @@ -1,5 +1,5 @@ import { TableColumnsType } from "antd"; -import { SeriesItemType, StudyItemType } from "."; +import { SeriesItemType, StudyItemType } from "./interface"; export const columnsForStudy: TableColumnsType = [ { title: "PatientID", dataIndex: "PatientID", key: "PatientID" }, diff --git a/apps/dmp/src/modules/Admin/Dicom/List/index.tsx b/apps/dmp/src/modules/Admin/Dicom/List/index.tsx index 239c02f..de8b9c7 100644 --- a/apps/dmp/src/modules/Admin/Dicom/List/index.tsx +++ b/apps/dmp/src/modules/Admin/Dicom/List/index.tsx @@ -4,48 +4,12 @@ import { useEffect, useState } from "react"; import { columnsForStudy, columnsForSeries } from "./columns"; import { DesktopOutlined, FileZipOutlined } from "@ant-design/icons"; import { openOHIFViewer } from "../Upload/util"; +import { SeriesItemType, StudyItemType } from "./interface"; interface DicomListProps { children?: JSX.Element; } -export type SeriesItemType = { - BodyPartExamined: string; - ContrastBolusAgent: string; - ID: string; - ImageOrientationPatient: string; - Instances: string[]; - Manufacturer: string; - Modality: string; - OperatorsName: string; - ProtocolName: string; - SeriesDate: string; - SeriesDescription: string; - SeriesInstanceUID: string; - SeriesNumber: string; - SeriesTime: string; - StationName: string; - Type: "study"; - tags: any; -}; - -export type StudyItemType = { - AccessionNumber: string; - ID: string; - InstitutionName: string; - PatientBirthDate: string; - PatientID: string; - PatientName: string; - PatientSex: string; - ReferringPhysicianName: string; - StudyDate: string; - StudyID: string; - StudyInstanceUID: string; - StudyTime: string; - Type: "series"; - subs: SeriesItemType[]; -}; - export const DicomList = (props: DicomListProps) => { const [dataSource, setDataSource] = useState([]); const [tableLoading, setTableLoading] = useState(false); diff --git a/apps/dmp/src/modules/Admin/Dicom/List/interface.tsx b/apps/dmp/src/modules/Admin/Dicom/List/interface.tsx new file mode 100644 index 0000000..6ef39bc --- /dev/null +++ b/apps/dmp/src/modules/Admin/Dicom/List/interface.tsx @@ -0,0 +1,40 @@ +export type SeriesItemType = { + BodyPartExamined: string; + ContrastBolusAgent: string; + ID: string; + ImageOrientationPatient: string; + Instances: string[]; + Manufacturer: string; + Modality: string; + OperatorsName: string; + ProtocolName: string; + SeriesDate: string; + SeriesDescription: string; + SeriesInstanceUID: string; + SeriesNumber: string; + SeriesTime: string; + StationName: string; + Type: "study"; + tags: { + PatientPosition: string; + BodyPartExamined: string; + SliceThickness: string; + }; +}; + +export type StudyItemType = { + AccessionNumber: string; + ID: string; + InstitutionName: string; + PatientBirthDate: string; + PatientID: string; + PatientName: string; + PatientSex: string; + ReferringPhysicianName: string; + StudyDate: string; + StudyID: string; + StudyInstanceUID: string; + StudyTime: string; + Type: "series"; + subs: SeriesItemType[]; +}; diff --git a/apps/dmp/src/modules/Admin/Label/LabelTree/index.tsx b/apps/dmp/src/modules/Admin/Label/LabelTree/index.tsx index 6afca21..a5a5210 100644 --- a/apps/dmp/src/modules/Admin/Label/LabelTree/index.tsx +++ b/apps/dmp/src/modules/Admin/Label/LabelTree/index.tsx @@ -23,6 +23,7 @@ import { CaretRightOutlined, CloseOutlined, EditOutlined, + FormOutlined, TagOutlined, } from "@ant-design/icons"; @@ -89,7 +90,7 @@ export const LabelTree = (props: LabelTreeProps) => { - { e.stopPropagation(); setActiveCategory(item); diff --git a/apps/dmp/src/modules/Annotator/Archive/index.tsx b/apps/dmp/src/modules/Annotator/Archive/index.tsx index 9e182ad..b7c2f88 100644 --- a/apps/dmp/src/modules/Annotator/Archive/index.tsx +++ b/apps/dmp/src/modules/Annotator/Archive/index.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from "react"; import { useDomain } from "@/hook/useDomain"; -import { Button, Space, Table, Tooltip } from "antd"; +import { Button, Modal, Select, Space, Table, Tooltip } from "antd"; import { columns } from "./columns"; import { DesktopOutlined, TagOutlined } from "@ant-design/icons"; import { openOHIFViewer } from "@/modules/Admin/Dicom/Upload/util"; @@ -9,10 +9,18 @@ interface ArchiveListProps { children?: JSX.Element; } +type CategoryItemType = { + labels: { name: string; id: number }[]; +}; + export const ArchiveList = (props: ArchiveListProps) => { - const [dataSource, setDataSource] = useState([]); + const [dataSource, setDataSource] = useState([]); const [tableLoading, setTableLoading] = useState(false); - const { userDomainService } = useDomain(); + const { userDomainService, labelDomainService } = useDomain(); + const [isModalOpen, setIsModalOpen] = useState(false); + const [labelOptions, setLabelOptions] = useState< + { label: string; value: string }[] + >([]); useEffect(() => { userDomainService.findArchiveTask().then((res) => { @@ -24,11 +32,40 @@ export const ArchiveList = (props: ArchiveListProps) => { }); }, [userDomainService]); + useEffect(() => { + labelDomainService.findLabelCategory().then((res) => { + const { code, data } = res; + if (code === 0) { + const labels = (data as CategoryItemType[]) + .map((i) => i.labels) + .flat() + .map((i) => ({ label: i.name, value: String(i.id) })); + setLabelOptions(labels); + } + }); + }, []); + const onViewDicom = (record: any) => { const { StudyInstanceUID, SeriesInstanceUID } = record; openOHIFViewer(StudyInstanceUID, SeriesInstanceUID); }; + const onLabelSelectChange = (labelIds: string[]) => { + console.log( + "选中的labelIds:", + labelIds.map((i) => Number(i)) + ); + }; + + const onUpdateLabelForSeries = () => { + console.log("onUpdateLabelForSeries"); + }; + + const filterOption = ( + input: string, + option: { label: string; value: string } + ) => (option?.label ?? "").toLowerCase().includes(input.toLowerCase()); + return (
{