2 lines
21 KiB
JavaScript
2 lines
21 KiB
JavaScript
import{r as i,j as e}from"./router-zNjPR4CY.js";import{x as _,y as S,E as he,S as Fe,L as h,I as F,B as o,g as K,A as ae,n as te,o as re,q as ne,r as le,s as ie,t as ce,v as de,D as ue,i as je,j as ge,k as fe,l as pe,a5 as ve,a3 as Ne}from"./index-CuOHsLf7.js";import{C as M}from"./checkbox-DWiVrbnx.js";import{S as B,a as H,b as q,c as R,d as p}from"./select-DGqIoF9r.js";import{S as Ae}from"./switch-Kc2EZ0Ga.js";import{T as Oe,a as $e,b as E,c as w,d as Ie,e as g}from"./table-DFeDhBY_.js";import{T as Le}from"./textarea-8PIujbf-.js";import{ay as Me,S as Be,v as V,a0 as oe,au as me,ap as He,G as qe,y as Re,aq as Ve,a1 as Je,n as Ke,o as xe,ad as J}from"./icons-DTcdLw9j.js";import"./misc-BwRzHX8c.js";import"./radix-C-ZuImoP.js";import"./utils-DjBw3JGv.js";const D="/api/webui/person";async function Ue(a){const r=new URLSearchParams;a.page&&r.append("page",a.page.toString()),a.page_size&&r.append("page_size",a.page_size.toString()),a.search&&r.append("search",a.search),a.is_known!==void 0&&r.append("is_known",a.is_known.toString()),a.platform&&r.append("platform",a.platform);const t=await _(`${D}/list?${r}`,{headers:S()});if(!t.ok)try{const n=await t.json();return{success:!1,error:n.detail||n.message||"获取人物列表失败"}}catch{return{success:!1,error:t.statusText||"获取人物列表失败"}}try{const n=await t.json();return n.success?{success:!0,data:{data:n.data,total:n.total,page:n.page,page_size:n.page_size}}:{success:!1,error:"获取人物列表失败"}}catch{return{success:!1,error:"Failed to parse response"}}}async function We(a){const r=await _(`${D}/${a}`,{headers:S()});if(!r.ok)try{const t=await r.json();return{success:!1,error:t.detail||t.message||"获取人物详情失败"}}catch{return{success:!1,error:r.statusText||"获取人物详情失败"}}try{const t=await r.json();return t.success?{success:!0,data:t.data}:{success:!1,error:"获取人物详情失败"}}catch{return{success:!1,error:"Failed to parse response"}}}async function Ge(a,r){const t=await _(`${D}/${a}`,{method:"PATCH",headers:S(),body:JSON.stringify(r)});if(!t.ok)try{const n=await t.json();return{success:!1,error:n.detail||n.message||"更新人物信息失败"}}catch{return{success:!1,error:t.statusText||"更新人物信息失败"}}try{const n=await t.json();return n.success&&n.data?{success:!0,data:n.data}:{success:!1,error:n.message||"更新人物信息失败"}}catch{return{success:!1,error:"Failed to parse response"}}}async function Qe(a){const r=await _(`${D}/${a}`,{method:"DELETE",headers:S()});if(!r.ok)try{const t=await r.json();return{success:!1,error:t.detail||t.message||"删除人物信息失败"}}catch{return{success:!1,error:r.statusText||"删除人物信息失败"}}try{const t=await r.json();return t.success?{success:!0,data:void 0}:{success:!1,error:t.message||"删除人物信息失败"}}catch{return{success:!1,error:"Failed to parse response"}}}async function Xe(){const a=await _(`${D}/stats/summary`,{headers:S()});if(!a.ok)try{const r=await a.json();return{success:!1,error:r.detail||r.message||"获取统计数据失败"}}catch{return{success:!1,error:a.statusText||"获取统计数据失败"}}try{const r=await a.json();return r.success?{success:!0,data:r.data}:{success:!1,error:"获取统计数据失败"}}catch{return{success:!1,error:"Failed to parse response"}}}async function Ye(a){const r=await _(`${D}/batch/delete`,{method:"POST",headers:S(),body:JSON.stringify({person_ids:a})});if(!r.ok)try{const t=await r.json();return{success:!1,error:t.detail||t.message||"批量删除失败"}}catch{return{success:!1,error:r.statusText||"批量删除失败"}}try{const t=await r.json();return t.success?{success:!0,data:{message:t.message,deleted_count:t.deleted_count,failed_count:t.failed_count,failed_ids:t.failed_ids}}:{success:!1,error:t.message||"批量删除失败"}}catch{return{success:!1,error:"Failed to parse response"}}}function xs(){const[a,r]=i.useState([]),[t,n]=i.useState(!0),[l,f]=i.useState(0),[m,u]=i.useState(1),[x,A]=i.useState(20),[d,we]=i.useState(""),[C,ke]=i.useState(void 0),[O,be]=i.useState(void 0),[U,W]=i.useState(null),[ye,G]=i.useState(!1),[_e,$]=i.useState(!1),[k,P]=i.useState(null),[b,Se]=i.useState({total:0,known:0,unknown:0,platforms:{}}),[j,y]=i.useState(new Set),[De,I]=i.useState(!1),[L,Q]=i.useState(""),{toast:N}=he(),z=async()=>{try{n(!0);const s=await Ue({page:m,page_size:x,search:d||void 0,is_known:C,platform:O});if(!s.success)throw new Error(s.error);r(s.data.data),f(s.data.total)}catch(s){N({title:"加载失败",description:s instanceof Error?s.message:"无法加载人物信息",variant:"destructive"})}finally{n(!1)}},T=async()=>{try{const s=await Xe();s.success&&Se(s.data)}catch(s){console.error("加载统计数据失败:",s)}};i.useEffect(()=>{z(),T()},[m,x,d,C,O]);const X=async s=>{try{const c=await We(s.person_id);if(!c.success)throw new Error(c.error);W(c.data),G(!0)}catch(c){N({title:"加载详情失败",description:c instanceof Error?c.message:"无法加载人物详情",variant:"destructive"})}},Y=s=>{W(s),$(!0)},Ce=async s=>{try{const c=await Qe(s.person_id);if(!c.success)throw new Error(c.error);N({title:"删除成功",description:`已删除人物信息: ${s.person_name||s.nickname||s.user_id}`}),P(null),z(),T()}catch(c){N({title:"删除失败",description:c instanceof Error?c.message:"无法删除人物信息",variant:"destructive"})}},Pe=i.useMemo(()=>Object.keys(b.platforms),[b.platforms]),Z=s=>{const c=new Set(j);c.has(s)?c.delete(s):c.add(s),y(c)},ze=()=>{j.size===a.length&&a.length>0?y(new Set):y(new Set(a.map(s=>s.person_id)))},Te=()=>{if(j.size===0){N({title:"未选择任何人物",description:"请先选择要删除的人物",variant:"destructive"});return}I(!0)},Ee=async()=>{try{const s=await Ye(Array.from(j));if(!s.success)throw new Error(s.error);N({title:"批量删除完成",description:s.data.message}),y(new Set),I(!1),z(),T()}catch(s){N({title:"批量删除失败",description:s instanceof Error?s.message:"批量删除失败",variant:"destructive"})}},ee=()=>{const s=parseInt(L),c=Math.ceil(l/x);s>=1&&s<=c?(u(s),Q("")):N({title:"无效的页码",description:`请输入1-${c}之间的页码`,variant:"destructive"})},se=s=>s?new Date(s*1e3).toLocaleString("zh-CN"):"-";return e.jsxs("div",{className:"h-[calc(100vh-4rem)] flex flex-col p-4 sm:p-6",children:[e.jsx("div",{className:"mb-4 sm:mb-6",children:e.jsx("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4",children:e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl sm:text-3xl font-bold flex items-center gap-2",children:[e.jsx(Me,{className:"h-8 w-8",strokeWidth:2}),"人物信息管理"]}),e.jsx("p",{className:"text-muted-foreground mt-1 text-sm sm:text-base",children:"管理麦麦认识的所有人物信息"})]})})}),e.jsx(Fe,{className:"flex-1",children:e.jsxs("div",{className:"space-y-4 sm:space-y-6 pr-4",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"rounded-lg border bg-card p-4",children:[e.jsx("div",{className:"text-sm text-muted-foreground",children:"总人数"}),e.jsx("div",{className:"text-2xl font-bold mt-1",children:b.total})]}),e.jsxs("div",{className:"rounded-lg border bg-card p-4",children:[e.jsx("div",{className:"text-sm text-muted-foreground",children:"已认识"}),e.jsx("div",{className:"text-2xl font-bold mt-1 text-green-600",children:b.known})]}),e.jsxs("div",{className:"rounded-lg border bg-card p-4",children:[e.jsx("div",{className:"text-sm text-muted-foreground",children:"未认识"}),e.jsx("div",{className:"text-2xl font-bold mt-1 text-muted-foreground",children:b.unknown})]})]}),e.jsxs("div",{className:"rounded-lg border bg-card p-4",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-4 gap-4",children:[e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(h,{htmlFor:"search",children:"搜索"}),e.jsxs("div",{className:"relative mt-1.5",children:[e.jsx(Be,{className:"absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground"}),e.jsx(F,{id:"search",placeholder:"搜索名称、昵称或用户ID...",value:d,onChange:s=>we(s.target.value),className:"pl-9"})]})]}),e.jsxs("div",{children:[e.jsx(h,{htmlFor:"filter-known",children:"认识状态"}),e.jsxs(B,{value:C===void 0?"all":C.toString(),onValueChange:s=>{ke(s==="all"?void 0:s==="true"),u(1)},children:[e.jsx(H,{id:"filter-known",className:"mt-1.5",children:e.jsx(q,{})}),e.jsxs(R,{children:[e.jsx(p,{value:"all",children:"全部"}),e.jsx(p,{value:"true",children:"已认识"}),e.jsx(p,{value:"false",children:"未认识"})]})]})]}),e.jsxs("div",{children:[e.jsx(h,{htmlFor:"filter-platform",children:"平台"}),e.jsxs(B,{value:O||"all",onValueChange:s=>{be(s==="all"?void 0:s),u(1)},children:[e.jsx(H,{id:"filter-platform",className:"mt-1.5",children:e.jsx(q,{})}),e.jsxs(R,{children:[e.jsx(p,{value:"all",children:"全部平台"}),Pe.map(s=>e.jsxs(p,{value:s,children:[s," (",b.platforms[s],")"]},s))]})]})]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3 mt-4 pt-4 border-t",children:[e.jsx("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:j.size>0&&e.jsxs("span",{children:["已选择 ",j.size," 个人物"]})}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(h,{htmlFor:"page-size",className:"text-sm whitespace-nowrap",children:"每页显示"}),e.jsxs(B,{value:x.toString(),onValueChange:s=>{A(parseInt(s)),u(1),y(new Set)},children:[e.jsx(H,{id:"page-size",className:"w-20",children:e.jsx(q,{})}),e.jsxs(R,{children:[e.jsx(p,{value:"10",children:"10"}),e.jsx(p,{value:"20",children:"20"}),e.jsx(p,{value:"50",children:"50"}),e.jsx(p,{value:"100",children:"100"})]})]}),j.size>0&&e.jsxs(e.Fragment,{children:[e.jsx(o,{variant:"outline",size:"sm",onClick:()=>y(new Set),children:"取消选择"}),e.jsxs(o,{variant:"destructive",size:"sm",onClick:Te,children:[e.jsx(V,{className:"h-4 w-4 mr-1"}),"批量删除"]})]})]})]})]}),e.jsxs("div",{className:"rounded-lg border bg-card",children:[e.jsx("div",{className:"hidden md:block",children:e.jsxs(Oe,{"aria-label":"人物信息列表",children:[e.jsx($e,{children:e.jsxs(E,{children:[e.jsx(w,{className:"w-12",children:e.jsx(M,{checked:a.length>0&&j.size===a.length,onCheckedChange:ze,"aria-label":"全选"})}),e.jsx(w,{children:"状态"}),e.jsx(w,{children:"名称"}),e.jsx(w,{children:"昵称"}),e.jsx(w,{children:"平台"}),e.jsx(w,{children:"用户ID"}),e.jsx(w,{children:"最后更新"}),e.jsx(w,{className:"text-right",children:"操作"})]})}),e.jsx(Ie,{children:t?e.jsx(E,{children:e.jsx(g,{colSpan:8,className:"text-center py-8 text-muted-foreground",children:"加载中..."})}):a.length===0?e.jsx(E,{children:e.jsx(g,{colSpan:8,className:"text-center py-8 text-muted-foreground",children:"暂无数据"})}):a.map(s=>e.jsxs(E,{children:[e.jsx(g,{children:e.jsx(M,{checked:j.has(s.person_id),onCheckedChange:()=>Z(s.person_id),"aria-label":`选择 ${s.person_name||s.nickname||s.user_id}`})}),e.jsx(g,{children:e.jsx("div",{className:K("inline-flex items-center gap-1 px-2 py-1 rounded-full text-xs font-medium",s.is_known?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":"bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-400"),children:s.is_known?"已认识":"未认识"})}),e.jsx(g,{className:"font-medium",children:s.person_name||e.jsx("span",{className:"text-muted-foreground",children:"-"})}),e.jsx(g,{children:s.nickname||"-"}),e.jsx(g,{children:s.platform}),e.jsx(g,{className:"font-mono text-sm",children:s.user_id}),e.jsx(g,{className:"text-sm text-muted-foreground",children:se(s.last_know)}),e.jsx(g,{className:"text-right",children:e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(o,{variant:"default",size:"sm",onClick:()=>X(s),children:[e.jsx(oe,{className:"h-4 w-4 mr-1"}),"详情"]}),e.jsxs(o,{variant:"default",size:"sm",onClick:()=>Y(s),children:[e.jsx(me,{className:"h-4 w-4 mr-1"}),"编辑"]}),e.jsxs(o,{size:"sm",onClick:()=>P(s),className:"bg-red-600 hover:bg-red-700 text-white",children:[e.jsx(V,{className:"h-4 w-4 mr-1"}),"删除"]})]})})]},s.id))})]})}),e.jsx("div",{className:"md:hidden space-y-3 p-4",children:t?e.jsx("div",{className:"text-center py-8 text-muted-foreground",children:"加载中..."}):a.length===0?e.jsx("div",{className:"text-center py-8 text-muted-foreground",children:"暂无数据"}):a.map(s=>e.jsxs("div",{className:"rounded-lg border bg-card p-4 space-y-3 overflow-hidden",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(M,{checked:j.has(s.person_id),onCheckedChange:()=>Z(s.person_id),className:"mt-1"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:K("inline-flex items-center gap-1 px-2 py-1 rounded-full text-xs font-medium mb-2",s.is_known?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":"bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-400"),children:s.is_known?"已认识":"未认识"}),e.jsx("h3",{className:"font-semibold text-sm line-clamp-1 w-full break-all",children:s.person_name||e.jsx("span",{className:"text-muted-foreground",children:"未命名"})}),s.nickname&&e.jsxs("p",{className:"text-xs text-muted-foreground mt-1 line-clamp-1 w-full break-all",children:["昵称: ",s.nickname]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 text-sm",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:"平台"}),e.jsx("p",{className:"font-medium text-xs",children:s.platform})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:"用户ID"}),e.jsx("p",{className:"font-mono text-xs truncate",title:s.user_id,children:s.user_id})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:"最后更新"}),e.jsx("p",{className:"text-xs",children:se(s.last_know)})]})]}),e.jsxs("div",{className:"flex flex-wrap gap-1 pt-2 border-t overflow-hidden",children:[e.jsxs(o,{variant:"outline",size:"sm",onClick:()=>X(s),className:"text-xs px-2 py-1 h-auto shrink-0",children:[e.jsx(oe,{className:"h-3 w-3 mr-1"}),"查看"]}),e.jsxs(o,{variant:"outline",size:"sm",onClick:()=>Y(s),className:"text-xs px-2 py-1 h-auto shrink-0",children:[e.jsx(me,{className:"h-3 w-3 mr-1"}),"编辑"]}),e.jsxs(o,{variant:"outline",size:"sm",onClick:()=>P(s),className:"text-xs px-2 py-1 h-auto shrink-0 text-destructive hover:text-destructive",children:[e.jsx(V,{className:"h-3 w-3 mr-1"}),"删除"]})]})]},s.id))}),l>0&&e.jsxs("div",{className:"flex flex-col sm:flex-row items-center justify-between gap-4 px-4 py-3 border-t",children:[e.jsxs("div",{className:"text-sm text-muted-foreground",children:["共 ",l," 条记录,第 ",m," / ",Math.ceil(l/x)," 页"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(o,{variant:"outline",size:"sm",onClick:()=>u(1),disabled:m===1,className:"hidden sm:flex",children:e.jsx(He,{className:"h-4 w-4"})}),e.jsxs(o,{variant:"outline",size:"sm",onClick:()=>u(m-1),disabled:m===1,children:[e.jsx(qe,{className:"h-4 w-4 sm:mr-1"}),e.jsx("span",{className:"hidden sm:inline",children:"上一页"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(F,{type:"number",value:L,onChange:s=>Q(s.target.value),onKeyDown:s=>s.key==="Enter"&&ee(),placeholder:m.toString(),className:"w-16 h-8 text-center",min:1,max:Math.ceil(l/x)}),e.jsx(o,{variant:"outline",size:"sm",onClick:ee,disabled:!L,className:"h-8",children:"跳转"})]}),e.jsxs(o,{variant:"outline",size:"sm",onClick:()=>u(m+1),disabled:m>=Math.ceil(l/x),children:[e.jsx("span",{className:"hidden sm:inline",children:"下一页"}),e.jsx(Re,{className:"h-4 w-4 sm:ml-1"})]}),e.jsx(o,{variant:"outline",size:"sm",onClick:()=>u(Math.ceil(l/x)),disabled:m>=Math.ceil(l/x),className:"hidden sm:flex",children:e.jsx(Ve,{className:"h-4 w-4"})})]})]})]})]})}),e.jsx(Ze,{person:U,open:ye,onOpenChange:G}),e.jsx(es,{person:U,open:_e,onOpenChange:$,onSuccess:()=>{z(),T(),$(!1)}}),e.jsx(ae,{open:!!k,onOpenChange:()=>P(null),children:e.jsxs(te,{children:[e.jsxs(re,{children:[e.jsx(ne,{children:"确认删除"}),e.jsxs(le,{children:['确定要删除人物信息 "',k?.person_name||k?.nickname||k?.user_id,'" 吗? 此操作不可撤销。']})]}),e.jsxs(ie,{children:[e.jsx(ce,{children:"取消"}),e.jsx(de,{onClick:()=>k&&Ce(k),className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"删除"})]})]})}),e.jsx(ae,{open:De,onOpenChange:I,children:e.jsxs(te,{children:[e.jsxs(re,{children:[e.jsx(ne,{children:"确认批量删除"}),e.jsxs(le,{children:["确定要删除选中的 ",j.size," 个人物信息吗? 此操作不可撤销。"]})]}),e.jsxs(ie,{children:[e.jsx(ce,{children:"取消"}),e.jsx(de,{onClick:Ee,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"批量删除"})]})]})})]})}function Ze({person:a,open:r,onOpenChange:t}){if(!a)return null;const n=l=>l?new Date(l*1e3).toLocaleString("zh-CN"):"-";return e.jsx(ue,{open:r,onOpenChange:t,children:e.jsxs(je,{className:"max-w-2xl",children:[e.jsxs(ge,{children:[e.jsx(fe,{children:"人物详情"}),e.jsxs(pe,{children:["查看 ",a.person_name||a.nickname||a.user_id," 的完整信息"]})]}),e.jsx(ve,{children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsx(v,{icon:Je,label:"人物名称",value:a.person_name}),e.jsx(v,{icon:Ke,label:"昵称",value:a.nickname}),e.jsx(v,{icon:xe,label:"用户ID",value:a.user_id,mono:!0}),e.jsx(v,{icon:xe,label:"人物ID",value:a.person_id,mono:!0}),e.jsx(v,{label:"平台",value:a.platform}),e.jsx(v,{label:"状态",value:a.is_known?"已认识":"未认识"})]}),a.name_reason&&e.jsxs("div",{className:"rounded-lg border bg-muted/50 p-3",children:[e.jsx(h,{className:"text-xs text-muted-foreground",children:"名称设定原因"}),e.jsx("p",{className:"mt-1 text-sm",children:a.name_reason})]}),a.memory_points&&e.jsxs("div",{className:"rounded-lg border bg-muted/50 p-3",children:[e.jsx(h,{className:"text-xs text-muted-foreground",children:"个人印象"}),e.jsx("p",{className:"mt-1 text-sm whitespace-pre-wrap",children:a.memory_points})]}),a.group_nick_name&&a.group_nick_name.length>0&&e.jsxs("div",{className:"rounded-lg border bg-muted/50 p-3",children:[e.jsx(h,{className:"text-xs text-muted-foreground",children:"群昵称"}),e.jsx("div",{className:"mt-2 space-y-1",children:a.group_nick_name.map((l,f)=>e.jsxs("div",{className:"text-sm flex items-center gap-2",children:[e.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:l.group_id}),e.jsx("span",{children:"→"}),e.jsx("span",{children:l.group_nick_name})]},f))})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsx(v,{icon:J,label:"认识时间",value:n(a.know_times)}),e.jsx(v,{icon:J,label:"首次记录",value:n(a.know_since)}),e.jsx(v,{icon:J,label:"最后更新",value:n(a.last_know)})]})]})}),e.jsx(Ne,{children:e.jsx(o,{onClick:()=>t(!1),children:"关闭"})})]})})}function v({icon:a,label:r,value:t,mono:n=!1}){return e.jsxs("div",{className:"space-y-1",children:[e.jsxs(h,{className:"text-xs text-muted-foreground flex items-center gap-1",children:[a&&e.jsx(a,{className:"h-3 w-3"}),r]}),e.jsx("div",{className:K("text-sm",n&&"font-mono",!t&&"text-muted-foreground"),children:t||"-"})]})}function es({person:a,open:r,onOpenChange:t,onSuccess:n}){const[l,f]=i.useState({}),[m,u]=i.useState(!1),{toast:x}=he();i.useEffect(()=>{a&&f({person_name:a.person_name||"",name_reason:a.name_reason||"",nickname:a.nickname||"",is_known:a.is_known})},[a]);const A=async()=>{if(a)try{u(!0);const d=await Ge(a.person_id,l);if(!d.success)throw new Error(d.error);x({title:"保存成功",description:"人物信息已更新"}),n()}catch(d){x({title:"保存失败",description:d instanceof Error?d.message:"无法更新人物信息",variant:"destructive"})}finally{u(!1)}};return a?e.jsx(ue,{open:r,onOpenChange:t,children:e.jsxs(je,{className:"max-w-2xl",confirmOnEnter:!0,children:[e.jsxs(ge,{children:[e.jsx(fe,{children:"编辑人物信息"}),e.jsxs(pe,{children:["修改 ",a.person_name||a.nickname||a.user_id," 的信息"]})]}),e.jsx(ve,{children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"person_name",children:"人物名称"}),e.jsx(F,{id:"person_name",value:l.person_name||"",onChange:d=>f({...l,person_name:d.target.value}),placeholder:"为这个人设置一个名称"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"nickname",children:"昵称"}),e.jsx(F,{id:"nickname",value:l.nickname||"",onChange:d=>f({...l,nickname:d.target.value}),placeholder:"昵称"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(h,{htmlFor:"name_reason",children:"名称设定原因"}),e.jsx(Le,{id:"name_reason",value:l.name_reason||"",onChange:d=>f({...l,name_reason:d.target.value}),placeholder:"为什么这样称呼这个人?",rows:2})]}),e.jsxs("div",{className:"flex items-center justify-between rounded-lg border p-3",children:[e.jsxs("div",{children:[e.jsx(h,{htmlFor:"is_known",className:"text-base font-medium",children:"已认识"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"标记是否已经认识这个人"})]}),e.jsx(Ae,{id:"is_known",checked:l.is_known,onCheckedChange:d=>f({...l,is_known:d})})]})]})}),e.jsxs(Ne,{children:[e.jsx(o,{variant:"outline",onClick:()=>t(!1),children:"取消"}),e.jsx(o,{onClick:A,disabled:m,children:m?"保存中...":"保存"})]})]})}):null}export{xs as PersonManagementPage};
|