PageSourceSearch

https://bacctrack-7ha7hyw7.manus.space/assets/AdminRecommendedSitesPage-DmEFwu3d.js

js bacctrack-7ha7hyw7.manus.space collected 2026-10-03 05:02:21 UTC 13,568 bytes, 1 lines download raw bytes

1import{r as m,t as r,b as d,j as e,X as I,G as B,E as D}from"./index-C3Qps0S4.js";import{B as n}from"./button-xdpkFraK.js";import{I as g}from"./input-Dj8udylZ.js";import{P as T}from"./plus-BLlLQSZn.js";import{U as b}from"./upload-_gXBE_kq.js";import{G}from"./globe-BOZ36Itx.js";import{M as X}from"./mouse-pointer-click-CvZ_JWhU.js";import{A as $}from"./arrow-up-CfgqzYEd.js";import{E as O}from"./eye-off-BKF-pIRA.js";import{P as Q}from"./pencil-BOPWUr1Y.js";import{T as W}from"./trash-2-DOBLe4Vk.js";import{E as _}from"./external-link-BaKbLCyP.js";import"./index-Jol-UBUv.js";import"./dialog-BY1FISUw.js";import"./index-BKUanX19.js";import"./index-Dr02_Kwf.js";const P={name:"",url:"",description:"",logoUrl:"",rank:1};function re(){const[N,x]=m.useState(!1),[i,p]=m.useState(null),[s,c]=m.useState(P),[u,j]=m.useState(!1),h=m.useRef(null),v=r.admin.uploadBannerImage.useMutation({onError:a=>{d.error(`อัปโหลดไม่สำเร็จ: ${a.message}`)}}),w=async a=>{if(a.size>5*1024*1024){d.error("ไฟล์ใหญ่เกิน 5MB");return}if(!a.type.startsWith("image/")){d.error("กรุณาเลือกไฟล์รูปภาพ");return}j(!0);try{const t=new FileReader,z=await new Promise((R,F)=>{t.onload=()=>{R(t.result.split(",")[1])},t.onerror=F,t.readAsDataURL(a)}),f=await v.mutateAsync({base64:z,mimeType:a.type,field:"desktop"});f.url&&(c(R=>({...R,logoUrl:f.url})),d.success("อัปโหลดโลโก้สำเร็จ"))}catch{}finally{j(!1)}},{data:o=[],refetch:S}=r.recommendedSites.adminList.useQuery(),k=r.recommendedSites.adminCreate.useMutation({onSuccess:()=>{d.success("เพิ่มเว็บแนะนำสำเร็จ"),S(),A()},onError:a=>d.error(a.message)}),l=r.recommendedSites.adminUpdate.useMutation({onSuccess:()=>{d.success("อัปเดตเว็บแนะนำสำเร็จ"),S(),A()},onError:a=>d.error(a.message)}),y=r.recommendedSites.adminDelete.useMutation({onSuccess:()=>{d.success("ลบเว็บแนะนำสำเร็จ"),S()},onError:a=>d.error(a.message)}),A=()=>{c(P),p(null),x(!1)},C=a=>{c({name:a.name,url:a.url,description:a.description||"",logoUrl:a.logoUrl||"",rank:a.rank}),p(a.id),x(!0)},U=()=>{if(!s.name.trim()||!s.url.trim()){d.error("กรุณากรอกชื่อและ URL");return}i?l.mutate({id:i,...s}):k.mutate(s)},E=a=>{l.mutate({id:a.id,isActive:a.isActive?0:1})},M=(a,t)=>{t!==0&&l.mutate({id:a.id,rank:a.rank-1})},L=(a,t)=>{t!==o.length-1&&l.mutate({id:a.id,rank:a.rank+1})};return e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:126",className:"space-y-6",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:128",className:"flex items-center justify-between",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:129",children:[e.jsx("h1",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:130",className:"text-xl font-bold text-foreground",children:"เว็บแนะนำ"}),e.jsx("p",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:131",className:"text-sm text-muted-foreground",children:"จัดการเว็บไซต์แนะนำที่แสดงในหน้าหลัก (สูงสุด 5 เว็บ)"})]}),e.jsxs(n,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:133",onClick:()=>{x(!0),p(null),c(P)},className:"bg-amber-500 hover:bg-amber-600 text-white",disabled:o.length>=5&&!i,children:[e.jsx(T,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:138",className:"w-4 h-4 mr-1"})," เพิ่มเว็บ"]})]}),N&&e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:144",className:"bg-card border border-border rounded-xl p-4 space-y-3",children:[e.jsx("h3",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:145",className:"text-sm font-semibold text-foreground",children:i?"แก้ไขเว็บแนะนำ":"เพิ่มเว็บแนะนำใหม่"}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:148",className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:149",children:[e.jsx("label",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:150",className:"text-xs text-muted-foreground",children:"ชื่อเว็บ *"}),e.jsx(g,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:151",value:s.name,onChange:a=>c({...s,name:a.target.value}),placeholder:"เช่น BetX Casino",maxLength:100})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:158",children:[e.jsx("label",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:159",className:"text-xs text-muted-foreground",children:"URL ลิงก์ *"}),e.jsx(g,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:160",value:s.url,onChange:a=>c({...s,url:a.target.value}),placeholder:"https://example.com",maxLength:500})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:167",children:[e.jsx("label",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:168",className:"text-xs text-muted-foreground",children:"คำอธิบายสั้น"}),e.jsx(g,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:169",value:s.description,onChange:a=>c({...s,description:a.target.value}),placeholder:"เช่น โบนัสสมัครใหม่ 100%",maxLength:255})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:176",children:[e.jsx("label",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:177",className:"text-xs text-muted-foreground",children:"โลโก้ (ถ้ามี)"}),e.jsx("input",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:178",ref:h,type:"file",accept:"image/*",className:"hidden",onChange:a=>{const t=a.target.files?.[0];t&&w(t),a.target.value=""}}),s.logoUrl?e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:180",className:"flex items-center gap-2 mt-1",children:[e.jsx("img",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:181",src:s.logoUrl,alt:"Logo",className:"w-10 h-10 rounded object-cover border border-border"}),e.jsxs(n,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:182",type:"button",variant:"outline",size:"sm",onClick:()=>h.current?.click(),disabled:u,className:"text-xs",children:[u?"⏳":e.jsx(b,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:183",className:"w-3 h-3 mr-1"})," เปลี่ยน"]}),e.jsx(n,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:185",type:"button",variant:"ghost",size:"sm",onClick:()=>c({...s,logoUrl:""}),className:"text-red-400 h-8 w-8 p-0",children:e.jsx(I,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:186",className:"w-3 h-3"})})]}):e.jsx("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:190",onClick:()=>h.current?.click(),className:"border-2 border-dashed border-border rounded-lg p-3 text-center cursor-pointer hover:border-amber-500/50 transition-colors mt-1",children:u?e.jsx("p",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:192",className:"text-xs text-muted-foreground",children:"⏳ กำลังอัปโหลด..."}):e.jsxs("p",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:194",className:"text-xs text-muted-foreground",children:[e.jsx(b,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:194",className:"w-4 h-4 mx-auto mb-1"}),"คลิกอัปโหลดโลโก้"]}
1)})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:199",children:[e.jsx("label",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:200",className:"text-xs text-muted-foreground",children:"อันดับ (1 = สูงสุด)"}),e.jsx(g,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:201",type:"number",min:1,max:5,value:s.rank,onChange:a=>c({...s,rank:parseInt(a.target.value)||1})})]})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:210",className:"flex gap-2",children:[e.jsx(n,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:211",onClick:U,className:"bg-amber-500 hover:bg-amber-600 text-white",children:i?"อัปเดต":"เพิ่ม"}),e.jsx(n,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:214",variant:"outline",onClick:A,children:"ยกเลิก"})]})]}),e.jsx("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:220",className:"space-y-2",children:o.length===0?e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:222",className:"text-center py-8 text-muted-foreground",children:[e.jsx(G,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:223",className:"w-10 h-10 mx-auto mb-2 opacity-30"}),e.jsx("p",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:224",className:"text-sm",children:"ยังไม่มีเว็บแนะนำ"}),e.jsx("p",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:225",className:"text-xs",children:'กดปุ่ม "เพิ่มเว็บ" เพื่อเริ่มต้น'})]}):o.map((a,t)=>e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:229",className:`flex items-center gap-3 p-3 rounded-xl border ${a.isActive?"border-border bg-card":"border-border/30 bg-card/50 opacity-60"}`,children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:234",className:"w-8 h-8 rounded-lg bg-gradient-to-br from-amber-500 to-orange-600 flex items-center justify-center text-white text-xs font-bold shrink-0",children:["#",a.rank]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:239",className:"flex-1 min-w-0",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:240",className:"flex items-center gap-2",children:[e.jsx("p",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:241",className:"text-sm font-semibold text-foreground truncate",children:a.name}),!a.isActive&&e.jsx("span",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:243",className:"text-[9px] px-1.5 py-0.5 rounded bg-red-500/20 text-red-400",children:"ปิด"})]}),e.jsx("p",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:246",className:"text-[10px] text-muted-foreground truncate",children:a.url}),a.description&&e.jsx("p",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:248",className:"text-[10px] text-blue-400 truncate",children:a.description})]}),e.jsx("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:253",className:"text-center shrink-0",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:254",className:"flex items-center gap-1 text-[10px] text-muted-foreground",children:[e.jsx(X,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:255",className:"w-3 h-3"}),e.jsx("span",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:256",children:a.clickCount})]})}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:261",className:"flex items-center gap-1 shrink-0",children:[e.jsx(n,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:262",size:"sm",variant:"ghost",className:"h-7 w-7 p-0",onClick:()=>M(a,t),children:e.jsx($,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:263",className:"w-3 h-3"})}),e.jsx(n,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:265",size:"sm",variant:"ghost",className:"h-7 w-7 p-0",onClick:()=>L(a,t),children:e.jsx(B,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:266",className:"w-3 h-3"})}),e.jsx(n,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:268",size:"sm",variant:"ghost",className:"h-7 w-7 p-0",onClick:()=>E(a),children:a.isActive?e.jsx(D,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:269",className:"w-3 h-3 text-green-400"}):e.jsx(O,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:269",className:"w-3 h-3 text-red-400"})}),e.jsx(n,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:271",size:"sm",variant:"ghost",className:"h-7 w-7 p-0",onClick:()=>C(a),children:e.jsx(Q,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:272",className:"w-3 h-3 text-blue-400"})}),e.jsx(n,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:274",size:"sm",variant:"ghost",className:"h-7 w-7 p-0",onClick:()=>{confirm("ต้องการลบเว็บนี้?")&&y.mutate({id:a.id})},children:e.jsx(W,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:282",className:"w-3 h-3 text-red-400"})}),e.jsx("a",{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:284",href:a.url,target:"_blank",rel:"noopener noreferrer",children:e.jsx(n,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:285",size:"sm",variant:"ghost",className:"h-7 w-7 p-0",children:e.jsx(_,{"data-loc":"client/src/pages/admin/AdminRecommendedSitesPage.tsx:286",className:"w-3 h-3"})})})]})]},a.id))})]})}export{re 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.