feat: localmpr viewer
This commit is contained in:
parent
3077c78c76
commit
6df7442b9b
|
@ -9,3 +9,8 @@
|
|||
|
||||
|
||||
pnpm config set virtual-store-dir-max-length 70
|
||||
|
||||
|
||||
## 待解决
|
||||
|
||||
- dicom导入后,本地appData建立一个拷贝区域,复制dicom原片,满足二次导出,防止原片的路径修改、移动硬盘被拔电源
|
|
@ -72,6 +72,10 @@ function createWindow() {
|
|||
python_process = spawn(path.join(process.env.VITE_PUBLIC!, "main.exe"));
|
||||
}
|
||||
} else {
|
||||
if (platform !== "macos") {
|
||||
python_process = spawn(path.join(process.env.VITE_PUBLIC!, "main.exe"));
|
||||
}
|
||||
|
||||
win.loadFile(path.join(RENDERER_DIST, "index.html")).then(() => {
|
||||
if (process.argv.length >= 2) {
|
||||
const folderPath = process.argv[2];
|
||||
|
|
|
@ -7,6 +7,7 @@ import { useEffect } from "react";
|
|||
import { Models } from "./pages/Models";
|
||||
import { Tools } from "./pages/Tools";
|
||||
import { Datasource } from "./pages/Datasource";
|
||||
import { Viewer } from "./pages/Viewer";
|
||||
|
||||
function App() {
|
||||
const theme = document.querySelector("html")!.getAttribute("theme") as
|
||||
|
@ -33,6 +34,7 @@ function App() {
|
|||
<Route path="datasource" element={<Datasource />} />
|
||||
<Route path="tools" element={<Tools />} />
|
||||
<Route path="setting" element={<Setting />} />
|
||||
<Route path="viewer" element={<Viewer />} />
|
||||
</Route>
|
||||
</Routes>
|
||||
</Router>
|
||||
|
|
|
@ -90,7 +90,7 @@ export const MenuBar = () => {
|
|||
toast({
|
||||
variant: "default",
|
||||
title: "完成",
|
||||
description: `本次操作共导入${structDicom.length}组序列数据,耗时:${(
|
||||
description: `导入${structDicom.length}组序列数据,耗时:${(
|
||||
scanDuration / 1000
|
||||
).toFixed(2)} s`,
|
||||
action: (
|
||||
|
|
|
@ -71,7 +71,22 @@ const columnsAlias: { [K in keyof Partial<Series> as string]: string } = {
|
|||
AcquisitionDate: "采集日期",
|
||||
};
|
||||
|
||||
export const columns: ColumnDef<Series>[] = [
|
||||
interface SeriesTableProps {
|
||||
data: Series[];
|
||||
}
|
||||
|
||||
export function SeriesTable(props: SeriesTableProps) {
|
||||
const [sorting, setSorting] = useState<SortingState>([]);
|
||||
const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);
|
||||
const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({
|
||||
SeriesInstanceUID: false,
|
||||
updateTime: false,
|
||||
createTime: false,
|
||||
});
|
||||
const [rowSelection, setRowSelection] = useState({});
|
||||
const navigate = useNavigate();
|
||||
|
||||
const columns: ColumnDef<Series>[] = [
|
||||
{
|
||||
id: "select",
|
||||
header: ({ table }) => (
|
||||
|
@ -223,7 +238,7 @@ export const columns: ColumnDef<Series>[] = [
|
|||
header: "操作",
|
||||
enableHiding: false,
|
||||
cell: ({ row }) => {
|
||||
const payment = row.original;
|
||||
const dicom = row.original;
|
||||
|
||||
return (
|
||||
<DropdownMenu>
|
||||
|
@ -234,36 +249,19 @@ export const columns: ColumnDef<Series>[] = [
|
|||
</Button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="end">
|
||||
<DropdownMenuLabel>Actions</DropdownMenuLabel>
|
||||
<DropdownMenuLabel>操作</DropdownMenuLabel>
|
||||
<DropdownMenuItem
|
||||
onClick={() => navigator.clipboard.writeText(payment.id)}
|
||||
>
|
||||
Copy payment ID
|
||||
</DropdownMenuItem>
|
||||
onClick={() => handle2Viewer(dicom)}
|
||||
>阅片</DropdownMenuItem>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuItem>View customer</DropdownMenuItem>
|
||||
<DropdownMenuItem>View payment details</DropdownMenuItem>
|
||||
<DropdownMenuItem>移除</DropdownMenuItem>
|
||||
<DropdownMenuItem>重新测量</DropdownMenuItem>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
);
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
interface SeriesTableProps {
|
||||
data: Series[];
|
||||
}
|
||||
|
||||
export function SeriesTable(props: SeriesTableProps) {
|
||||
const [sorting, setSorting] = useState<SortingState>([]);
|
||||
const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);
|
||||
const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({
|
||||
SeriesInstanceUID: false,
|
||||
updateTime: false,
|
||||
createTime: false,
|
||||
});
|
||||
const [rowSelection, setRowSelection] = useState({});
|
||||
const navigate = useNavigate();
|
||||
];
|
||||
|
||||
const table = useReactTable({
|
||||
data: props.data,
|
||||
|
@ -295,6 +293,11 @@ export function SeriesTable(props: SeriesTableProps) {
|
|||
navigate("/", { state: { selectDicoms } });
|
||||
};
|
||||
|
||||
const handle2Viewer = (dicom) => {
|
||||
const { SeriesInstanceUID } = dicom
|
||||
navigate(`/viewer?SeriesInstanceUID=${SeriesInstanceUID}`)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="w-full h-full flex flex-col">
|
||||
<div className="flex-shrink-0 flex items-center p-4">
|
||||
|
|
12
apps/desktop/src/pages/Viewer/index.tsx
Normal file
12
apps/desktop/src/pages/Viewer/index.tsx
Normal file
|
@ -0,0 +1,12 @@
|
|||
import { useLocation } from "react-router-dom"
|
||||
|
||||
export const Viewer = () => {
|
||||
const location = useLocation()
|
||||
const queryParams = new URLSearchParams(location.search);
|
||||
const SeriesInstanceUID = queryParams.get('SeriesInstanceUID'); // 获取URL参数
|
||||
|
||||
return <div>
|
||||
{SeriesInstanceUID}
|
||||
<p>找到一个本地dicom的mpr方案</p>
|
||||
</div>
|
||||
}
|
Loading…
Reference in New Issue
Block a user