You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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-C7ewpN2c.js";import{n as b}from"./datetime-CjmbUMhc.js";var x={class:`dashboard-wrap`},S={class:`stats-cards-flow`},ee={class:`stat-card-mini`},te={class:`stat-card-mini__value`},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 stat-card-mini__value--orange`},ce={class:`tg-title-row`},le={class:`tg-subtitle`},ue={class:`stats-cards-flow stats-cards-flow--tg`},de={class:`stat-card-mini stat-card-mini--tg stat-card-mini--tg-blue`},fe={class:`stat-card-mini__value`},pe={class:`stat-card-mini stat-card-mini--tg stat-card-mini--tg-green`},me={class:`stat-card-mini__value`},C={class:`stat-card-mini stat-card-mini--tg stat-card-mini--tg-gold`},he={class:`stat-card-mini__value`},w={class:`stat-card-mini stat-card-mini--tg stat-card-mini--tg-rose`},T={class:`stat-card-mini__value stat-card-mini__value--sm`},E={class:`tg-three-col`},D={class:`tg-box`},O={key:0,class:`tg-highlight-line`},k={key:1,class:`tg-muted`},A={key:2,class:`tg-highlight-line`},j={class:`tg-highlight-line`},M={class:`tg-box`},N={key:0,class:`tg-muted`},P={class:`tg-box`},F={key:0,class:`tg-muted`},I={class:`tg-footer`},L=y(h({__name:`Dashboard`,setup(h){let y=c(!1),L=c(!1),R=c([]);function z(){let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}let B=d({venue_id:void 0,activity_id:void 0}),V=c([]),H=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}}),U=d({current:1,pageSize:500});function ge(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 W=c([]),G=c(!1),K=d({eventId:void 0,date:z()}),q=c(null),J=u(()=>q.value?.hourly_matrix?.hours??[]);async function Y(){y.value=!0;try{let e={venue_id:B.venue_id||void 0,activity_id:B.activity_id==null?void 0:B.activity_id,activity_stats_page:U.current,activity_stats_page_size:U.pageSize},{data:t}=await v.get(`/dashboard/stats`,{params:e}),n=t.activity_stats_activities;H.value={...H.value,...t,summary:t.summary??H.value.summary,activity_stats:t.activity_stats??H.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:U.current,page_size:typeof n?.page_size==`number`?n.page_size:U.pageSize}},n&&typeof n.page==`number`&&(U.current=n.page)}catch(e){_.error(e?.response?.data?.message??`加载统计失败`)}finally{y.value=!1}}async function X(){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||[]}async function Z(){try{let e={page:1,page_size:100};B.venue_id&&(e.venue_id=B.venue_id);let{data:t}=await v.get(`/activities`,{params:e}),n=t?.data??t?.items??t?.list??t;V.value=(Array.isArray(n)?n:[]).map(e=>({id:e.id,title:e.title}))}catch{V.value=[]}}function _e(){U.current=1,Y()}function ve(){B.activity_id=void 0,U.current=1,Z(),Y()}function ye(){U.current=1,Z(),Y()}function be(e){U.current=e,Y()}function xe(e){U.pageSize=e,U.current=1,Y()}async function Q(){try{let{data:e}=await v.get(`/ticket-grab-events`,{params:{page:1,page_size:100}}),t=e?.data??e?.items??e?.list??e;W.value=(Array.isArray(t)?t:[]).map(e=>({id:e.id,title:e.title})),!K.eventId&&W.value.length===1&&(K.eventId=W.value[0].id)}catch{W.value=[]}}async function $(){if(!K.eventId){q.value=null;return}G.value=!0;try{let{data:e}=await v.get(`/dashboard/ticket-grab-stats`,{params:{ticket_grab_event_id:K.eventId,date:K.date}});q.value=e}catch(e){q.value=null,_.error(e?.response?.data?.message??`加载抢票统计失败`)}finally{G.value=!1}}function Se(){$()}return t(async()=>{await X(),await Z(),await Y(),await Q(),K.eventId&&await $()}),(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`),z=n(`a-table`),X=n(`a-tag`),Z=n(`a-date-picker`),Q=n(`a-empty`),$=n(`a-spin`);return e(),f(`div`,x,[m(v,{class:`query-card`,bordered:!1,title:`工作台 / 数据看板`},{default:r(()=>[m(_,{wrap:``},{default:r(()=>[L.value?(e(),a(d,{key:0,modelValue:B.venue_id,"onUpdate:modelValue":c[0]||=e=>B.venue_id=e,style:{width:`220px`},"allow-clear":``,placeholder:`筛选场馆`,onChange:ve},{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:ye},{default:r(()=>[...c[4]||=[i(`查询`,-1)]]),_:1},8,[`loading`]),m(h,{loading:y.value,onClick:Y},{default:r(()=>[...c[5]||=[i(`刷新统计`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1}),p(`div`,S,[p(`div`,ee,[c[6]||=p(`div`,{class:`stat-card-mini__title`},`活动场次`,-1),p(`div`,te,l(H.value.summary.activity_sessions),1)]),p(`div`,ne,[c[7]||=p(`div`,{class:`stat-card-mini__title`},`抢票场次`,-1),p(`div`,re,l(H.value.summary.ticket_grab_sessions),1)]),p(`div`,ie,[c[8]||=p(`div`,{class:`stat-card-mini__title`},`用户数`,-1),p(`div`,ae,l(H.value.summary.user_count),1),c[9]||=p(`div`,{class:`stat-card-mini__subhint`},`参与预约的用户`,-1)]),p(`div`,oe,[c[10]||=p(`div`,{class:`stat-card-mini__title`},`灰名单人数(去重)`,-1),p(`div`,se,l(H.value.summary.blacklisted_unique),1)])]),m(v,{class:`panel-card`,bordered:!1,title:`活动统计`},{extra:r(()=>[...c[11]||=[p(`span`,{class:`panel-hint`},`仅汇总浏览量H5 详情累计)`,-1)]]),default:r(()=>[m(_,{style:{"margin-bottom":`16px`},wrap:``},{default:r(()=>[m(d,{modelValue:B.activity_id,"onUpdate:modelValue":c[1]||=e=>B.activity_id=e,"allow-clear":``,"allow-search":``,placeholder:`全部活动(按筛选场馆与权限)`,style:{"min-width":`320px`},onChange:_e},{default:r(()=>[(e(!0),f(s,null,g(V.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`])]),_:1}),m(z,{class:`activity-stats-table`,data:H.value.activity_stats_activities.data,loading:y.value,"row-key":`id`,size:`small`,scroll:{x:720},pagination:{current:U.current,pageSize:U.pageSize,total:H.value.activity_stats_activities.total,showTotal:!0,showPageSize:!0,pageSizeOptions:[20,50,100,200,500]},onPageChange:be,onPageSizeChange:xe},{columns:r(()=>[m(b,{title:`活动名称`,"data-index":`title`,"min-width":200,ellipsis:!0,tooltip:!0}),m(b,{title:`活动日期`,width:200},{cell:r(({record:e})=>[i(l(ge(e)),1)]),_:1}),m(b,{title:`场馆`,"data-index":`venue_name`,width:160,ellipsis:!0,tooltip:!0}),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`,ce,[c[12]||=p(`span`,null,`抢票统计`,-1),q.value?.overview?.remaining_badge?(e(),a(X,{key:0,color:`arcoblue`,size:`small`},{default:r(()=>[i(l(q.value.overview.remaining_badge),1)]),_:1})):o(``,!0)])]),extra:r(()=>[...c[13]||=[p(`span`,{class:`panel-hint`},`需先选择抢票活动与统计日期(默认当天)`,-1)]]),default:r(()=>[m(_,{wrap:``,style:{"margin-bottom":`16px`}},{default:r(()=>[m(d,{modelValue:K.eventId,"onUpdate:modelValue":c[2]||=e=>K.eventId=e,"allow-search":``,placeholder:`选择抢票活动`,style:{width:`280px`}},{default:r(()=>[(e(!0),f(s,null,g(W.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:K.date,"onUpdate:modelValue":c[3]||=e=>K.date=e,"value-format":`YYYY-MM-DD`,style:{width:`160px`}},null,8,[`modelValue`]),m(h,{type:`primary`,loading:G.value,disabled:!K.eventId,onClick:Se},{default:r(()=>[...c[14]||=[i(`查询`,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1}),m($,{loading:G.value,style:{width:`100%`}},{default:r(()=>[q.value?.overview?(e(),f(s,{key:0},[p(`div`,le,l(q.value.date)+` 数据统计 · `+l(q.value.event?.title),1),p(`div`,ue,[p(`div`,de,[c[16]||=p(`div`,{class:`stat-card-mini__title`},`总放票数`,-1),p(`div`,fe,[i(l(q.value.overview.total_released),1),c[15]||=p(`span`,{class:`stat-card-mini__unit`},``,-1)])]),p(`div`,pe,[c[18]||=p(`div`,{class:`stat-card-mini__title`},`已抢票数`,-1),p(`div`,me,[i(l(q.value.overview.total_grabbed),1),c[17]||=p(`span`,{class:`stat-card-mini__unit`},``,-1)])]),p(`div`,C,[c[20]||=p(`div`,{class:`stat-card-mini__title`},`剩余票数`,-1),p(`div`,he,[i(l(q.value.overview.total_remaining),1),c[19]||=p(`span`,{class:`stat-card-mini__unit`},``,-1)])]),p(`div`,w,[c[21]||=p(`div`,{class:`stat-card-mini__title`},`抢完耗时`,-1),p(`div`,T,l(q.value.overview.sellout_duration_label),1)])]),p(`div`,E,[p(`div`,D,[c[22]||=p(`div`,{class:`tg-box-title`},`关键亮点`,-1),q.value.highlights?.fastest_sellout?(e(),f(`div`,O,` 最快抢完:`+l(q.value.highlights.fastest_sellout.venue_name)+``+l(q.value.highlights.fastest_sellout.duration_label)+` `,1)):(e(),f(`div`,k,`暂无「已全部抢完」的场馆`)),q.value.highlights?.max_release_venue?(e(),f(`div`,A,` 单馆最多放票:`+l(q.value.highlights.max_release_venue.venue_name)+``+l(q.value.highlights.max_release_venue.released)+` 张) `,1)):o(``,!0),p(`div`,j,l(q.value.highlights?.summary),1)]),p(`div`,M,[c[23]||=p(`div`,{class:`tg-box-title`},`票种(人次)`,-1),(q.value.ticket_types?.length??0)===0?(e(),f(`div`,N,`暂无数据`)):(e(!0),f(s,{key:1},g(q.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`,P,[c[24]||=p(`div`,{class:`tg-box-title`},`年龄段分布`,-1),(q.value.age_groups?.length??0)===0?(e(),f(`div`,F,`非学龄活动或未采集证件`)):(e(!0),f(s,{key:1},g(q.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(z,{data:q.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}),J.value.length>0?(e(),a(v,{key:0,class:`inner-panel`,bordered:!1,title:`分时抢票数(行:场馆,列:小时,单元格:该小时张数 / 该馆当日已抢占比)`},{default:r(()=>[m(z,{data:q.value.hourly_matrix?.rows??[],pagination:!1,"row-key":`venue_id`,size:`small`,scroll:{x:120+J.value.length*100}},{columns:r(()=>[m(b,{title:`场馆`,"data-index":`venue_name`,width:200,fixed:`left`}),(e(!0),f(s,null,g(J.value,t=>(e(),a(b,{key:`h-`+t,title:t+`:00`,width:108},{cell:r(({record:e})=>[i(l(e.cells?.find(e=>e.hour===t)?.display??`-`),1)]),_:2},1032,[`title`]))),128)),m(b,{title:`当日合计/占活动`,width:160,fixed:`right`},{cell:r(({record:e})=>[i(l(e.day_share_display),1)]),_:1})]),_:1},8,[`data`,`scroll`])]),_:1})):o(``,!0),p(`div`,I,`数据更新时间:`+l(q.value.data_updated_at)+` · 江苏有线苏州分公司提供技术支撑`,1)],64)):!G.value&&K.eventId?(e(),a(Q,{key:1,description:`暂无抢票统计数据`})):G.value?o(``,!0):(e(),a(Q,{key:2,description:`请选择抢票活动后查询`}))]),_:1},8,[`loading`])]),_:1})])}}}),[[`__scopeId`,`data-v-4831baac`]]);export{L as default};