|
|
import{I as e,N as t,V as n,Y as r,_ as i,d as a,f as o,i as s,it as c,kt as l,l as u,nt as d,p as f,u as p,v as m,y as h,z as g}from"./runtime-core.esm-bundler-CnFWH3R5.js";import{t as _}from"./message-Dh9377vh.js";import{n as v}from"./http-BWP--XXK.js";import{a as y}from"./index-D-AZ5ijJ.js";import{n as b}from"./datetime-CjmbUMhc.js";var ee={class:`dashboard-wrap`},te={class:`stats-cards-flow`},ne={class:`stat-card-mini`},re={class:`stat-card-mini__value`},ie={class:`stat-card-mini`},ae={class:`stat-card-mini__value`},oe={class:`stat-card-mini`},se={class:`stat-card-mini__value`},ce={class:`stat-card-mini`},le={class:`stat-card-mini__value stat-card-mini__value--orange`},ue={class:`tg-title-row`},de={class:`tg-subtitle`},fe={class:`stats-cards-flow stats-cards-flow--tg`},pe={class:`stat-card-mini stat-card-mini--tg stat-card-mini--tg-blue`},me={class:`stat-card-mini__value`},he={class:`stat-card-mini stat-card-mini--tg stat-card-mini--tg-green`},ge={class:`stat-card-mini__value`},_e={class:`stat-card-mini stat-card-mini--tg stat-card-mini--tg-gold`},ve={class:`stat-card-mini__value`},x={class:`stat-card-mini stat-card-mini--tg stat-card-mini--tg-rose`},S={class:`stat-card-mini__value stat-card-mini__value--sm`},C={class:`tg-three-col`},w={class:`tg-box`},T={key:0,class:`tg-highlight-line`},E={key:1,class:`tg-muted`},D={key:2,class:`tg-highlight-line`},O={class:`tg-highlight-line`},k={class:`tg-box`},A={key:0,class:`tg-muted`},j={class:`tg-box`},M={key:0,class:`tg-muted`},N={class:`daily-verify-header-row`},P={class:`verify-cell`},F={class:`verify-cell__pct`},ye={class:`verify-cell`},I={class:`verify-cell__pct`},L=y(h({__name:`Dashboard`,setup(h){let y=c(!1),L=c(!1),R=c([]),z=d({venue_id:void 0}),B=c({scope:{role:``,venue_id:void 0,activity_id:void 0},summary:{activity_sessions:0,ticket_grab_sessions:0,user_count:0,blacklisted_unique:0},activity_stats:{total_view_count:0},activity_stats_activities:{data:[],total:0,page:1,page_size:500}}),V=d({current:1,pageSize:500});function be(e){let t=e.start_at?b(e.start_at):``,n=e.end_at?b(e.end_at):``;return t&&n?t===n?t:`${t} ~ ${n}`:t||n?t||n:`-`}let H=c([]),U=c(!1),W=d({eventId:void 0,date:void 0}),G=c(null),K=u(()=>G.value?.daily_verify_matrix?.date_labels??[]),xe=u(()=>G.value?.daily_verify_matrix?.rows??[]),q=c(!1);async function J(){y.value=!0;try{let e={venue_id:z.venue_id||void 0,activity_stats_page:V.current,activity_stats_page_size:V.pageSize},{data:t}=await v.get(`/dashboard/stats`,{params:e}),n=t.activity_stats_activities;B.value={...B.value,...t,summary:t.summary??B.value.summary,activity_stats:t.activity_stats??B.value.activity_stats,activity_stats_activities:{data:Array.isArray(n?.data)?n.data:[],total:typeof n?.total==`number`?n.total:0,page:typeof n?.page==`number`?n.page:V.current,page_size:typeof n?.page_size==`number`?n.page_size:V.pageSize}},n&&typeof n.page==`number`&&(V.current=n.page)}catch(e){_.error(e?.response?.data?.message??`加载统计失败`)}finally{y.value=!1}}async function Y(){let{data:e}=await v.get(`/me`);L.value=e?.full_admin_access===!0,L.value?R.value=(await v.get(`/venues`)).data:R.value=e?.venues||[]}function Se(){V.current=1,J()}function Ce(){V.current=1,J()}function we(e){V.current=e,J()}function Te(e){V.pageSize=e,V.current=1,J()}async function X(){try{let{data:e}=await v.get(`/ticket-grab-events`,{params:{page:1,page_size:100}}),t=e?.data??e?.items??e?.list??e;H.value=(Array.isArray(t)?t:[]).map(e=>({id:e.id,title:e.title})),!W.eventId&&H.value.length===1&&(W.eventId=H.value[0].id)}catch{H.value=[]}}async function Z(){if(!W.eventId){G.value=null;return}U.value=!0;try{let e={ticket_grab_event_id:W.eventId};W.date&&(e.date=W.date);let{data:t}=await v.get(`/dashboard/ticket-grab-stats`,{params:e});G.value=t}catch(e){G.value=null,_.error(e?.response?.data?.message??`加载抢票统计失败`)}finally{U.value=!1}}function Ee(){Z()}function Q(e){return!e||e.total<=0?{main:`0/0`,pct:`(0%)`}:{main:`${e.verified}/${e.total}`,pct:`(${e.pct}%)`}}async function De(){if(W.eventId){q.value=!0;try{let e=(await v.get(`/dashboard/ticket-grab-daily-verify-export`,{params:{ticket_grab_event_id:W.eventId},responseType:`blob`,timeout:12e4})).data;if(e.type&&(e.type.includes(`json`)||e.type.includes(`text/html`))){let t=await e.text(),n=`导出失败`;try{let e=JSON.parse(t);e?.message&&(n=e.message)}catch{}_.error(n);return}let t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`每日核销统计-${W.eventId}-${new Date().toISOString().slice(0,10)}.xlsx`,n.click(),URL.revokeObjectURL(t),_.success(`已导出`)}catch(e){_.error(e?.response?.data?.message??`导出失败`)}finally{q.value=!1}}}return t(async()=>{await Y(),await J(),await X(),W.eventId&&await Z()}),(t,c)=>{let u=n(`a-option`),d=n(`a-select`),h=n(`a-button`),_=n(`a-space`),v=n(`a-card`),b=n(`a-table-column`),Y=n(`a-table`),X=n(`a-tag`),Z=n(`a-date-picker`),$=n(`a-empty`),Oe=n(`a-spin`);return e(),f(`div`,ee,[m(v,{class:`query-card`,bordered:!1,title:`工作台 / 数据看板`},{default:r(()=>[m(_,{wrap:``},{default:r(()=>[L.value?(e(),a(d,{key:0,modelValue:z.venue_id,"onUpdate:modelValue":c[0]||=e=>z.venue_id=e,style:{width:`220px`},"allow-clear":``,placeholder:`筛选场馆`,onChange:Se},{default:r(()=>[(e(!0),f(s,null,g(R.value,t=>(e(),a(u,{key:t.id,value:t.id},{default:r(()=>[i(l(t.name),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])):o(``,!0),m(h,{type:`primary`,loading:y.value,onClick:Ce},{default:r(()=>[...c[3]||=[i(`查询`,-1)]]),_:1},8,[`loading`]),m(h,{loading:y.value,onClick:J},{default:r(()=>[...c[4]||=[i(`刷新统计`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1}),p(`div`,te,[p(`div`,ne,[c[5]||=p(`div`,{class:`stat-card-mini__title`},`活动场次`,-1),p(`div`,re,l(B.value.summary.activity_sessions),1)]),p(`div`,ie,[c[6]||=p(`div`,{class:`stat-card-mini__title`},`抢票场次`,-1),p(`div`,ae,l(B.value.summary.ticket_grab_sessions),1)]),p(`div`,oe,[c[7]||=p(`div`,{class:`stat-card-mini__title`},`用户数`,-1),p(`div`,se,l(B.value.summary.user_count),1),c[8]||=p(`div`,{class:`stat-card-mini__subhint`},`参与预约的用户`,-1)]),p(`div`,ce,[c[9]||=p(`div`,{class:`stat-card-mini__title`},`灰名单人数(去重)`,-1),p(`div`,le,l(B.value.summary.blacklisted_unique),1)])]),m(v,{class:`panel-card`,bordered:!1,title:`活动统计`},{extra:r(()=>[...c[10]||=[p(`span`,{class:`panel-hint`},`仅汇总浏览量(H5 详情累计),列表按筛选场馆与权限展示`,-1)]]),default:r(()=>[m(Y,{class:`activity-stats-table`,data:B.value.activity_stats_activities.data,loading:y.value,"row-key":`id`,size:`small`,scroll:{x:1040},pagination:{current:V.current,pageSize:V.pageSize,total:B.value.activity_stats_activities.total,showTotal:!0,showPageSize:!0,pageSizeOptions:[20,50,100,200,500]},onPageChange:we,onPageSizeChange:Te},{columns:r(()=>[m(b,{title:`举办场馆`,"data-index":`venue_name`,width:300,ellipsis:!0,tooltip:!0}),m(b,{title:`活动名称`,"data-index":`title`,"min-width":200,ellipsis:!0,tooltip:!0}),m(b,{title:`活动日期`,width:280},{cell:r(({record:e})=>[i(l(be(e)),1)]),_:1}),m(b,{title:`浏览数`,"data-index":`view_count`,width:100})]),_:1},8,[`data`,`loading`,`pagination`])]),_:1}),m(v,{class:`panel-card ticket-grab-panel`,bordered:!1},{title:r(()=>[p(`div`,ue,[c[11]||=p(`span`,null,`抢票统计`,-1),G.value?.overview?.remaining_badge?(e(),a(X,{key:0,color:`arcoblue`,size:`small`},{default:r(()=>[i(l(G.value.overview.remaining_badge),1)]),_:1})):o(``,!0)])]),extra:r(()=>[...c[12]||=[p(`span`,{class:`panel-hint`},`需选择抢票活动;统计日期可选,未选时按当天`,-1)]]),default:r(()=>[m(_,{wrap:``,style:{"margin-bottom":`16px`}},{default:r(()=>[m(d,{modelValue:W.eventId,"onUpdate:modelValue":c[1]||=e=>W.eventId=e,"allow-search":``,placeholder:`选择抢票活动`,style:{width:`280px`}},{default:r(()=>[(e(!0),f(s,null,g(H.value,t=>(e(),a(u,{key:t.id,value:t.id},{default:r(()=>[i(l(t.title),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),m(Z,{modelValue:W.date,"onUpdate:modelValue":c[2]||=e=>W.date=e,"allow-clear":``,"value-format":`YYYY-MM-DD`,placeholder:`默认当天`,style:{width:`160px`}},null,8,[`modelValue`]),m(h,{type:`primary`,loading:U.value,disabled:!W.eventId,onClick:Ee},{default:r(()=>[...c[13]||=[i(`查询`,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1}),m(Oe,{loading:U.value,style:{width:`100%`}},{default:r(()=>[G.value?.overview?(e(),f(s,{key:0},[p(`div`,de,l(G.value.date)+` 数据统计 · `+l(G.value.event?.title),1),p(`div`,fe,[p(`div`,pe,[c[15]||=p(`div`,{class:`stat-card-mini__title`},`总放票数`,-1),p(`div`,me,[i(l(G.value.overview.total_released),1),c[14]||=p(`span`,{class:`stat-card-mini__unit`},`张`,-1)])]),p(`div`,he,[c[17]||=p(`div`,{class:`stat-card-mini__title`},`已抢票数`,-1),p(`div`,ge,[i(l(G.value.overview.total_grabbed),1),c[16]||=p(`span`,{class:`stat-card-mini__unit`},`张`,-1)])]),p(`div`,_e,[c[19]||=p(`div`,{class:`stat-card-mini__title`},`剩余票数`,-1),p(`div`,ve,[i(l(G.value.overview.total_remaining),1),c[18]||=p(`span`,{class:`stat-card-mini__unit`},`张`,-1)])]),p(`div`,x,[c[20]||=p(`div`,{class:`stat-card-mini__title`},`抢完耗时`,-1),p(`div`,S,l(G.value.overview.sellout_duration_label),1)])]),p(`div`,C,[p(`div`,w,[c[21]||=p(`div`,{class:`tg-box-title`},`关键亮点`,-1),G.value.highlights?.fastest_sellout?(e(),f(`div`,T,` 最快抢完:`+l(G.value.highlights.fastest_sellout.venue_name)+`(`+l(G.value.highlights.fastest_sellout.duration_label)+`) `,1)):(e(),f(`div`,E,`暂无「已全部抢完」的场馆`)),G.value.highlights?.max_release_venue?(e(),f(`div`,D,` 单馆最多放票:`+l(G.value.highlights.max_release_venue.venue_name)+`(`+l(G.value.highlights.max_release_venue.released)+` 张) `,1)):o(``,!0),p(`div`,O,l(G.value.highlights?.summary),1)]),p(`div`,k,[c[22]||=p(`div`,{class:`tg-box-title`},`票种(人次)`,-1),(G.value.ticket_types?.length??0)===0?(e(),f(`div`,A,`暂无数据`)):(e(!0),f(s,{key:1},g(G.value.ticket_types,(t,n)=>(e(),f(`div`,{key:`tt-`+n,class:`tg-list-line`},l(t.label)+`:`+l(t.people_count)+` 人`,1))),128))]),p(`div`,j,[c[23]||=p(`div`,{class:`tg-box-title`},`年龄段分布`,-1),(G.value.age_groups?.length??0)===0?(e(),f(`div`,M,`非学龄活动或未采集证件`)):(e(!0),f(s,{key:1},g(G.value.age_groups,(t,n)=>(e(),f(`div`,{key:`ag-`+n,class:`tg-list-line`},l(t.label)+`:`+l(t.people_count)+` 人`,1))),128))])]),m(v,{class:`inner-panel`,bordered:!1,title:`抢票明细统计`},{default:r(()=>[m(Y,{data:G.value.venues??[],pagination:!1,"row-key":`venue_id`,size:`small`},{columns:r(()=>[m(b,{title:`场馆`,"data-index":`venue_name`,"min-width":200}),m(b,{title:`放票`,"data-index":`released`,width:100}),m(b,{title:`已抢`,"data-index":`grabbed`,width:100}),m(b,{title:`剩余`,"data-index":`remaining`,width:100}),m(b,{title:`耗时`,"data-index":`duration_label`,width:140}),m(b,{title:`状态`,"data-index":`status`,width:100})]),_:1},8,[`data`])]),_:1}),m(v,{class:`inner-panel daily-verify-panel`,bordered:!1},{title:r(()=>[p(`div`,N,[c[25]||=p(`span`,{class:`daily-verify-header-row__title`},`每日核销统计`,-1),m(h,{type:`primary`,size:`small`,loading:q.value,disabled:!W.eventId,onClick:De},{default:r(()=>[...c[24]||=[i(` 导出 Excel `,-1)]]),_:1},8,[`loading`,`disabled`])])]),default:r(()=>[K.value.length>0?(e(),a(Y,{key:0,data:xe.value,pagination:!1,"row-key":`venue_id`,size:`small`,scroll:{x:200+K.value.length*104+148}},{columns:r(()=>[m(b,{title:`场馆`,"data-index":`venue_name`,width:200,fixed:`left`}),(e(!0),f(s,null,g(K.value,(t,n)=>(e(),a(b,{key:`dv-`+n,title:t,width:100},{cell:r(({record:e})=>[p(`div`,P,[p(`div`,null,l(Q(e.cells?.[n]).main),1),p(`div`,F,l(Q(e.cells?.[n]).pct),1)])]),_:2},1032,[`title`]))),128)),m(b,{title:`总人数和核销比`,width:132,fixed:`right`},{cell:r(({record:e})=>[p(`div`,ye,[p(`div`,null,l(Q(e.total_cell).main),1),p(`div`,I,l(Q(e.total_cell).pct),1)])]),_:1})]),_:1},8,[`data`,`scroll`])):(e(),a($,{key:1,description:`暂无每日核销数据`}))]),_:1})],64)):!U.value&&W.eventId?(e(),a($,{key:1,description:`暂无抢票统计数据`})):U.value?o(``,!0):(e(),a($,{key:2,description:`请选择抢票活动后查询`}))]),_:1},8,[`loading`])]),_:1})])}}}),[[`__scopeId`,`data-v-c4ff865f`]]);export{L as default}; |