feat: 界面

This commit is contained in:
mozzie 2024-09-05 13:01:55 +08:00
parent 3540413340
commit b2c5b581fc
3 changed files with 73 additions and 74 deletions

View File

@ -57,7 +57,7 @@
"react-dropzone": "14.2.3", "react-dropzone": "14.2.3",
"react-hook-form": "7.53.0", "react-hook-form": "7.53.0",
"react-icons": "^5.2.1", "react-icons": "^5.2.1",
"react-resizable-panels": "^2.0.20", "react-resizable-panels": "^2.1.1",
"react-router-dom": "^6.26.0", "react-router-dom": "^6.26.0",
"tailwind-merge": "^2.4.0", "tailwind-merge": "^2.4.0",
"tailwindcss-animate": "^1.0.7", "tailwindcss-animate": "^1.0.7",

View File

@ -15,8 +15,13 @@ import { ToastAction } from "@/components/ui/toast";
import { useToast } from "@/components/ui/use-toast"; import { useToast } from "@/components/ui/use-toast";
import { RocketIcon } from "@radix-ui/react-icons"; import { RocketIcon } from "@radix-ui/react-icons";
import { useLocation } from "react-router-dom"; import { useLocation } from "react-router-dom";
import { Terminal } from "lucide-react"; import { SparkleIcon, Terminal } from "lucide-react";
import { Badge } from "@/components/ui/badge"; import {
ResizableHandle,
ResizablePanel,
ResizablePanelGroup,
} from "@/components/ui/resizable";
import { import {
Card, Card,
CardContent, CardContent,
@ -34,6 +39,7 @@ import {
CarouselPrevious, CarouselPrevious,
} from "@/components/ui/carousel"; } from "@/components/ui/carousel";
import { Series } from "../Datasource/SeriesTable"; import { Series } from "../Datasource/SeriesTable";
import { ScrollArea } from "@/components/ui/scroll-area";
interface ScanProgress { interface ScanProgress {
percentage: number; percentage: number;
@ -178,78 +184,71 @@ const Boot = () => {
className="h-full" className="h-full"
> >
<div className="p-4 h-full flex flex-col"> <div className="p-4 h-full flex flex-col">
{/* */} <ResizablePanelGroup
<div className="flex flex-col items-center"> direction="horizontal"
<div className="w-2/3 mt-8"> className="w-full h-full border rounded-lg"
<Alert> >
<Terminal className="h-4 w-4" /> <ResizablePanel defaultSize={38.2}>
<AlertTitle>Heads up!</AlertTitle> <div className="flex flex-col h-full pt-4">
<AlertDescription>dicom</AlertDescription> <ScrollArea className="flex-grow w-full h-full px-4 pb-2">
</Alert> <div className="w-full flex flex-col gap-y-2">
</div> {selectDicoms.map((dicom: Series, index: number) => (
<div className="w-2/3 mt-4"> <Card
<Button size="sm" className="rounded-full mr-2"> key={index}
DICOM className="flex shadow-none flex-col items-start gap-2 rounded-lg border p-3 text-left text-sm transition-all hover:bg-accent"
</Button> >
<Button variant="outline" size="sm" className="rounded-full"> <div className="flex w-full flex-col gap-1">
MRI <div className="flex items-center">
</Button> <div className="flex items-center gap-2">
</div> <div className="font-semibold">
<div className="w-2/3 mt-8 flex flex-col items-center justify-center"> {dicom.PatientName}
<Carousel setApi={setApi} className="w-full max-w-xs"> </div>
<CarouselContent> <span className="flex h-2 w-2 rounded-full bg-blue-600"></span>
{selectDicoms.map((item: Series, index: number) => ( </div>
<CarouselItem key={index}> <div className="ml-auto text-xs text-foreground">
<Card> {dicom.PatientSex}
<CardHeader> </div>
<CardTitle>{item.PatientName}</CardTitle> </div>
<CardDescription> <div className="text-xs font-medium">
{item.PatientAge}, {item.PatientSex},{" "} {dicom.PatientAge}
{item.filePaths.length} </div>
</CardDescription> </div>
</CardHeader> <div className="line-clamp-2 text-xs text-muted-foreground">
<CardContent className="flex items-center "> AI的判断结果metadata扔给大语言模型使
<span className="text-4xl font-semibold"> </div>
{index + 1} <div className="flex items-center gap-2">
</span> <div className="inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80">
</CardContent>
<CardFooter className="flex justify-between"> </div>
<Button variant="outline">Cancel</Button> <div className="inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80">
<Button></Button>
</CardFooter> </div>
<div className="inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80">
</div>
</div>
</Card> </Card>
</CarouselItem> ))}
))} </div>
</CarouselContent> </ScrollArea>
<CarouselPrevious /> <div className="flex-shrink-0 px-4 py-4 text-right">
<CarouselNext /> <Button
</Carousel> disabled={flaskWaiting}
<div className="py-2 text-center text-sm text-muted-foreground"> onClick={handleBootPythonServer}
{current} / {count} >
<SparkleIcon className="mr-2 h-4 w-4" />
{flaskRunning ? "运行中" : "启动"}
</Button>
</div>
</div> </div>
</div> </ResizablePanel>
<div className="w-2/3 mt-4"></div> <ResizableHandle withHandle />
</div> <ResizablePanel defaultSize={61.8}>
{/* card */} <div className="flex h-full items-center justify-center p-6">
<main className="flex-1 flex flex-col"> <span className="font-semibold"></span>
<div className="mt-4 flex-1"> </div>
<pre className="text-xs">{flaskInfo}</pre> </ResizablePanel>
</div> </ResizablePanelGroup>
<footer className="flex justify-between">
<div className="left"></div>
<Button
disabled={flaskWaiting}
className={`bg-teal-500 hover:bg-teal-400 ${
flaskWaiting ? "bg-teal-700" : ""
}`}
size={"lg"}
onClick={handleBootPythonServer}
>
<IoCheckmarkCircleSharp className={`mr-2 h-4 w-4}`} />
{flaskRunning ? "运行中" : "启动"} python
</Button>
</footer>
</main>
</div> </div>
{/* 导入数据dialog */} {/* 导入数据dialog */}
<Dialog open={importDialogVisible} onOpenChange={setImportDialogVisible}> <Dialog open={importDialogVisible} onOpenChange={setImportDialogVisible}>

View File

@ -149,7 +149,7 @@ importers:
specifier: ^5.2.1 specifier: ^5.2.1
version: 5.3.0(react@18.3.1) version: 5.3.0(react@18.3.1)
react-resizable-panels: react-resizable-panels:
specifier: ^2.0.20 specifier: ^2.1.1
version: 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-router-dom: react-router-dom:
specifier: ^6.26.0 specifier: ^6.26.0