PageSourceSearch

https://doinhanhweb.manus.space/assets/AdminContactMessages-C2k7BwLC.js

js doinhanhweb.manus.space collected 2026-10-03 05:02:09 UTC 16,918 bytes, 11 lines download raw bytes

1import{q as I,a as K,o as J,r as t,t as r,b as i,j as s,F as c,A as O,z as E,P as W,h as X,U as Y,s as Z}from"./index-DRYNtDfq.js";import{I as P}from"./input-Bz87F-Tp.js";import{T as ss}from"./textarea-CSC5Btfs.js";import{L as R}from"./label-CD9P1Z7v.js";import{D as es,A as as,d as ts}from"./DashboardLayout-2PNDDCmu.js";import{R as ns}from"./refresh-cw-D2dmFQzs.js";import{M as z}from"./mail-Dy7s7wzw.js";import{E as cs}from"./eye-CK6SMoQC.js";import{S as is}from"./send-BLEe7uzJ.js";import"./dialog-D6TyplgW.js";import"./useComposition-Lg3rnDe0.js";import"./trending-up-CvKbjCgH.js";import"./circle-arrow-down-HHKk6hyR.js";import"./circle-arrow-up-DUs07WdU.js";import"./file-text-CvyTzFOR.js";import"./message-circle-DuGz_h7Q.js";import"./index-BfJPPodk.js";/**
2 * @license lucide-react v0.453.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const ls=I("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/**
7 * @license lucide-react v0.453.0 - ISC
8 *
9 * This source code is licensed under the ISC license.
10 * See the LICENSE file in the root directory of this source tree.
11 */const D=I("Reply",[["polyline",{points:"9 17 4 12 9 7",key:"hvgpf2"}],["path",{d:"M20 18v-2a4 4 0 0 0-4-4H4",key:"5vmcpk"}]]),u={new:{label:"Mới",color:"bg-blue-100 text-blue-700"},read:{label:"Đã đọc",color:"bg-gray-100 text-gray-600"},replied:{label:"Đã trả lời",color:"bg-green-100 text-green-700"}};function ys(){const{user:l}=K(),[,V]=J(),[h,$]=t.useState("all"),[C,F]=t.useState(""),[U,H]=t.useState(""),[o,m]=t.useState(0),[n,M]=t.useState(null),[Q,A]=t.useState(!1),[f,j]=t.useState(""),[N,b]=t.useState(""),d=20;t.useEffect(()=>{const e=setTimeout(()=>H(C),300);return()=>clearTimeout(e)},[C]),t.useEffect(()=>{l&&l.role!=="admin"&&V("/")},[l]);const{data:y,isLoading:_,refetch:v}=r.contactMessage.list.useQuery({limit:d,offset:o*d,status:h==="all"?void 0:h,search:U||void 0}),{data:w}=r.contactMessage.smtpStatus.useQuery(),{data:B}=r.contactMessage.unreadCount.useQuery(),S=r.contactMessage.updateStatus.useMutation({onSuccess:()=>{i.success("Đã cập nhật"),v()},onError:e=>i.error(e.message)}),x=r.contactMessage.reply.useMutation({onSuccess:()=>{i.success("Đã gửi email trả lời thành công"),A(!1),j(""),b(""),v()},onError:e=>i.error(e.message)}),g=y?.messages||[],p=y?.total||0,k=B?.count||0,a=t.useMemo(()=>n&&g.find(e=>e.id===n)||null,[n,g]);t.useEffect(()=>{a&&a.status==="new"&&S.mutate({id:a.id,status:"read"})},[n]);const q=()=>{if(n){if(!f.trim()){i.error("Vui lòng nhập tiêu đề");return}if(!N.trim()){i.error("Vui lòng nhập nội dung");return}x.mutate({id:n,subject:f.trim(),content:N.trim()})}};return!l||l.role!=="admin"?null:s.jsx(es,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:96",title:"Admin Panel",navItems:as,userName:l?.name||"Admin",children:s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:97",className:"space-y-4",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:99",className:"flex items-center justify-between",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:100",children:[s.jsxs("h1",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:101",className:"text-xl font-bold flex items-center gap-2",children:["Tin nhắn liên hệ",k>0&&s.jsx("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:104",className:"inline-flex items-center justify-center w-5 h-5 text-[10px] font-bold bg-red-500 text-white rounded-full",children:k})]}),s.jsxs("p",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:107",className:"text-xs text-muted-foreground mt-0.5",children:[p," tin nhắn"]})]}),s.jsxs(c,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:109",variant:"outline",size:"sm",onClick:()=>v(),className:"gap-1.5",children:[s.jsx(ns,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:110",className:"w-3.5 h-3.5"}),"Làm mới"]})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:115",className:"flex flex-col sm:flex-row gap-2",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:116",className:"relative flex-1 max-w-xs",children:[s.jsx(O,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:117",className:"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground"}),s.jsx(P,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:118",value:C,onChange:e=>{F(e.target.value),m(0)},placeholder:"Tìm tên, email, SĐT...",className:"pl-8 h-8 text-sm"})]}),s.jsx("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:125",className:"flex gap-1.5",children:[{value:"all",label:"Tất cả"},{value:"new",label:"Mới"},{value:"read",label:"Đã đọc"},{value:"replied",label:"Đã trả lời"}].map(e=>s.jsx(c,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:132",variant:h===e.value?"default":"outline",size:"sm",className:"h-8 text-xs px-3",onClick:()=>{$(e.value),m(0),M(null)},children:e.label},e.value))})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:146",className:"grid grid-cols-1 lg:grid-cols-12 gap-4 min-h-[500px]",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:148",className:`lg:col-span-5 border rounded-lg overflow-hidden ${n&&"hidden lg:block"}`,children:[_?s.jsx("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:150",className:"p-4 space-y-3",children:[1,2,3,4,5].map(e=>s.jsx("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:151",className:"h-16 bg-muted rounded animate-pulse"},e))}):g.length===0?s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:154",className:"flex flex-col items-center justify-center py-16 text-muted-foreground",children:[s.jsx(ts,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:155",className:"w-10 h-10 mb-3"}),s.jsx("p",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:156",className:"text-sm",children:"Chưa có t
11in nhắn nào"})]}):s.jsx("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:159",className:"divide-y max-h-[600px] overflow-y-auto",children:g.map(e=>{const T=u[e.status]||u.new,G=n===e.id,L=e.status==="new";return s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:165",className:`px-3 py-3 cursor-pointer transition-colors hover:bg-accent/50 ${G?"bg-accent":""} ${L?"bg-blue-50/50":""}`,onClick:()=>M(e.id),children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:170",className:"flex items-center justify-between mb-1",children:[s.jsx("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:171",className:`text-sm truncate max-w-[180px] ${L?"font-semibold":""}`,children:e.name}),s.jsx("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:172",className:`text-[10px] px-1.5 py-0.5 rounded-full ${T.color}`,children:T.label})]}),s.jsx("p",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:174",className:"text-xs text-muted-foreground truncate",children:e.email}),s.jsx("p",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:175",className:"text-xs text-muted-foreground truncate mt-0.5",children:e.message}),s.jsx("p",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:176",className:"text-[10px] text-muted-foreground mt-1",children:new Date(e.createdAt).toLocaleString("vi-VN")})]},e.id)})}),p>d&&s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:184",className:"flex items-center justify-between px-3 py-2 border-t bg-muted/30",children:[s.jsx(c,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:185",variant:"ghost",size:"sm",disabled:o===0,onClick:()=>m(e=>e-1),className:"h-7 text-xs",children:"Trước"}),s.jsxs("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:186",className:"text-[10px] text-muted-foreground",children:[o+1,"/",Math.ceil(p/d)]}),s.jsx(c,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:187",variant:"ghost",size:"sm",disabled:(o+1)*d>=p,onClick:()=>m(e=>e+1),className:"h-7 text-xs",children:"Sau"})]})]}),s.jsx("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:193",className:`lg:col-span-7 border rounded-lg ${!n&&"hidden lg:flex lg:items-center lg:justify-center"}`,children:n?a?s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:204",className:"flex flex-col h-full",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:206",className:"px-4 py-3 border-b flex items-center gap-2",children:[s.jsx(c,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:207",variant:"ghost",size:"sm",className:"lg:hidden h-7 px-2",onClick:()=>M(null),children:s.jsx(ls,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:208",className:"w-4 h-4"})}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:210",className:"flex-1 min-w-0",children:[s.jsx("h3",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:211",className:"text-sm font-semibold truncate",children:a.name}),s.jsx("p",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:212",className:"text-xs text-muted-foreground",children:a.subject||"Không có tiêu đề"})]}),s.jsx("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:214",className:`text-[10px] px-2 py-0.5 rounded-full ${u[a.status]?.color}`,children:u[a.status]?.label})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:220",className:"px-4 py-3 border-b bg-muted/20 flex flex-wrap gap-4 text-xs text-muted-foreground",children:[s.jsxs("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:221",className:"flex items-center gap-1",children:[s.jsx(z,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:221",className:"w-3 h-3"}),a.email]}),a.phone&&s.jsxs("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:222",className:"flex items-center gap-1",children:[s.jsx(W,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:222",className:"w-3 h-3"}),a.phone]}),s.jsxs("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:223",className:"flex items-center gap-1",children:[s.jsx(X,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:223",className:"w-3 h-3"}
11),new Date(a.createdAt).toLocaleString("vi-VN")]})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:227",className:"flex-1 overflow-y-auto px-4 py-4 space-y-4",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:229",className:"flex gap-3",children:[s.jsx("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:230",className:"w-7 h-7 rounded-full bg-blue-100 flex items-center justify-center shrink-0",children:s.jsx(Y,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:231",className:"w-3.5 h-3.5 text-blue-600"})}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:233",className:"flex-1 min-w-0",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:234",className:"flex items-center gap-2 mb-1",children:[s.jsx("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:235",className:"text-xs font-medium",children:a.name}),s.jsx("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:236",className:"text-[10px] text-muted-foreground",children:new Date(a.createdAt).toLocaleString("vi-VN")})]}),s.jsx("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:238",className:"text-sm whitespace-pre-wrap bg-muted/40 rounded-lg p-3",children:a.message})]})]}),a.replyContent&&s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:246",className:"flex gap-3",children:[s.jsx("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:247",className:"w-7 h-7 rounded-full bg-green-100 flex items-center justify-center shrink-0",children:s.jsx(D,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:248",className:"w-3.5 h-3.5 text-green-600"})}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:250",className:"flex-1 min-w-0",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:251",className:"flex items-center gap-2 mb-1",children:[s.jsx("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:252",className:"text-xs font-medium",children:a.repliedBy||"Admin"}),s.jsx("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:253",className:"text-[10px] text-muted-foreground",children:a.repliedAt?new Date(a.repliedAt).toLocaleString("vi-VN"):""})]}),a.replySubject&&s.jsxs("p",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:258",className:"text-xs text-muted-foreground mb-1",children:["RE: ",a.replySubject]}),s.jsx("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:260",className:"text-sm whitespace-pre-wrap bg-green-50 border border-green-100 rounded-lg p-3",children:a.replyContent})]})]})]}),s.jsx("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:269",className:"px-4 py-3 border-t space-y-3",children:Q?s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:300",className:"space-y-3",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:301",children:[s.jsx(R,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:302",className:"text-xs",children:"Tiêu đề"}),s.jsx(P,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:303",value:f,onChange:e=>j(e.target.value),className:"mt-1 h-8 text-sm"})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:305",children:[s.jsxs(R,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:306",className:"text-xs",children:["Nội dung (gửi tới ",a.email,")"]}),s.jsx(ss,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:307",value:N,onChange:e=>b(e.target.value),className:"mt-1 text-sm",rows:4,placeholder:"Nhập nội dung email trả lời..."})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:309",className:"flex gap-2",children:[s.jsxs(c,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:310",size:"sm",className:"h-8 text-xs gap-1.5",onClick:q,disabled:x.isPending,children:[x.isPending?s.jsx(E,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:311",className:"w-3.5 h-3.5 animate-spin"}):s.jsx(is,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:311",className:"w-3.5 h-3.5"}),x.isPending?"Đang gửi...":"Gửi email"]}),s.jsx(c,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:314",variant:"ghost",size:"sm",className:"h-8 text-xs",onClick:()=>A(!1),children:"Hủy"})]})]}):s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:271",className:"flex gap-2 flex-wrap",children:[a.status==="new"&&s.jsxs(c,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:273",variant:"outline",size:"sm",className:"h-8 text-xs gap-1.5",onClick:()=>S.mutate({id:a.id,status:"read"}),children:[s.jsx(cs,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:274",className:"w-3.5 h-3.5"}),"Đánh dấu đã đọc"]}),a.status!=="replied"&&s.jsxs(c,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:278",size:"sm",className:"h-8 text-xs gap-1.5",onClick:()=>
11{if(!w?.configured){i.error("Chưa cấu hình SMTP. Vui lòng cấu hình SMTP trước.");return}A(!0),j(`RE: ${a.subject||"Phản hồi liên hệ"}`)},children:[s.jsx(D,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:290",className:"w-3.5 h-3.5"}),"Trả lời email"]}),!w?.configured&&a.status!=="replied"&&s.jsxs("span",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:294",className:"flex items-center gap-1 text-[10px] text-amber-600",children:[s.jsx(Z,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:295",className:"w-3 h-3"}),"Chưa cấu hình SMTP"]})]})})]}):s.jsx("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:200",className:"flex items-center justify-center py-16",children:s.jsx(E,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:201",className:"w-5 h-5 animate-spin text-muted-foreground"})}):s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:195",className:"text-center text-muted-foreground py-16",children:[s.jsx(z,{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:196",className:"w-10 h-10 mx-auto mb-3 opacity-40"}),s.jsx("p",{"data-loc":"client/src/pages/admin/AdminContactMessages.tsx:197",className:"text-sm",children:"Chọn tin nhắn để xem chi tiết"})]})})]})]})})}export{ys as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.