PageSourceSearch

https://fitdietaihkapp.manus.space/assets/AdminMessages-TZK0bjlJ.js

js fitdietaihkapp.manus.space collected 2026-10-03 05:02:18 UTC 10,938 bytes, 11 lines download raw bytes

1import{f as w,l as z,u as R,r as j,t as m,j as e,A as b,B as t,h as S,C as c,af as N,e as L,m as f,an as B,w as T,b as d}from"./index-bM8UT4Os.js";import{T as E}from"./textarea-DArC7VX4.js";import{M as P,R as D,S as H}from"./send-B5ZhDdrU.js";import{C as K}from"./circle-check-BF-IFrtm.js";import"./dialog-CxcTDVnZ.js";import"./useComposition-DO5dIJEj.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 $=w("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/**
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 y=w("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);function G(){const[,g]=z(),{user:i}=R(),[p,o]=j.useState(null),[l,n]=j.useState(""),{data:a,isLoading:h,refetch:u}=m.contact.getAll.useQuery(void 0,{enabled:i?.role==="admin"}),x=m.contact.reply.useMutation(),A=m.contact.markRead.useMutation();if(i&&i.role!=="admin")return e.jsx(b,{"data-loc":"client/src/pages/AdminMessages.tsx:40",title:"無權限",showBack:!0,children:e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:41",className:"max-w-2xl mx-auto px-4 py-20 text-center",children:[e.jsx(y,{"data-loc":"client/src/pages/AdminMessages.tsx:42",className:"w-16 h-16 mx-auto text-muted-foreground mb-4"}),e.jsx("h2",{"data-loc":"client/src/pages/AdminMessages.tsx:43",className:"text-xl font-bold mb-2",children:"呢個頁面只限管理員"}),e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:44",className:"text-muted-foreground",children:"你冇權限查看呢個頁面"}),e.jsx(t,{"data-loc":"client/src/pages/AdminMessages.tsx:45",variant:"outline",className:"mt-4",onClick:()=>g("/"),children:"返去主頁"})]})});const k=async s=>{if(!l.trim()){d.error("打返啲回覆先");return}try{await x.mutateAsync({messageId:s,reply:l.trim()}),d.success("回覆已送出!用戶可以睇到你嘅回覆 ✅"),o(null),n(""),u()}catch(r){d.error("回覆唔到:"+(r.message||"試多次"))}},v=async s=>{try{await A.mutateAsync({messageId:s}),u()}catch{d.error("搞唔掂")}},M={pending:{label:"未讀",color:"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400"},read:{label:"已讀",color:"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400"},replied:{label:"已回覆",color:"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400"}},C={bug:"🐛 Bug",suggestion:"💡 建議",question:"❓ 查詢",other:"📝 其他"};return e.jsx(b,{"data-loc":"client/src/pages/AdminMessages.tsx:96",title:"查詢管理",showBack:!0,children:e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:97",className:"max-w-3xl mx-auto px-4 py-6 pb-24",children:[e.jsxs("button",{"data-loc":"client/src/pages/AdminMessages.tsx:99",onClick:()=>g("/"),className:"flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground mb-4 transition-colors",children:[e.jsx(S,{"data-loc":"client/src/pages/AdminMessages.tsx:103",className:"w-4 h-4"}),"返去主頁"]}),e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:107",className:"text-center mb-6",children:[e.jsxs("h1",{"data-loc":"client/src/pages/AdminMessages.tsx:108",className:"text-2xl font-bold bg-gradient-to-r from-orange-500 to-red-500 bg-clip-text text-transparent flex items-center justify-center gap-2",children:[e.jsx(y,{"data-loc":"client/src/pages/AdminMessages.tsx:109",className:"w-7 h-7 text-orange-500"}),"查詢管理(Admin)"]}),e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:112",className:"text-sm text-muted-foreground mt-1",children:"管理用戶查詢同回覆訊息"})]}),a&&e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:119",className:"grid grid-cols-3 gap-3 mb-6",children:[e.jsxs(c,{"data-loc":"client/src/pages/AdminMessages.tsx:120",className:"text-center p-3",children:[e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:121",className:"text-2xl font-bold text-yellow-500",children:a.filter(s=>s.status==="pending").length}),e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:124",className:"text-xs text-muted-foreground",children:"未讀"})]}),e.jsxs(c,{"data-loc":"client/src/pages/AdminMessages.tsx:126",className:"text-center p-3",children:[e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:127",className:"text-2xl font-bold text-blue-500",children:a.filter(s=>s.status==="read").length}),e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:130",className:"text-xs text-muted-foreground",children:"已讀"})]}),e.jsxs(c,{"data-loc":"client/src/pages/AdminMessages.tsx:132",className:"text-center p-3",children:[e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:133",className:"text-2xl font-bold text-green-500",children:a.filter(s=>s.status==="replied").length}),e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:136",className:"text-xs text-muted-foreground",children:"已回覆"})]})]}),h&&e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:143",className:"text-center py-12",children:[e.jsx(N,{"data-loc":"client/src/pages/AdminMessages.tsx:144",className:"w-8 h-8 mx-auto mb-3"}),e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:145",className:"text-sm text-muted-foreground",children:"載入中..."})]}),!h&&a&&a.length===0&&e.jsxs(c,{"data-loc":"client/src/pages/AdminMessages.tsx:151",className:"text-center py-12",children:[e.jsx(P,{"data-loc":"client/src/pages/AdminMessages.tsx:152",className:"w-12 h-12 mx-auto text-muted-foreground mb-3"}),e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:153",className:"text-muted-foreground",children:"暫時冇用戶查詢"})]}),a&&a.length>0&&e.jsx("div",{"data-loc":"client/src/pages/AdminMessages.tsx:159",className:"space-y-4",children:a.map(s=>e.jsx(c,{"data-loc":"client/src/pages/AdminMessages.tsx:161",className:`shadow-md transition-all ${s.status==="pending"?"border-yellow-300/50 dark:border-yellow-700/50":""}`,children:e.jsxs(L,{"data-loc":"client/src/pages/AdminMessages.tsx:167",className:"p-4",children:[e.jsx("div",{"data-loc":"client/src/pages/AdminMessages.tsx:169",className:"flex items-start justify-between mb-2",children:e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:170",className:"flex-1",children:[e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:171",className:"flex items-center gap-2 mb-1",children:[e.jsx(f,{"data-loc":"client/src/pages/AdminMessages.tsx:172",className:`text-[10px] ${M[s.status||"pending"]?.color||""}`,children:M[s.status||"pending"]?.label}),e.jsx(f,{"data-loc":"client/src/pages/AdminMessages.tsx:175",variant:"outline",className:"text-[10px]",children:C[s.category]||s.category})]}),e.jsx("h3",{"data-loc":"client/src/pages/AdminMessages.tsx:179",className:"font-bold text-base",children:s.subject})]})}),e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:184",className:"flex items-center gap-1.5 mb-2 text-xs text-muted-foreground",children:[e.jsx(B,{"data-loc":"client/src/pages/AdminMessages.tsx:185",className:"w-3 h-3"}),e.jsx("span",{"data-loc":"client/src/pages/AdminMessages.tsx:186",children:s.userName||"匿名用戶"}),e.jsx("span",{"data-loc":"client/src/pages/AdminMessages.tsx:187",className:"mx-1",children:"•"}),e.jsx(T,{"data-loc":"client/src/pages/AdminMessages.tsx:188",className:"w-3 h-3"}),e.jsx("span",{"data-loc":"client/src/pages/AdminMessages.tsx:189",children:new Date(s.createdAt).toLocaleStr
11ing("zh-HK")})]}),e.jsx("div",{"data-loc":"client/src/pages/AdminMessages.tsx:193",className:"p-3 rounded-lg bg-muted/50 mb-3",children:e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:194",className:"text-sm whitespace-pre-wrap",children:s.message})}),s.reply&&e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:199",className:"p-3 rounded-lg bg-gradient-to-r from-green-50 to-emerald-50 dark:from-green-950/30 dark:to-emerald-950/30 border border-green-200/50 dark:border-green-800/50 mb-3",children:[e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:200",className:"flex items-center gap-1.5 mb-1.5",children:[e.jsx(K,{"data-loc":"client/src/pages/AdminMessages.tsx:201",className:"w-3.5 h-3.5 text-green-500"}),e.jsx("span",{"data-loc":"client/src/pages/AdminMessages.tsx:202",className:"text-xs font-medium text-green-600 dark:text-green-400",children:"你嘅回覆"})]}),e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:204",className:"text-sm whitespace-pre-wrap",children:s.reply}),s.repliedAt&&e.jsx("p",{"data-loc":"client/src/pages/AdminMessages.tsx:206",className:"text-[10px] text-muted-foreground mt-1.5",children:new Date(s.repliedAt).toLocaleString("zh-HK")})]}),e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:214",className:"flex items-center gap-2",children:[s.status==="pending"&&e.jsxs(t,{"data-loc":"client/src/pages/AdminMessages.tsx:216",variant:"outline",size:"sm",onClick:()=>v(s.id),disabled:A.isPending,className:"text-xs",children:[e.jsx($,{"data-loc":"client/src/pages/AdminMessages.tsx:223",className:"w-3.5 h-3.5 mr-1"}),"標記已讀"]}),p!==s.id?e.jsxs(t,{"data-loc":"client/src/pages/AdminMessages.tsx:228",variant:"outline",size:"sm",onClick:()=>{o(s.id),n(s.reply||"")},className:"text-xs",children:[e.jsx(D,{"data-loc":"client/src/pages/AdminMessages.tsx:237",className:"w-3.5 h-3.5 mr-1"}),s.reply?"修改回覆":"回覆"]}):null]}),p===s.id&&e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:245",className:"mt-3 p-3 rounded-lg border border-blue-200/50 dark:border-blue-800/50 bg-blue-50/50 dark:bg-blue-950/20",children:[e.jsx(E,{"data-loc":"client/src/pages/AdminMessages.tsx:246",placeholder:"打返你嘅回覆...",value:l,onChange:r=>n(r.target.value),className:"min-h-[80px] resize-none mb-2",maxLength:2e3}),e.jsxs("div",{"data-loc":"client/src/pages/AdminMessages.tsx:253",className:"flex items-center gap-2",children:[e.jsxs(t,{"data-loc":"client/src/pages/AdminMessages.tsx:254",size:"sm",onClick:()=>k(s.id),disabled:x.isPending||!l.trim(),className:"bg-gradient-to-r from-blue-500 to-purple-500 text-white text-xs",children:[x.isPending?e.jsx(N,{"data-loc":"client/src/pages/AdminMessages.tsx:261",className:"w-3 h-3 mr-1"}):e.jsx(H,{"data-loc":"client/src/pages/AdminMessages.tsx:263",className:"w-3 h-3 mr-1"}),"送出回覆"]}),e.jsx(t,{"data-loc":"client/src/pages/AdminMessages.tsx:267",variant:"ghost",size:"sm",onClick:()=>{o(null),n("")},className:"text-xs",children:"取消"})]})]})]})},s.id))})]})})}export{G 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.