PageSourceSearch

https://luoji.cn/fe/assets/PaidUserDashboard-f11a4f74.js

js luoji.cn collected 2026-10-05 11:05:53 UTC 14,279 bytes, 1 lines download raw bytes

1var Ye=Object.defineProperty;var fe=Object.getOwnPropertySymbols;var Ge=Object.prototype.hasOwnProperty,$e=Object.prototype.propertyIsEnumerable;var ye=(_,u,c)=>u in _?Ye(_,u,{enumerable:!0,configurable:!0,writable:!0,value:c}):_[u]=c,we=(_,u)=>{for(var c in u||(u={}))Ge.call(u,c)&&ye(_,c,u[c]);if(fe)for(var c of fe(u))$e.call(u,c)&&ye(_,c,u[c]);return _};var v=(_,u,c)=>new Promise((A,D)=>{var I=g=>{try{y(c.next(g))}catch(S){D(S)}},w=g=>{try{y(c.throw(g))}catch(S){D(S)}},y=g=>g.done?A(g.value):Promise.resolve(g.value).then(I,w);y((c=c.apply(_,u)).next())});import{V as Ke,r,c as qe,Y as Xe,af as p,az as We,Z as F,a0 as o,ad as n,$ as a,a6 as x,ao as Ze,a2 as C,a3 as s,a1 as O,ah as ie,a4 as Te,a5 as Qe,a7 as xe,ac as q,a8 as ea,i as B,a9 as aa,aa as ta}from"./vendor-575eae6c.js";import{A as sa}from"./admin_service-5d5ca99d.js";import{b as la,d as m,r as oa,P as ce}from"./index-27244a51.js";import{f as b,D as de}from"./audiox_models-5f79f9a8.js";import{j as L,d as na,e as ra}from"./format_utils-478be9d3.js";import{_ as ia}from"./StatisticTabs.vue_vue_type_script_setup_true_lang-60886dfb.js";import{_ as ca}from"./_plugin-vue_export-helper-c27b6911.js";const f=_=>(aa("data-v-87a4a2da"),_=_(),ta(),_),da={class:"h-screen overflow-y-auto bg-gray-50 p-4 md:p-6"},ua={class:"flex flex-wrap items-end gap-3"},_a=f(()=>a("div",{class:"mt-3 text-xs text-gray-400"}," 支付时间只限定付费用户与充值金额口径;余额和 Job 消耗展示所选用户的当前/累计数据。 ",-1)),va={class:"mb-4 grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-5"},pa=f(()=>a("div",{class:"metric-label"},"付费用户",-1)),ma={class:"metric-value"},ga={class:"metric-label"},ha={class:"metric-value"},ba=f(()=>a("div",{class:"metric-label"},"累计 Job 消耗 Token",-1)),fa={class:"metric-value"},ya=f(()=>a("div",{class:"metric-label"},"普通 Token 余额",-1)),wa={class:"metric-value"},Ta=f(()=>a("div",{class:"metric-label"},"播客专项 Token 余额",-1)),xa={class:"metric-value"},Ca={class:"dashboard-grid"},Sa={class:"border-b border-gray-100 px-4 py-3"},Pa=f(()=>a("div",{class:"font-semibold text-gray-800"},"付费用户",-1)),ka={class:"mt-1 text-xs text-gray-400"},Da={class:"user-list"},Ea=["onClick"],Ia={class:"user-avatar"},Ua={class:"min-w-0 flex-1 text-left"},za={class:"truncate font-medium text-gray-800"},Oa={class:"mt-1 truncate text-xs text-gray-400"},La={class:"mt-2 flex items-center justify-between gap-2 text-xs"},Aa={class:"text-gray-500"},Ja={class:"font-semibold text-gray-700"},Na={class:"mt-1 flex items-center justify-between gap-2 text-xs text-gray-400"},Ra={class:"border-t border-gray-100 px-3 py-3"},Va={class:"border-b border-gray-100 px-5 py-4"},Ma={class:"flex flex-wrap items-start justify-between gap-4"},ja={class:"text-lg font-semibold text-gray-900"},Fa={class:"mt-1 text-sm text-gray-400"},Ba={class:"mt-1 text-xs text-gray-400"},Ha={class:"flex flex-wrap gap-2"},Ya={class:"balance-pill"},Ga=f(()=>a("span",null,"普通余额",-1)),$a={class:"balance-pill special"},Ka=f(()=>a("span",null,"播客专项余额",-1)),qa={class:"mt-4 grid grid-cols-2 gap-3 md:grid-cols-4"},Xa={class:"detail-stat"},Wa={class:"detail-stat"},Za=f(()=>a("span",null,"成功订单",-1)),Qa={class:"detail-stat"},et=f(()=>a("span",null,"Job 数",-1)),at={class:"detail-stat"},tt=f(()=>a("span",null,"累计消耗 Token",-1)),st={class:"truncate font-medium"},lt={class:"mt-1 text-xs text-gray-400"},ot={class:"font-semibold text-gray-800"},nt={class:"mt-1 text-xs text-gray-400"},rt={class:"flex justify-end px-4 py-3"},it={class:"font-medium text-gray-800"},ct={class:"mt-1 text-xs text-gray-400"},dt={class:"font-semibold"},ut={class:"flex justify-end px-4 py-3"},_t=Ke({__name:"PaidUserDashboard",setup(_){const u=new sa,c=la(),A=()=>({paidUserCount:0,totalPaidCents:0,totalConsumedTokens:0,totalGeneralRemainingTokens:0,totalSpecialRemainingTokens:0}),D=r(""),I=r("all"),w=r(null),y=r(1),g=r(20),S=r(0),U=r([]),E=r(A()),i=r(),J=r(!1),X=r("jobs"),N=r([]),R=r(1),W=r(20),H=r(0),Z=r(!1),V=r([]),M=r(1),Q=r(20),Y=r(0),ee=r(!1),ae=qe(()=>w.value?"筛选期充值":"累计充值"),Ce=()=>{if(!w.value)return{};const e=new Date(w.value[0]),l=new Date(w.value[1]);return e.setHours(0,0,0,0),l.setHours(23,59,59,999),{paidStartDate:e.getTime(),paidEndDate:l.getTime()}},z=e=>{c.showErrorMessage(e||B.t("common.internalError"))},G=()=>v(this,null,function*(){var l,T;const e=(l=i.value)==null?void 0:l.userId;if(!e){N.value=[],H.value=0;return}Z.value=!0;try{const d=yield u.queryPaidUserJobs(e,{page:R.value-1,pageSize:W.value});if(!d.data){z(d.errorMessage);return}if(((T=i.value)==null?void 0:T.userId)!==e)return;N.value=d.data.jobs||[],H.value=Number(d.data.total||0)}catch(d){z()}finally{Z.value=!1}}),$=()=>v(this,null,function*(){var l,T;const e=(l=i.value)==null?void 0:l.userId;if(!e){V.value=[],Y.value=0;return}ee.value=!0;try{const d=yield u.queryPaidUserTransactions(e,{page:M.value-1,pageSize:Q.value});if(!d.data){z(d.errorMessage);return}if(((T=i.value)==null?void 0:T.userId)!==e)return;V.value=d.data.transactions||[],Y.value=Number(d.data.total||0)}catch(d){z()}finally{ee.value=!1}}),te=e=>v(this,null,function*(){i.value=e,R.value=1,M.value=1,N.value=[],V.value=[],H.value=0,Y.value=0,e&&(X.value==="jobs"?yield G():yield $())}),j=()=>v(this,null,function*(){var e;J.value=!0;try{const l=yield u.queryPaidUsers(we({page:y.value-1,pageSize:g.value,keyword:D.value.trim(),balanceStatus:I.value},Ce()));if(!l.data){z(l.errorMessage),U.value=[],S.value=0,E.value=A(),yield te(void 0);return}U.value=l.data.users||[],S.value=Number(l.data.total||0),E.value=l.data.summary||A();const T=(e=i.value)==null?void 0:e.userId,d=U.value.find(le=>le.userId===T)||U.value[0];yield te(d)}catch(l){z()}finally{J.value=!1}}),ue=()=>v(this,null,function*(){y.value=1,yield j()}),Se=()=>v(this,null,function*(){D.value="",I.value="all",w.value=null,y.value=1,yield j()}),Pe=e=>v(this,null,function*(){e==="transactions"&&V.value.length===0?yield $():e==="jobs"&&N.value.length===0&&(yield G())}),ke=e=>v(this,null,function*(){y.value=e,yield j()}),De=e=>v(this,null,function*(){g.value=e,y.value=1,yield j()}),Ee=e=>v(this,null,function*(){R.value=e,yield G()}),Ie=e=>v(this,null,function*(){W.value=e,R.value=1,yield G()}),Ue=e=>v(this,null,function*(){M.value=e,yield $()}),ze=e=>v(this,null,function*(){Q.value=e,M.value=1,yield $()}),K=e=>
1(Number(e||0)/100).toLocaleString("zh-CN",{style:"currency",currency:"CNY",minimumFractionDigits:2}),P=e=>L(Math.max(0,Math.round(Number(e||0)))),se=e=>e?ra(e):"-",Oe={[b.LEGACY]:"视频直译",[b.PODCAST]:"外语视频转中配",[b.PODCAST_OUT]:"中文视频转外语",[b.DEMO_SPEECH]:"首页演示",[b.SUBTITLE_TOOL]:"字幕提取与擦除"},Le=e=>e?Oe[e]||e:"-",Ae=e=>{if(!e)return"-";const l=`audiox.dubbing.jobStatus.${e}`;return B.exists(l)?B.t(l):e},_e=e=>{if(!e)return"-";const l=`audiox.language.${e}`;return B.exists(l)?B.t(l):e},Je=e=>e?{reserved:"预扣中",settled:"已结算",refunded:"已退回"}[e]||e:"-",Ne=e=>({[m.UNKNOWN]:"未知",[m.CREATED]:"待支付",[m.PAID]:"已支付",[m.REFUNDED]:"已退款",[m.CANCELLED]:"已取消",[m.EXPIRED]:"已过期",[m.FAILED]:"支付失败",[m.PAYING]:"支付中"})[e]||String(e),Re=e=>e===m.PAID?"success":e===m.PAYING||e===m.CREATED?"warning":e===m.FAILED?"danger":"info",Ve=e=>e===1?"微信支付":"未知平台",Me=e=>e.type===b.DEMO_SPEECH||e.type===b.SUBTITLE_TOOL?void 0:(e.type===b.PODCAST_OUT?ce.PODCAST_OUT_PROJECT:e.type===b.PODCAST?ce.PODCAST_PROJECT:ce.PROJECT).replace(":jobId",e._id),ve=e=>{const l=e.status===de.DELETED&&e.prechargeStatus==="settled";return!!e.title&&e.type!==b.DEMO_SPEECH&&e.type!==b.SUBTITLE_TOOL&&(e.status===de.READY_FOR_EDITOR||e.status===de.EXPORTED||l)},je=e=>{if(!ve(e))return;const l=Me(e);l&&window.open(oa.resolve(l).href,"_blank","noopener,noreferrer")};return Xe(j),(e,l)=>{const T=p("el-input"),d=p("el-form-item"),le=p("el-date-picker"),oe=p("el-option"),Fe=p("el-select"),pe=p("el-button"),k=p("el-card"),me=p("el-empty"),ne=p("el-pagination"),h=p("el-table-column"),ge=p("el-table"),he=p("el-tab-pane"),Be=p("el-tag"),He=p("el-tabs"),re=We("loading");return x(),F("div",da,[o(ia),o(k,{shadow:"never",class:"mb-4"},{default:n(()=>[a("div",ua,[o(d,{label:"用户",class:"!mb-0"},{default:n(()=>[o(T,{modelValue:D.value,"onUpdate:modelValue":l[0]||(l[0]=t=>D.value=t),clearable:"",class:"w-64",placeholder:"昵称、手机号或邮箱",onKeyup:Ze(ue,["enter"])},null,8,["modelValue","onKeyup"])]),_:1}),o(d,{label:"支付时间",class:"!mb-0"},{default:n(()=>[o(le,{modelValue:w.value,"onUpdate:modelValue":l[1]||(l[1]=t=>w.value=t),type:"daterange","unlink-panels":"","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期",clearable:""},null,8,["modelValue"])]),_:1}),o(d,{label:"余额",class:"!mb-0"},{default:n(()=>[o(Fe,{modelValue:I.value,"onUpdate:modelValue":l[2]||(l[2]=t=>I.value=t),class:"w-32"},{default:n(()=>[o(oe,{label:"全部",value:"all"}),o(oe,{label:"有余额",value:"positive"}),o(oe,{label:"已耗尽",value:"depleted"})]),_:1},8,["modelValue"])]),_:1}),o(pe,{type:"primary",loading:J.value,onClick:ue},{default:n(()=>[C("查询")]),_:1},8,["loading"]),o(pe,{onClick:Se},{default:n(()=>[C("重置")]),_:1})]),_a]),_:1}),a("div",va,[o(k,{shadow:"never",class:"metric-card"},{default:n(()=>[pa,a("div",ma,s(O(L)(E.value.paidUserCount)),1)]),_:1}),o(k,{shadow:"never",class:"metric-card"},{default:n(()=>[a("div",ga,s(ae.value),1),a("div",ha,s(K(E.value.totalPaidCents)),1)]),_:1}),o(k,{shadow:"never",class:"metric-card"},{default:n(()=>[ba,a("div",fa,s(P(E.value.totalConsumedTokens)),1)]),_:1}),o(k,{shadow:"never",class:"metric-card"},{default:n(()=>[ya,a("div",wa,s(P(E.value.totalGeneralRemainingTokens)),1)]),_:1}),o(k,{shadow:"never",class:"metric-card special-metric-card"},{default:n(()=>[Ta,a("div",xa,s(P(E.value.totalSpecialRemainingTokens)),1)]),_:1})]),a("div",Ca,[o(k,{shadow:"never",class:"user-panel","body-style":{padding:"0"}},{default:n(()=>[a("div",Sa,[Pa,a("div",ka,"共 "+s(O(L)(S.value))+" 人",1)]),ie((x(),F("div",Da,[(x(!0),F(Te,null,Qe(U.value,t=>{var be;return x(),F("button",{key:t.userId,type:"button",class:xe(["user-list-item",{active:((be=i.value)==null?void 0:be.userId)===t.userId}]),onClick:vt=>te(t)},[a("div",Ia,s((t.nickname||"?").slice(0,1).toUpperCase()),1),a("div",Ua,[a("div",za,s(t.nickname||"-"),1),a("div",Oa,s(t.phone!=="-"?t.phone:t.email),1),a("div",La,[a("span",Aa,s(ae.value),1),a("span",Ja,s(K(t.totalPaidCents)),1)]),a("div",Na,[a("span",null,"Job "+s(O(L)(t.jobCount)),1),a("span",null,"消耗 "+s(P(t.totalConsumedTokens)),1)])])],10,Ea)}),128)),!J.value&&U.value.length===0?(x(),q(me,{key:0,description:"暂无付费用户"})):ea("",!0)])),[[re,J.value]]),a("div",Ra,[o(ne,{small:"",background:"",layout:"prev, pager, next, sizes",total:S.value,"current-page":y.value,"page-size":g.value,"page-sizes":[10,20,50],onCurrentChange:ke,onSizeChange:De},null,8,["total","current-page","page-size"])])]),_:1}),o(k,{shadow:"never",class:"min-w-0","body-style":{padding:"0"}},{default:n(()=>[i.value?(x(),F(Te,{key:0},[a("div",Va,[a("div",Ma,[a("div",null,[a("div",ja,s(i.value.nickname),1),a("div",Fa,s(i.value.phone)+" · "+s(i.value.email),1),a("div",Ba,"用户 ID:"+s(i.value.userId),1)]),a("div",Ha,[a("div",Ya,[Ga,a("strong",null,s(P(i.value.generalRemainingTokens)),1)]),a("div",$a,[Ka,a("strong",null,s(P(i.value.specialRemainingTokens)),1)])])]),a("div",qa,[a("div",Xa,[a("span",null,s(ae.value),1),a("strong",null,s(K(i.value.totalPaidCents)),1)]),a("div",Wa,[Za,a("strong",null,s(O(L)(i.value.paidOrderCount)),1)]),a("div",Qa,[et,a("strong",null,s(O(L)(i.value.jobCount)),1)]),a("div",at,[tt,a("strong",null,s(P(i.value.totalConsumedTokens)),1)])])]),o(He,{modelValue:X.value,"onUpdate:modelValue":l[3]||(l[3]=t=>X.value=t),class:"detail-tabs",onTabChange:Pe},{default:n(()=>[o(he,{label:"Job 记录",name:"jobs"},{default:n(()=>[ie((x(),q(ge,{data:N.value,height:"520",stripe:"",onRowClick:je},{default:n(()=>[o(h,{prop:"title",label:"Job","min-width":"190"},{default:n(t=>[a("div",{class:xe({"clickable-job":ve(t.row)})},[a("div",st,s(t.row.title||"-"),1),a("div",lt,s(Le(t.row.type))+" · "+s(_e(t.row.sourceLanguage))+" → "+s(_e(t.row.targetLanguage)),1)],2)]),_:1}),o(h,{label:"时长",width:"90"},{default:n(t=>[C(s(O(na)(Number(t.row.duration||0))),1)]),_:1}),o(h,{label:"花费 Token","min-width":"130",align:"right"},{default:n(t=>[a("span",ot,s(P(t.row.consumedTokens)),1),a("div",nt,s(Je(t.row.prechargeStatus)),1)]),_:1}),o(h,{label:"状态","min-width":"110"},{default:n(t=>[C(s(Ae(t.row.status)),1)]),_:1}),o(h,{label:"创建时间",width:"170"},{default:n(t=>[C(s(se(t.row.createTimestamp)),1)]),_:1})]),_:1},8,["data"])),[[re,Z.value]]),a("div",rt,[o(ne,{background:"",layout:"total, prev, pager, next, sizes",total:H.value,"current-page":R.value,"page-size":W.value,"page-sizes":[10,20,50,100],onCurrentChange:Ee,onSizeChange:Ie},null,8,["total","current-page","page-size"])])]),_:1}),o(he,{label:"充值记录",name:"transactions"},{default:n(()=>[ie((x(),q(ge,{data:V.value,height:"520",stripe:""},{default:n(()=>[o(h,{label:"产品","min-width":"210"},{default:n(t=>[a("div",it,s(t.row.productName),1),a("div",ct,s(t.row.productId),1)]),_:1}),o(h,{label:"金额",width:"130",align:"right"},{default:n(t=>[a("span",dt,s(K(t.row.totalCents)),1)]),_:1}),o(h,{label:"状态",width:"100"},{default:n(t=>[o(Be,{size:"small",type:Re(t.row.status)},{default:n(()=>[C(s(Ne(t.row.status)),1)]),_:2},1032,["type"])]),_:1}),o(h,{label:"支付平台",width:"110"},{default:n(t=>
1[C(s(Ve(t.row.platform)),1)]),_:1}),o(h,{label:"创建时间",width:"170"},{default:n(t=>[C(s(se(t.row.createdAt)),1)]),_:1}),o(h,{label:"完成时间",width:"170"},{default:n(t=>[C(s(se(t.row.updatedAt)),1)]),_:1})]),_:1},8,["data"])),[[re,ee.value]]),a("div",ut,[o(ne,{background:"",layout:"total, prev, pager, next, sizes",total:Y.value,"current-page":M.value,"page-size":Q.value,"page-sizes":[10,20,50,100],onCurrentChange:Ue,onSizeChange:ze},null,8,["total","current-page","page-size"])])]),_:1})]),_:1},8,["modelValue"])],64)):(x(),q(me,{key:1,description:"请选择付费用户",class:"py-24"}))]),_:1})])])}}});const Tt=ca(_t,[["__scopeId","data-v-87a4a2da"]]);export{Tt 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.