feat: add AI knowledge analysis MVP
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { FormEvent, useMemo, useState } from "react";
|
||||
import { Edit3, Filter, Plus, Search, Trash2 } from "lucide-react";
|
||||
import { Brain, Edit3, Filter, Plus, Search, Trash2 } from "lucide-react";
|
||||
|
||||
import { Badge } from "@/components/ui/badge";
|
||||
import { Button } from "@/components/ui/button";
|
||||
@@ -10,6 +10,7 @@ import { Dialog } from "@/components/ui/dialog";
|
||||
import { Input, Textarea } from "@/components/ui/input";
|
||||
import { Select } from "@/components/ui/select";
|
||||
import { Table } from "@/components/ui/table";
|
||||
import { ElderAiAnalysisDialog } from "@/modules/ai/components/ElderAiAnalysisDialog";
|
||||
import type { ApiResult } from "@/modules/core/server/api";
|
||||
import type { Permission } from "@/modules/core/types";
|
||||
import type { CareLevel, Elder, ElderInput, ElderStatus } from "@/modules/elders/types";
|
||||
@@ -123,10 +124,12 @@ export function EldersClient({ elderContexts = {}, initialElders, permissions }:
|
||||
const [statusFilter, setStatusFilter] = useState<ElderStatus | typeof ALL_STATUS>(ALL_STATUS);
|
||||
const [careLevelFilter, setCareLevelFilter] = useState<CareLevel | typeof ALL_CARE_LEVELS>(ALL_CARE_LEVELS);
|
||||
const [page, setPage] = useState(1);
|
||||
const [aiTarget, setAiTarget] = useState<Elder | null>(null);
|
||||
|
||||
const canCreate = permissions.includes("elder:create");
|
||||
const canUpdate = permissions.includes("elder:update");
|
||||
const canDelete = permissions.includes("elder:delete");
|
||||
const canUseAi = permissions.includes("ai:read") && permissions.includes("elder:read");
|
||||
const isEditing = editingId !== null;
|
||||
const canSubmit = isEditing ? canUpdate : canCreate;
|
||||
|
||||
@@ -401,6 +404,17 @@ export function EldersClient({ elderContexts = {}, initialElders, permissions }:
|
||||
</Table.Cell>
|
||||
<Table.Cell className="px-4 py-3">
|
||||
<div className="flex justify-end gap-2">
|
||||
{canUseAi ? (
|
||||
<Button
|
||||
onClick={() => setAiTarget(elder)}
|
||||
size="sm"
|
||||
type="button"
|
||||
variant="outline"
|
||||
>
|
||||
<Brain className="size-4" aria-hidden="true" />
|
||||
AI 分析
|
||||
</Button>
|
||||
) : null}
|
||||
<Button
|
||||
disabled={!canUpdate}
|
||||
onClick={() => beginEdit(elder)}
|
||||
@@ -581,6 +595,8 @@ export function EldersClient({ elderContexts = {}, initialElders, permissions }:
|
||||
</div>
|
||||
</div>
|
||||
</Dialog>
|
||||
|
||||
<ElderAiAnalysisDialog elder={aiTarget} onClose={() => setAiTarget(null)} open={aiTarget !== null} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user