PageSourceSearch

https://go853c.manus.space/assets/AdminEstatesTransactions-D8Qb9m-a.js

js go853c.manus.space collected 2026-10-03 05:04:30 UTC 27,028 bytes, 6 lines download raw bytes

1import{t as g,r as l,g as o,j as s,T as U,ag as c,ae as ds,S as os,R as ms,E as xs,G as ps,bg as gs}from"./index-DxpMJHht.js";import{A as us}from"./AdminLayout-0d316vlG.js";import{I as m}from"./input-BM87a4su.js";import{L as d}from"./label-N5PEA7-o.js";import{S as hs,a as As,b as Ts,c as Es,d as B}from"./select-DmrdHioO.js";import{T as js,a as fs,b as S,c as p,d as Ns,e as x}from"./table-04dY2NzI.js";import{D as Y,a as _,b as H,c as K,d as Q}from"./useComposition-XW7wi1uU.js";import{A as vs,a as bs,b as Ss,c as ys,d as Ds,e as ws,f as Cs,g as Ps}from"./alert-dialog-NO9HR8Be.js";import{U as G}from"./upload-CBENvaWW.js";import{P as ks}from"./pencil-DATbeRuH.js";import{T as Ms}from"./trash-2-BXORPUbj.js";import"./badge-DsT5f29h.js";import"./users-pO4YXYoT.js";import"./message-square-BL6WhYih.js";import"./credit-card-CBqiWxzd.js";import"./scroll-text-S2xX2Zri.js";import"./brain-BILY2OXr.js";import"./shield-check-B-c2fWxU.js";import"./code-xml-CbOybmm2.js";import"./link-2-CKikx1IH.js";import"./index-DpvxDjfc.js";import"./index-B3jfGoxH.js";import"./index-Dd2B6ZeX.js";import"./usePersistFn-D0m5YWYz.js";const Fs={centaline:"中原",midland:"美聯",gov:"政府",manual:"手動錄入"},Rs={centaline:"bg-blue-100 text-blue-700",midland:"bg-green-100 text-green-700",gov:"bg-purple-100 text-purple-700",manual:"bg-gray-100 text-gray-700"};function Is(n){if(!n)return"—";const i=parseFloat(n);return isNaN(i)?"—":i>=1e6?`MOP ${(i/1e6).toFixed(2)}M`:`MOP ${i.toLocaleString()}`}function Ls(n){if(!n)return"—";const i=parseFloat(n);return isNaN(i)?"—":`${i.toFixed(1)} 呎`}function Os(n){return n?new Date(n).toLocaleDateString("zh-HK",{year:"numeric",month:"2-digit",day:"2-digit"}):"—"}function zs(n){if(!n)return"";const i=new Date(n),y=i.getFullYear(),D=String(i.getMonth()+1).padStart(2,"0"),w=String(i.getDate()).padStart(2,"0");return`${y}-${D}-${w}`}const J={propertyName:"",block:"",floor:"",unit:"",grossArea:"",salableArea:"",transactionPrice:"",pricePerSqft:"",transactionDate:"",dataSource:"manual"};function da(){const n=g.useUtils(),[i,y]=l.useState(""),[D,w]=l.useState(""),[C,W]=l.useState(),[j,f]=l.useState(1),z=50,[X,u]=l.useState(!1),[P,$]=l.useState(null),[e,r]=l.useState({...J}),[k,M]=l.useState(null),[Z,N]=l.useState(!1),[h,A]=l.useState(""),q=l.useRef(null),{data:ss}=g.admin.estatesData.listDistricts.useQuery(),{data:T,isLoading:as,refetch:ts}=g.admin.estatesData.listTransactions.useQuery({keyword:D||void 0,subDistrictId:C,page:j,pageSize:z}),F=T?Math.ceil(T.total/z):0,R=g.admin.estatesData.createTransaction.useMutation({onSuccess:()=>{o.success("成交記錄已新增"),n.admin.estatesData.listTransactions.invalidate(),u(!1),E()},onError:a=>o.error(a.message)}),I=g.admin.estatesData.updateTransaction.useMutation({onSuccess:()=>{o.success("成交記錄已更新"),n.admin.estatesData.listTransactions.invalidate(),u(!1),E()},onError:a=>o.error(a.message)}),es=g.admin.estatesData.deleteTransaction.useMutation({onSuccess:()=>{o.success("成交記錄已刪除"),n.admin.estatesData.listTransactions.invalidate(),M(null)},onError:a=>o.error(a.message)}),L=g.admin.estatesData.importTransactionsCsv.useMutation({onSuccess:a=>{o.success(`成功導入 ${a.inserted} 筆記錄${a.errors.length>0?`,${a.errors.length} 行解析失敗`:""}`),n.admin.estatesData.listTransactions.invalidate(),N(!1),A("")},onError:a=>o.error(a.message)});function E(){$(null),r({...J})}function ns(){E(),u(!0)}function is(a){$(a.id),r({propertyName:a.propertyName??"",block:a.block??"",floor:a.floor??"",unit:a.unit??"",grossArea:a.grossArea??"",salableArea:a.salableArea??"",transactionPrice:a.transactionPrice??"",pricePerSqft:a.pricePerSqft??"",transactionDate:zs(a.transactionDate),dataSource:a.dataSource??"manual"}),u(!0)}function cs(){if(!e.propertyName.trim()){o.error("屋苑名稱為必填項");return}const a={propertyName:e.propertyName.trim(),block:e.block||void 0,floor:e.floor||void 0,unit:e.unit||void 0,grossArea:e.grossArea?parseFloat(e.grossArea):void 0,salableArea:e.salableArea?parseFloat(e.salableArea):void 0,transactionPrice:e.transactionPrice?parseFloat(e.transactionPrice):void 0,pricePerSqft:e.pricePerSqft?parseFloat(e.pricePerSqft):void 0,transactionDate:e.transactionDate||void 0,dataSource:e.dataSource};P?I.mutate({id:P,...a}):R.mutate(a)}function rs(a){const t=a.target.files?.[0];if(!t)return;if(t.size>5*1024*1024){o.error("檔案大小不能超過 5MB");return}const v=new FileReader;v.onload=b=>{A(b.target?.result??"")},v.readAsText(t,"utf-8")}function ls(){const a="propertyName,block,floor,unit,grossArea,salableArea,transactionPrice,pricePerSqft,transactionDate,dataSource",t="海一居,A座,12,B,800,650,5000000,6250,2024-03-15,manual",v=new Blob([`${a}
2${t}
3`],{type:"text/csv;charset=utf-8;"}),b=URL.createObjectURL(v),O=document.createElement("a");O.href=b,O.download="transactions_template.csv",O.click(),URL.revokeObjectURL(b)}const V=()=>{w(i),f(1)};return s.jsxs(us,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:262",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:263",className:"p-6 space-y-6",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:265",className:"flex items-center justify-between",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:266",children:[s.jsxs("h1",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:267",className:"text-2xl font-bold text-foreground flex items-center gap-2",children:[s.jsx(U,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:268",className:"w-6 h-6 text-orange-500"}),"成交記錄管理"]}),s.jsx("p",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:271",className:"text-sm text-muted-foreground mt-1",children:"管理逐筆成交記錄,支援手動新增、編輯及 CSV 批量導入"})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:275",className:"flex gap-2",children:[s.jsxs(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:276",variant:"outline",size:"sm",onClick:()=>N(!0),children:[s.jsx(G,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:277",className:"w-4 h-4 mr-1.5"}),"批量導入 CSV"]}),s.jsxs(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:280",size:"sm",onClick:ns,className:"bg-orange-500 hover:bg-orange-600",children:[s.jsx(ds,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:281",className:"w-4 h-4 mr-1.5"}),"新增記錄"]})]})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:288",className:"flex flex-wrap gap-3 items-center bg-white rounded-xl border border-gray-100 p-4",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:289",className:"flex gap-2 flex-1 min-w-[200px] max-w-xs",children:[s.jsx(m,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:290",placeholder:"搜尋屋苑名稱...",value:i,onChange:a=>y(a.target.value),onKeyDown:a=>a.key==="Enter"&&V(),className:"h-9"}),s.jsx(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:297",size:"sm",variant:"outline",onClick:V,className:"h-9",children:s.jsx(os,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:298",className:"w-4 h-4"})})]}),s.jsxs(hs,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:301",value:C?String(C):"all",onValueChange:a=>{W(a==="all"?void 0:parseInt(a)),f(1)},children:[s.jsx(As,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:305",className:"w-44 h-9",children:s.jsx(Ts,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:306",placeholder:"所有地區"})}),s.jsxs(Es,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:308",children:[s.jsx(B,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:309",value:"all",children:"所有地區"}),ss?.map(a=>a.subDistricts?.map(t=>s.jsxs(B,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:312",value:String(t.id),children:[a.name," — ",t.name]},t.id)))]})]}),s.jsxs(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:317",size:"sm",variant:"ghost",onClick:()=>ts(),className:"h-9",children:[s.jsx(ms,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:318",className:"w-4 h-4 mr-1"}),"刷新"]}),s.jsxs("span",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:321",className:"text-sm text-muted-foreground ml-auto",children:["共 ",s.jsx("span",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:322",className:"font-semibold text-orange-600",children:T?.total??0})," 筆記錄"]})]}),s.jsx("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:327",className:"bg-white rounded-xl border border-gray-100 overflow-hidden",children:s.jsxs(js,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:328",children:[s.jsx(fs,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:329",children:s.jsxs(S,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:330",className:"bg-gray-50",children:[s.jsx(p,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:331",className:"w-[180px]",children:"屋苑名稱"}),s.jsx(p,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:332",className:"w-[100px]",children:"座/層/室"}),s.jsx(p,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:333",className:"w-[90px] text-right",children:"建築面積"}),s.jsx(p,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:334",className:"w-[110px] text-right",children:"成交價"}),s.jsx(p,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:335",className:"w-[90px] text-right",children:"呎價"}),s.jsx(p,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:336",className:"w-[100px] text-center",children:"成交日期"}),s.jsx(p,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:337",className:"w-[70px] text-center",children:"來源"}),s.jsx(p,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:338",className:"w-[80px] text-right",children:"操作"})]})}),s.jsx(Ns,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:341",children:as?s.jsx(S,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:343",children:s.jsx(x,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:344",colSpan:8,className:"text-center py-16 text-muted-foreground",children:s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:345",className:"flex flex-col items-center gap-2",children:[s.jsx("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:346",className:"w-6 h-6 border-2 border-orange-500 border-t-transparent roun
3ded-full animate-spin"}),s.jsx("span",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:347",className:"text-sm",children:"載入中..."})]})})}):T?.items?.length?T.items.map(a=>s.jsxs(S,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:361",className:"hover:bg-orange-50/30 transition-colors",children:[s.jsxs(x,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:362",children:[s.jsx("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:363",className:"font-medium text-sm",children:a.propertyName}),a.subDistrictName&&s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:365",className:"text-xs text-muted-foreground",children:[a.districtName," · ",a.subDistrictName]})]}),s.jsx(x,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:368",className:"text-sm text-muted-foreground",children:[a.block,a.floor?`${a.floor}樓`:null,a.unit].filter(Boolean).join(" ")||"—"}),s.jsx(x,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:371",className:"text-sm text-right",children:Ls(a.grossArea)}),s.jsx(x,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:372",className:"text-right",children:s.jsx("span",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:373",className:"font-semibold text-orange-600 text-sm",children:Is(a.transactionPrice)})}),s.jsx(x,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:375",className:"text-sm text-right",children:a.pricePerSqft?`${parseFloat(a.pricePerSqft).toLocaleString()}`:"—"}),s.jsx(x,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:376",className:"text-sm text-center",children:Os(a.transactionDate)}),s.jsx(x,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:377",className:"text-center",children:s.jsx("span",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:378",className:`text-xs px-2 py-0.5 rounded-full font-medium ${Rs[a.dataSource]??"bg-gray-100 text-gray-700"}`,children:Fs[a.dataSource]??a.dataSource})}),s.jsx(x,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:382",className:"text-right",children:s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:383",className:"flex justify-end gap-1",children:[s.jsx(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:384",size:"icon",variant:"ghost",className:"h-7 w-7",onClick:()=>is(a),children:s.jsx(ks,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:385",className:"w-3.5 h-3.5"})}),s.jsx(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:387",size:"icon",variant:"ghost",className:"h-7 w-7 text-red-500 hover:text-red-600 hover:bg-red-50",onClick:()=>M(a.id),children:s.jsx(Ms,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:388",className:"w-3.5 h-3.5"})})]})})]},a.id)):s.jsx(S,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:352",children:s.jsxs(x,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:353",colSpan:8,className:"text-center py-16 text-muted-foreground",children:[s.jsx(U,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:354",className:"w-10 h-10 mx-auto mb-3 text-gray-200"}),s.jsx("p",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:355",className:"text-sm font-medium",children:"暫無成交記錄"}),s.jsx("p",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:356",className:"text-xs mt-1",children:"點擊「新增記錄」手動錄入,或「批量導入 CSV」批量上傳"})]})})})]})}),F>1&&s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:401",className:"flex items-center justify-between",children:[s.jsxs("span",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:402",className:"text-sm text-muted-foreground",children:["第 ",j," / ",F," 頁"]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:405",className:"flex gap-2",children:[s.jsxs(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:406",size:"sm",variant:"outline",disabled:j<=1,onClick:()=>f(a=>a-1),children:[s.jsx(xs,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:407",className:"w-4 h-4"}),"上一頁"]}),s.jsxs(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:410",size:"sm",variant:"outline",disabled:j>=F,onClick:()=>f(a=>a+1),children:["下一頁",s.jsx(ps,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:412",className:"w-4 h-4"})]})]})]})]}),s.jsx(Y,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:420",open:X,onOpenChange:a=>{a||(u(!1),E())},children:s.jsxs(_,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:421",className:"max-w-lg max-h-[90vh] overflow-y-auto",children:[s.jsx(H,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:422",children:s.jsx(K,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:423",children:P?"編輯成交記錄":"新增成交記錄"})}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:425",className:"space-y-4 py-2",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:426",children:[s.jsxs(d,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:427",className:"text-xs font-medium",children:["屋苑名稱 ",s.jsx("span",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:427",className:"text-red-500",children:"*"})]}),s.jsx(m,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:428",placeholder:"ä¾
3‹ï¼šæµ·ä¸€å±…",value:e.propertyName,onChange:a=>r(t=>({...t,propertyName:a.target.value})),className:"mt-1"})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:435",className:"grid grid-cols-3 gap-3",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:436",children:[s.jsx(d,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:437",className:"text-xs font-medium",children:"座別"}),s.jsx(m,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:438",placeholder:"例:A座",value:e.block,onChange:a=>r(t=>({...t,block:a.target.value})),className:"mt-1"})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:440",children:[s.jsx(d,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:441",className:"text-xs font-medium",children:"樓層"}),s.jsx(m,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:442",placeholder:"例:12",value:e.floor,onChange:a=>r(t=>({...t,floor:a.target.value})),className:"mt-1"})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:444",children:[s.jsx(d,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:445",className:"text-xs font-medium",children:"單元"}),s.jsx(m,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:446",placeholder:"例:B",value:e.unit,onChange:a=>r(t=>({...t,unit:a.target.value})),className:"mt-1"})]})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:449",className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:450",children:[s.jsx(d,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:451",className:"text-xs font-medium",children:"建築面積(呎)"}),s.jsx(m,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:452",type:"number",placeholder:"例:800",value:e.grossArea,onChange:a=>r(t=>({...t,grossArea:a.target.value})),className:"mt-1"})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:454",children:[s.jsx(d,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:455",className:"text-xs font-medium",children:"實用面積(呎)"}),s.jsx(m,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:456",type:"number",placeholder:"例:650",value:e.salableArea,onChange:a=>r(t=>({...t,salableArea:a.target.value})),className:"mt-1"})]})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:459",className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:460",children:[s.jsx(d,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:461",className:"text-xs font-medium",children:"成交價(MOP)"}),s.jsx(m,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:462",type:"number",placeholder:"例:5000000",value:e.transactionPrice,onChange:a=>r(t=>({...t,transactionPrice:a.target.value})),className:"mt-1"})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:464",children:[s.jsx(d,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:465",className:"text-xs font-medium",children:"呎價(MOP/呎)"}),s.jsx(m,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:466",type:"number",placeholder:"例:6250",value:e.pricePerSqft,onChange:a=>r(t=>({...t,pricePerSqft:a.target.value})),className:"mt-1"})]})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:469",className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:470",children:[s.jsx(d,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:471",className:"text-xs font-medium",children:"成交日期"}),s.jsx(m,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:472",type:"date",value:e.transactionDate,onChange:a=>r(t=>({...t,transactionDate:a.target.value})),className:"mt-1"})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:474",children:[s.jsx(d,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:475",className:"text-xs font-medium",children:"數據來源"}),s.jsxs("select",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:476",value:e.dataSource,onCh
3ange:a=>r(t=>({...t,dataSource:a.target.value})),className:"mt-1 w-full px-3 py-2 text-sm border border-input rounded-md bg-background",children:[s.jsx("option",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:481",value:"manual",children:"手動錄入"}),s.jsx("option",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:482",value:"centaline",children:"中原"}),s.jsx("option",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:483",value:"midland",children:"美聯"}),s.jsx("option",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:484",value:"gov",children:"政府"})]})]})]})]}),s.jsxs(Q,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:489",children:[s.jsx(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:490",variant:"outline",onClick:()=>{u(!1),E()},children:"取消"}),s.jsx(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:491",onClick:cs,disabled:R.isPending||I.isPending,className:"bg-orange-500 hover:bg-orange-600",children:R.isPending||I.isPending?"儲存中...":"儲存"})]})]})}),s.jsx(vs,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:503",open:k!==null,onOpenChange:a=>{a||M(null)},children:s.jsxs(bs,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:504",children:[s.jsxs(Ss,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:505",children:[s.jsx(ys,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:506",children:"確認刪除"}),s.jsx(Ds,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:507",children:"此操作無法復原,確定要刪除這筆成交記錄嗎?"})]}),s.jsxs(ws,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:511",children:[s.jsx(Cs,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:512",children:"取消"}),s.jsx(Ps,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:513",className:"bg-red-500 hover:bg-red-600",onClick:()=>k&&es.mutate({id:k}),children:"確認刪除"})]})]})}),s.jsx(Y,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:524",open:Z,onOpenChange:a=>{a||(N(!1),A(""))},children:s.jsxs(_,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:525",className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[s.jsx(H,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:526",children:s.jsx(K,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:527",children:"批量導入成交記錄(CSV)"})}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:529",className:"space-y-4 py-2",children:[s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:530",className:"bg-blue-50 border border-blue-200 rounded-lg p-4 text-sm text-blue-800",children:[s.jsx("p",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:531",className:"font-medium mb-2",children:"CSV 格式說明"}),s.jsxs("p",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:532",className:"text-xs mb-1",children:["必填欄位:",s.jsx("code",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:532",className:"bg-blue-100 px-1 rounded",children:"propertyName"}),"(屋苑名稱)"]}),s.jsx("p",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:533",className:"text-xs mb-1",children:"選填欄位:block(座別)、floorï¼
3ˆæ¨“層)、unit(單元)、grossArea(建築面積呎)、salableArea(實用面積呎)、transactionPrice(成交價MOP)、pricePerSqft(呎價)、transactionDate(成交日期YYYY-MM-DD)、dataSource(來源:manual/centaline/midland/gov)"}),s.jsx("p",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:534",className:"text-xs text-blue-600 mt-2",children:"中文欄位名稱也支援:屋苑名稱、座別、樓層、單元、建築面積、實用面積、成交價、呎價、成交日期、來源"})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:536",className:"flex gap-2",children:[s.jsxs(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:537",size:"sm",variant:"outline",onClick:ls,children:[s.jsx(gs,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:538",className:"w-4 h-4 mr-1.5"}),"下載範本"]}),s.jsxs(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:541",size:"sm",variant:"outline",onClick:()=>q.current?.click(),children:[s.jsx(G,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:542",className:"w-4 h-4 mr-1.5"}),"選擇 CSV 檔案"]}),s.jsx("input",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:545",ref:q,type:"file",accept:".csv,text/csv",className:"hidden",onChange:rs})]}),s.jsxs("div",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:547",children:[s.jsx(d,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:548",className:"text-xs font-medium",children:"CSV 內容(可直接貼上)"}),s.jsx("textarea",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:549",className:"mt-1 w-full h-48 px-3 py-2 text-xs border border-input rounded-md bg-background font-mono resize-none",placeholder:`propertyName,block,floor,unit,transactionPrice,transactionDate
4海一居,A座,12,B,5000000,2024-03-15
5...`,value:h,onChange:a=>A(a.target.value)}),h&&s.jsxs("p",{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:556",className:"text-xs text-muted-foreground mt-1",children:["約 ",h.split(`
6`).filter(a=>a.trim()).length-1," 行數據(不含標頭)"]})]})]}),s.jsxs(Q,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:562",children:[s.jsx(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:563",variant:"outline",onClick:()=>{N(!1),A("")},children:"取消"}),s.jsx(c,{"data-loc":"client/src/pages/admin/AdminEstatesTransactions.tsx:564",onClick:()=>h&&L.mutate({csvText:h}),disabled:!h||L.isPending,className:"bg-orange-500 hover:bg-orange-600",children:L.isPending?"導入中...":"確認導入"})]})]})})]})}export{da 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.