PageSourceSearch

https://nazohiroba.com/_nuxt/orders.d608aa42.js

js nazohiroba.com collected 2026-09-24 13:36:09 UTC 11,218 bytes, 1 lines download raw bytes

1import{_ as it}from"./nuxt-link.1d409c62.js";import{d as dt,h as ut,r as u,i as rt,u as ct,o as n,c as i,a as t,j as e,t as l,l as C,s as q,x as S,H as _t,v as G,F as pt,y as vt,k as c,z as K,f as mt,w as ft,n as Q,b as W,_ as gt}from"./entry.fcc3f972.js";import{u as bt}from"./useStripe.07b20ce1.js";import"./firebase.efe57387.js";const ht={class:"orders-manager"},yt={key:0,class:"auth-error"},kt={key:1,class:"loading"},wt={key:2,class:"manager-content"},$t={class:"stats-cards"},Ct={class:"stat-card"},St={class:"stat-value"},Mt={class:"stat-card stat-revenue"},xt={class:"stat-value"},Dt={class:"stat-card stat-paid"},Tt={class:"stat-value"},Xt={class:"stat-card stat-pending"},Nt={class:"stat-value"},Pt={class:"stat-card stat-refunded"},It={class:"stat-value"},Lt={class:"filters"},Rt={class:"filter-group"},Vt={class:"filter-group"},Ut={class:"filter-group"},zt={key:0,class:"loading"},Bt={key:1,class:"empty"},Ot={key:2,class:"data-table"},At={class:"order-number"},Et={class:"user-cell"},Ft={class:"user-name"},Ht={class:"user-email"},jt={key:1,class:"user-cell"},Jt={class:"user-name"},Yt={class:"user-email"},Zt={class:"amount"},qt={key:0,class:"coupon-badge"},Gt={key:1,class:"text-muted"},Kt={key:0},Qt={key:1,class:"text-muted"},Wt={class:"action-btns"},ts=["onClick"],ss=["onClick"],es={key:3,class:"pagination"},as=["disabled"],ls=["disabled"],os={class:"modal-content"},ns={key:0,class:"modal-body"},is={class:"detail-row"},ds={class:"detail-value"},us={class:"detail-row"},rs={class:"detail-value"},cs={class:"detail-row"},_s={class:"detail-value"},ps={key:0,class:"coupon-details"},vs={class:"detail-row"},ms={class:"detail-value coupon-code"},fs={class:"detail-row"},gs={class:"detail-value discount-amount"},bs={key:0,class:"detail-row"},hs={class:"detail-value"},ys={class:"detail-row"},ks={class:"detail-json"},ws={class:"modal-content"},$s={key:0,class:"modal-body"},Cs={class:"refund-info"},Ss={class:"detail-row"},Ms={class:"detail-value"},xs={class:"detail-row"},Ds={class:"detail-value"},Ts={class:"form-group"},Xs={class:"modal-actions"},Ns=["disabled"],Ps=dt({__name:"orders",setup(Is){const{getIdToken:L}=ut(),{formatPrice:M,getProductTypeName:tt,getStatusName:st}=bt(),x=u(!0),D=u(null),T=u([]),p=u({total_orders:0,total_revenue:0,paid_count:0,pending_count:0,refunded_count:0}),y=u({page:1,limit:50,total:0,total_pages:1}),r=u(1),X=u(!1),m=u(""),f=u(""),g=u(""),N=u(!1),P=u(!1),d=u(null),b=u(""),k=u(!1);let I=null;rt(async()=>{try{await v(),x.value=!1}catch(o){D.value=o.message||"認証エラー",x.value=!1}});async function v(){X.value=!0;try{const o=await L();if(!o)throw new Error("認証が必要です");const s=new URLSearchParams;s.set("page",r.value.toString()),s.set("limit","50"),m.value&&s.set("status",m.value),f.value&&s.set("product_type",f.value),g.value&&s.set("order_number",g.value);const _=await $fetch(`/api/v2/admin/orders?${s.toString()}`,{headers:{Authorization:`Bearer ${o}`}});T.value=_.orders||[],y.value=_.pagination,p.value=_.statistics}catch(o){console.error("Error fetching orders:",o)}finally{X.value=!1}}function et(){I&&clearTimeout(I),I=setTimeout(()=>{r.value=1,v()},500)}function R(o){r.value=o,v()}function V(o){if(!o)return"-";const s=new Date(o);return`${s.getMonth()+1}/${s.getDate()}`}function at(o){if(!o)return"-";const s=new Date(o);return`${s.getFullYear()}/${s.getMonth()+1}/${s.getDate()} ${s.getHours()}:${String(s.getMinutes()).padStart(2,"0")}`}function U(o){const s=o.metadata;if(!s)return null;if(s.coupon_code){const _=s.discount_amount?` (-¥${Math.floor(s.discount_amount/100).toLocaleString()})`:"";return`${s.coupon_code}${_}`}return s.discount_amount&&s.discount_amount>0?`-¥${Math.floor(s.discount_amount/100).toLocaleString()}`:null}function h(o){const s=o.metadata;return!s||!s.coupon_code&&!s.discount_amount?null:{code:s.coupon_code||null,discount:s.discount_amount?`-¥${Math.floor(s.discount_amount/100).toLocaleString()}`:null,subtotal:s.amount_subtotal?`¥${Math.floor(s.amount_subtotal/100).toLocaleString()}`:null}}function lt(o){d.value=o,N.value=!0}function z(){N.value=!1,d.value=null}function ot(o){d.value=o,b.value="",P.value=!0}function w(){P.value=!1,d.value=null}async function nt(){var o;if(d.value){k.value=!0;try{const s=await L();if(!s)throw new Error("認証が必要です");await $fetch(`/api/v2/admin/orders/${d.value.id}/refund`,{method:"POST",headers:{Authorization:`Bearer ${s}`},body:{reason:b.value}}),w(),await v()}catch(s){alert(((o=s.data)==null?void 0:o.message)||"返金処理に失敗しました")}finally{k.value=!1}}}return ct({title:"注文管理 | 管理画面"}),(o,s)=>{var B,O,A,E;const _=it;return n(),i("div",ht,[s[33]||(s[33]=t("div",{class:"manager-header"},[t("h1",{class:"manager-title"},"注文管理"),t("p",{class:"manager-description"},"Stripe決済による注文を管理します")],-1)),e(D)?(n(),i("div",yt,[t("p",null,l(e(D)),1)])):e(x)?(n(),i("div",kt,s[6]||(s[6]=[t("p",null,"認証確認中...",-1)]))):(n(),i("div",wt,[t("div",$t,[t("div",Ct,[t("div",St,l(e(p).total_orders),1),s[7]||(s[7]=t("div",{class:"stat-label"},"総注文数",-1))]),t("div",Mt,[t("div",xt,l(e(M)(e(p).total_revenue)),1),s[8]||(s[8]=t("div",{class:"stat-label"},"総売上",-1))]),t("div",Dt,[t("div",Tt,l(e(p).paid_count),1),s[9]||(s[9]=t("div",{class:"stat-label"},"支払い済み",-1))]),t("div",Xt,[t("div",Nt,l(e(p).pending_count),1),s[10]||(s[10]=t("div",{class:"stat-label"},"決済待ち",-1))]),t("div",Pt,[t("div",It,l(e(p).refunded_count),1),s[11]||(s[11]=t("div",{class:"stat-label"},"返金済み",-1))])]),t("div",Lt,[t("div",Rt,[s[13]||(s[13]=t("label",null,"ステータス",-1)),C(t("select",{"onUpdate:modelValue":s[0]||(s[0]=a=>S(m)?m.value=a:null),onChange:v},s[12]||(s[12]=[_t('<option value="" data-v-760a09d7>すべて</option><option value="pending" data-v-760a09d7>決済待ち</option><option value="paid" data-v-760a09d7>支払い済み</option><option value="refunded" data-v-760a09d7>返金済み</option><option value="cancelled" data-v-760a09d7>キャンセル</option>',5)]),544),[[q,e(m)]])]),t("div",Vt,[s[15]||(s[15]=t("label",null,"商品タイプ",-1)),C(t("select",{"onUpdate:modelValue":s[1]||(s[1]=a=>S(f)?f.value=a:null),onChange:v},s[14]||(s[14]=[t("option",{value:""},"すべて",-1),t("option",{value:"premium_listing"},"プレミアム掲載",-1),t("option",{value:"banner_ad"},"バナー広告",-1),t("option",{value:"experience_article"},"体験記事",-1)]),544),[[q,e(f)]])]),t("div",Ut,[s[16]||(s[16]=t("label",null,"注文番号",-1)),C(t("input",{"onUpdate:modelValue":s[2]||(s[2]=a=>S(g)?g.value=a:null),type:"text",placeholder:"NZ-XXXXXXXX-XXX",onInput:et},null,544),[[G,e(g)]])])]),e(X)?(n(),i("div",zt," 読み込み中... ")):e(T).length===0?(n(),i("div",Bt," 注文がありません ")):(n(),i("div",Ot,[t("table",null,[s[18]||(s[18]=t("thead",null,[t("tr",null,[t("th",null,"注文番号"),t("th",null,"ユーザー"),t("th",null,"商品"),t("th",null,"金額"),t("th",null,"クーポン"),t("th",null,"ステータス"),t("th",null,"掲載期間"),t("th",null,"注文日"),t("th",null,"操作")])],-1)),t("tbody",null,[(n(!0),i(pt,null,vt(e(T),a=>{var F,H,j,J;return n(),i("tr",{key:a.id},[t("td",At,l(a.order_number),1),t("td",null,[(F=a.users)!=null&&F.nzUserId?(n(),mt(_,{key:0,to:`/users/${a.users.nzUserId}`,class:"user-cell-link",target:"_blank"},{default:ft(()=>{var $,Y,Z;return[t("div",Et,[t("span",Ft,l((($=a.users)==null?void 0:$.name)||((Y=a.uid)==null?void 0:Y.slice(0,8))+"..."),1),t("span",Ht,l(((Z=a.users)==null?void 0:Z.email)||"-"),1)])]}),_:2},1032,["to"])):(n(),i("div",jt,[t("span",Jt,l(((H=a.users)==null?void 0:H.name)||((j=a.uid)==null?void 0:j.slice(0,8))+"..."),1),t("span",Yt,l(((J=a.users)==null?void 0:J.email)||"-"),1)]))]),t("td",null,[t("span",{class:Q(["type-badge",a.product_type])},l(e(tt)(a.product_type)),3)]),t("td",Zt,l(e(M)(a.amount)),1),t("td",null,[U(a)?(n(),i("span",qt,l(U(a)),1)):(n(),i("span",Gt,"-"))]),t("td",null,[t("span",{class:Q(["status-badge",a.status])},l(e(st)(a.status)),3)]),t("td",null,[a.permission_start_date?(n(),i("span",Kt,[W(l(V(a.permission_start_date))+" -",1),s[17]||(s[17]=t("br",null,null,-1)),W(" "+l(V(a.permission_end_date)),1)])):(n(),i("span",Qt,"-"))]),t("td",null,l(at(a.created_at)),1),t("td",null,[t("div",Wt,[a.status==="paid"?(n(),i("button",{key:0,class:"btn-refund",onClick:$=>ot(a)}," 返金 ",8,ts)):c("",!0),t("button",{class:"btn-detail",onClick:$=>lt(a)}," 詳細 ",8,ss)])])])}),128))])])])),e(y).total_pages>1?(n(),i("div",es,[t("button",{disabled:e(r)===1,onClick:s[3]||(s[3]=a=>R(e(r)-1))}," 前へ ",8,as),t("span",null,l(e(r))+" / "+l(e(y).total_pages),1),t("button",{disabled:e(r)===e(y).total_pages,onClick:s[4]||(s[4]=a=>R(e(r)+1))}," 次へ ",8,ls)])):c("",!0)])),e(N)?(n(),i("div",{key:3,class:"modal-overlay",onClick:K(z,["self"])},[t("div",os,[t("div",{class:"modal-header"},[s[19]||(s[19]=t("h3",null,"注文詳細",-1)),t("button",{class:"modal-close",onClick:z},"×")]),e(d)?(n(),i("div",ns,[t("div",is,[s[20]||(s[20]=t("span",{class:"detail-label"},"注文番号",-1)),t("span",ds,l(e(d).order_number),1)]),t("div",us,[s[21]||(s[21]=t("span",{class:"detail-label"}
1,"Stripe Session ID",-1)),t("span",rs,l(e(d).stripe_checkout_session_id||"-"),1)]),t("div",cs,[s[22]||(s[22]=t("span",{class:"detail-label"},"Stripe Payment Intent",-1)),t("span",_s,l(e(d).stripe_payment_intent_id||"-"),1)]),h(e(d))?(n(),i("div",ps,[s[26]||(s[26]=t("h4",null,"クーポン情報",-1)),t("div",vs,[s[23]||(s[23]=t("span",{class:"detail-label"},"クーポンコード",-1)),t("span",ms,l(((B=h(e(d)))==null?void 0:B.code)||"-"),1)]),t("div",fs,[s[24]||(s[24]=t("span",{class:"detail-label"},"割引額",-1)),t("span",gs,l(((O=h(e(d)))==null?void 0:O.discount)||"-"),1)]),(A=h(e(d)))!=null&&A.subtotal?(n(),i("div",bs,[s[25]||(s[25]=t("span",{class:"detail-label"},"割引前金額",-1)),t("span",hs,l((E=h(e(d)))==null?void 0:E.subtotal),1)])):c("",!0)])):c("",!0),t("div",ys,[s[27]||(s[27]=t("span",{class:"detail-label"},"メタデータ",-1)),t("pre",ks,l(JSON.stringify(e(d).metadata,null,2)),1)])])):c("",!0)])])):c("",!0),e(P)?(n(),i("div",{key:4,class:"modal-overlay",onClick:K(w,["self"])},[t("div",ws,[t("div",{class:"modal-header"},[s[28]||(s[28]=t("h3",null,"返金処理",-1)),t("button",{class:"modal-close",onClick:w},"×")]),e(d)?(n(),i("div",$s,[s[32]||(s[32]=t("p",{class:"refund-warning"}," この注文を返金しますか?この操作は取り消せません。 ",-1)),t("div",Cs,[t("div",Ss,[s[29]||(s[29]=t("span",{class:"detail-label"},"注文番号",-1)),t("span",Ms,l(e(d).order_number),1)]),t("div",xs,[s[30]||(s[30]=t("span",{class:"detail-label"},"金額",-1)),t("span",Ds,l(e(M)(e(d).amount)),1)])]),t("div",Ts,[s[31]||(s[31]=t("label",null,"返金理由(任意)",-1)),C(t("textarea",{"onUpdate:modelValue":s[5]||(s[5]=a=>S(b)?b.value=a:null),placeholder:"返金理由を入力"},null,512),[[G,e(b)]])]),t("div",Xs,[t("button",{class:"btn-cancel",onClick:w}," キャンセル "),t("button",{class:"btn-refund-confirm",disabled:e(k),onClick:nt},l(e(k)?"処理中...":"返金を実行"),9,Ns)])])):c("",!0)])])):c("",!0)])}}});const zs=gt(Ps,[["__scopeId","data-v-760a09d7"]]);export{zs 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.