|
|
import{C as e,Ct as t,D as n,E as r,G as i,P as a,Qt as o,S as s,T as c,X as l,Xt as u,Y as d,at as f,b as p,et as m,ht as h,m as g,ot as _,q as v,rt as y,tn as b,x,y as S}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{C,b as w,f as T,g as E,l as D,m as O,o as k,p as A,r as j,s as M,y as N}from"./index-DXyzmFFT.js";import{n as P,t as F}from"./usePageLoad-COyWIJSl.js";import{c as I,l as L}from"./activities-vwk0yxWc.js";import{o as ee}from"./courses-Bj_KxDbW.js";import{a as R,i as z,o as B,s as V}from"./admin-list-DjncsyJC.js";/* empty css */async function te(){let{data:e}=await j.get(`/admin/v1/dashboard/overview`);return e.data}var ne={class:`detail-body`},re={class:`detail-section`},H={key:0,class:`detail-media-preview detail-media-cover`},U=[`src`],W={key:1,class:`detail-empty-media`},G={class:`detail-section`},K={key:0,class:`detail-media-preview detail-media-promo`},q=[`src`],J={key:1,class:`detail-empty-media`},Y={class:`detail-section`},X={class:`detail-text-block`},ie={class:`detail-section`},ae={key:1,class:`detail-empty-media`},oe={class:`detail-section`},se=[`innerHTML`],ce={key:1,class:`detail-empty-media`},le={class:`detail-section`},ue={key:1,class:`detail-empty-media`},de={class:`detail-section`},fe=[`innerHTML`],pe={key:1,class:`detail-empty-media`},me=M(n({__name:`CalendarEventDetailDialog`,props:a({event:{}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:[`update:modelValue`],setup(n){let a=m(n,`modelValue`),o=n,v=h(!1),S=h(null),C=h(null),w=h([]);function T(e){return e==null||e===``?`—`:String(e)}function E(e,t){return!e&&!t?`—`:e&&t?`${e} 至 ${t}`:e||t||`—`}function O(e){let t=(e??[]).map(e=>e?.trim()).filter(Boolean);return t.length?t.join(`、`):`—`}function k(e){return e.news?.title?e.news.title:e.news_link_url?e.news_link_url:`—`}function A(e){return e.starts_at?e.starts_at.replace(`T`,` `).slice(0,16):`—`}function j(e){return e.ends_at?e.ends_at.replace(`T`,` `).slice(0,16):`—`}async function M(){let e=o.event;if(e){v.value=!0,S.value=null,C.value=null,w.value=[];try{e.type===`course`?S.value=await ee(e.entity_id):(C.value=await I(e.entity_id),w.value=await L(e.entity_id))}catch{D.error(`加载详情失败`),a.value=!1}finally{v.value=!1}}}y(()=>[a.value,o.event?.entity_id,o.event?.type,o.event?.start_date],([e])=>{e&&o.event&&M()});let N=()=>o.event?o.event.type===`course`?`课程详情`:`活动详情`:`详情`;return(o,m)=>{let h=d(`el-descriptions-item`),y=d(`el-descriptions`),D=d(`el-table-column`),M=d(`el-table`),P=d(`el-empty`),F=d(`el-button`),I=d(`el-dialog`),L=l(`loading`);return i(),x(I,{modelValue:a.value,"onUpdate:modelValue":m[1]||=e=>a.value=e,title:N(),width:`960px`,top:`5vh`,"destroy-on-close":``,"append-to-body":``,class:`calendar-event-detail-dialog`},{footer:f(()=>[r(F,{onClick:m[0]||=e=>a.value=!1},{default:f(()=>[...m[9]||=[c(`关闭`,-1)]]),_:1})]),default:f(()=>[_((i(),e(`div`,ne,[n.event&&S.value&&n.event.type===`course`?(i(),e(g,{key:0},[r(y,{column:3,border:``,size:`small`,class:`detail-desc`},{default:f(()=>[r(h,{label:`课程体系`},{default:f(()=>[c(b(S.value.course_system_item?.label||`—`),1)]),_:1}),r(h,{label:`课程名称`,span:2},{default:f(()=>[c(b(S.value.title),1)]),_:1}),r(h,{label:`课程类型`},{default:f(()=>[c(b(S.value.course_type_item?.label||`—`),1)]),_:1}),r(h,{label:`开课人数`},{default:f(()=>[c(b(T(S.value.capacity)),1)]),_:1}),r(h,{label:`开课日期`},{default:f(()=>[c(b(t(z)(S.value.teach_start_date,S.value.teach_end_date)),1)]),_:1}),r(h,{label:`开课时间`},{default:f(()=>[c(b(E(S.value.teach_start_time,S.value.teach_end_time)),1)]),_:1}),r(h,{label:`报名起止`,span:2},{default:f(()=>[c(b(t(z)(S.value.signup_start_date,S.value.signup_end_date)),1)]),_:1}),r(h,{label:`地点`},{default:f(()=>[c(b(T(S.value.location)),1)]),_:1}),r(h,{label:`关联资讯`,span:2},{default:f(()=>[c(b(k(S.value)),1)]),_:1}),r(h,{label:`课程状态`},{default:f(()=>[p(`span`,{class:u([`status-badge`,t(B)(S.value.progress_status)])},b(t(R)(S.value.progress_status)),3)]),_:1}),r(h,{label:`发布状态`},{default:f(()=>[p(`span`,{class:u([`status-badge`,t(V)(S.value.published)])},b(S.value.published===1?`已发布`:`未发布`),3)]),_:1})]),_:1}),p(`div`,re,[m[2]||=p(`div`,{class:`detail-section-label`},`课程封面(690×400)`,-1),S.value.cover?.url?(i(),e(`div`,H,[p(`img`,{src:S.value.cover.url,alt:`课程封面`},null,8,U)])):(i(),e(`div`,W,`—`))]),p(`div`,G,[m[3]||=p(`div`,{class:`detail-section-label`},`课程宣传页(宽 750)`,-1),S.value.promo?.url?(i(),e(`div`,K,[p(`img`,{src:S.value.promo.url,alt:`课程宣传页`},null,8,q)])):(i(),e(`div`,J,`—`))]),p(`div`,Y,[m[4]||=p(`div`,{class:`detail-section-label`},`招生对象`,-1),p(`div`,X,b(O(S.value.recruit_targets)),1)]),p(`div`,ie,[m[5]||=p(`div`,{class:`detail-section-label`},`主讲师资`,-1),S.value.main_speakers?.length?(i(),x(M,{key:0,data:S.value.main_speakers,size:`small`,border:``,class:`detail-sub-table`},{default:f(()=>[r(D,{type:`index`,label:`序号`,width:`56`,index:e=>e+1},null,8,[`index`]),r(D,{prop:`name`,label:`姓名`,"min-width":`100`}),r(D,{prop:`title`,label:`职称`,"min-width":`100`},{default:f(({row:e})=>[c(b(T(e.title)),1)]),_:1}),r(D,{prop:`university`,label:`高校`,"min-width":`120`},{default:f(({row:e})=>[c(b(T(e.university)),1)]),_:1}),r(D,{prop:`remark`,label:`备注`,"min-width":`140`,"show-overflow-tooltip":``},{default:f(({row:e})=>[c(b(T(e.remark)),1)]),_:1})]),_:1},8,[`data`])):(i(),e(`div`,ae,`—`))]),p(`div`,oe,[m[6]||=p(`div`,{class:`detail-section-label`},`课程简介`,-1),S.value.intro_html?(i(),e(`div`,{key:0,class:`detail-intro-html`,innerHTML:S.value.intro_html},null,8,se)):(i(),e(`div`,ce,`—`))])],64)):n.event&&C.value&&n.event.type===`activity`?(i(),e(g,{key:1},[r(y,{column:3,border:``,size:`small`,class:`detail-desc`},{default:f(()=>[r(h,{label:`活动名称`,span:2},{default:f(()=>[c(b(C.value.title),1)]),_:1}),r(h,{label:`活动类型`},{default:f(()=>[c(b(C.value.activity_type_item?.label||`—`),1)]),_:1}),r(h,{label:`场次`},{default:f(()=>[c(b(C.value.sessions_count??w.value.length),1)]),_:1}),r(h,{label:`活动日期`,span:2},{default:f(()=>[c(b(t(z)(C.value.event_start_date,C.value.event_end_date)),1)]),_:1}),r(h,{label:`报名起止日期`,span:2},{default:f(()=>[c(b(t(z)(C.value.signup_start_date,C.value.signup_end_date)),1)]),_:1}),r(h,{label:`活动地点`,span:2},{default:f(()=>[c(b(T(C.value.location)),1)]),_:1}),r(h,{label:`活动状态`},{default:f(()=>[p(`span`,{class:u([`status-badge`,t(B)(C.value.progress_status)])},b(t(R)(C.value.progress_status)),3)]),_:1}),r(h,{label:`发布状态`},{default:f(()=>[p(`span`,{class:u([`status-badge`,t(V)(C.value.published)])},b(C.value.published===1?`已发布`:`未发布`),3)]),_:1})]),_:1}),p(`div`,le,[m[7]||=p(`div`,{class:`detail-section-label`},`活动场次`,-1),w.value.length?(i(),x(M,{key:0,data:w.value,size:`small`,border:``,class:`detail-sub-table`},{default:f(()=>[r(D,{label:`场次标题`,"min-width":`120`},{default:f(({row:e})=>[c(b(T(e.title)),1)]),_:1}),r(D,{label:`开始时间`,"min-width":`160`},{default:f(({row:e})=>[c(b(A(e)),1)]),_:1}),r(D,{label:`结束时间`,"min-width":`160`},{default:f(({row:e})=>[c(b(j(e)),1)]),_:1}),r(D,{label:`地点`,"min-width":`120`,"show-overflow-tooltip":``},{default:f(({row:e})=>[c(b(T(e.venue)),1)]),_:1}),r(D,{label:`名额`,width:`80`,align:`center`},{default:f(({row:e})=>[c(b(T(e.capacity)),1)]),_:1})]),_:1},8,[`data`])):(i(),e(`div`,ue,`—`))]),p(`div`,de,[m[8]||=p(`div`,{class:`detail-section-label`},`活动简介`,-1),C.value.intro_html?(i(),e(`div`,{key:0,class:`detail-intro-html`,innerHTML:C.value.intro_html},null,8,fe)):(i(),e(`div`,pe,`—`))])],64)):!v.value&&a.value?(i(),x(P,{key:2,description:`暂无详情`})):s(``,!0)])),[[L,v.value]])]),_:1},8,[`modelValue`,`title`])}}}),[[`__scopeId`,`data-v-73e6423f`]]);function Z(e,t){return e.localeCompare(t)}function he(e,t,n,r){let i=e+t-1,a=n+r-1;return!(i<n||e>a)}function ge(e){let t=[];return e.slice().sort((e,t)=>e.startCol-t.startCol||t.span-e.span).map(e=>{let n=0;for(;;){if(t[n]??=[],!t[n].some(t=>he(e.startCol,e.span,t.startCol,t.endCol-t.startCol+1)))return t[n].push({startCol:e.startCol,endCol:e.startCol+e.span-1}),{...e,row:n+1};n+=1}})}function _e(e,t,n){if(!e.length)return[];let r=e[0],i=e[e.length-1],a=[];for(let o of t){if(Z(o.end_date,r)<0||Z(o.start_date,i)>0)continue;let t=Z(o.start_date,r)>0?o.start_date:r,s=Z(o.end_date,i)<0?o.end_date:i,c=e.indexOf(t),l=e.indexOf(s);c<0||l<0||a.push({id:`${o.type}-${o.entity_id}-${o.title}-${t}-${s}`,startCol:c+1,span:l-c+1,showTitle:t===o.start_date,isPast:Z(s,n)<0,event:o})}return ge(a)}function ve(e,t,n,r){let i=new Date(e,t-1,1),a=new Date(e,t,0),o=(i.getDay()+6)%7,s=[],c=new Set;for(let e of r)for(let t of ye(e.start_date,e.end_date))c.add(t);for(let r=o;r>0;--r){let i=new Date(e,t-1,1-r),a=Q(i);s.push({key:`p-${a}`,day:i.getDate(),dateStr:a,muted:!0,past:Z(a,n)<0,isToday:a===n,hasEvent:c.has(a)})}for(let r=1;r<=a.getDate();r+=1){let i=`${e}-${String(t).padStart(2,`0`)}-${String(r).padStart(2,`0`)}`;s.push({key:i,day:r,dateStr:i,muted:!1,past:Z(i,n)<0,isToday:i===n,hasEvent:c.has(i)})}for(;s.length%7!=0;){let r=s.length-(o+a.getDate()),i=new Date(e,t,r+1),l=Q(i);s.push({key:`n-${l}`,day:i.getDate(),dateStr:l,muted:!0,past:Z(l,n)<0,isToday:l===n,hasEvent:c.has(l)})}let l=[];for(let e=0;e<s.length;e+=7){let t=s.slice(e,e+7),i=_e(t.map(e=>e.dateStr),r,n);l.push({cells:t,bars:i,barRows:i.reduce((e,t)=>Math.max(e,t.row),0)})}return l}function Q(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function ye(e,t){let n=[],r=new Date(`${e}T00:00:00`),i=new Date(`${t}T00:00:00`);for(;r<=i&&(n.push(Q(r)),r.setDate(r.getDate()+1),!(n.length>31)););return n}var be={class:`dashboard-page executive-dashboard dashboard-v2`},xe={class:`page-head`},Se={class:`dashboard-grid-row`},Ce={class:`dashboard-card dashboard-overview-card`},we={class:`executive-metric-grid dashboard-overview-grid-compact`},Te={class:`executive-metric`},Ee={class:`metric-head`},De={class:`metric-icon`},Oe={class:`executive-metric`},ke={class:`metric-head`},Ae={class:`metric-icon`},je={class:`executive-metric`},Me={class:`metric-head`},Ne={class:`metric-icon`},Pe={class:`executive-metric`},Fe={class:`metric-head`},Ie={class:`metric-icon`},Le={class:`dashboard-card`},Re={class:`card-head card-head-row`},ze={class:`dashboard-count-badge`},Be={class:`dashboard-todo-list`},Ve={class:`dashboard-todo-icon`},He={class:`dashboard-todo-icon`},Ue={class:`dashboard-todo-icon`},We={class:`dashboard-card`},Ge={class:`card-head card-head-row`},Ke={class:`dashboard-calendar-actions`},qe={class:`dashboard-event-list`},Je={class:`dashboard-event-row`},$={class:`event-row-icon`},Ye={class:`dashboard-event-row`},Xe={class:`event-row-icon`},Ze={class:`dashboard-event-row`},Qe={class:`event-row-icon`},$e={class:`dashboard-event-row`},et={class:`event-row-icon`},tt={class:`dashboard-calendar`},nt={class:`calendar-grid calendar-grid-heads`},rt={class:`calendar-weeks`},it={class:`calendar-day-num`},at=[`title`,`onClick`],ot={key:0,class:`calendar-event-span-text`},st=M(n({__name:`index`,setup(n){let a=k(),c=h(!1),m=h(null),y=h(!1),x=h(null),D=[`一`,`二`,`三`,`四`,`五`,`六`,`日`],j=S(()=>{if(!m.value)return[];let{year:e,month:t,today:n,events:r}=m.value.calendar;return ve(e,t,n,r)});async function M(){c.value=!0;try{m.value=await te()}finally{c.value=!1}}function I(e){a.push(e)}function L(e){x.value={start_date:e.start_date,end_date:e.end_date,type:e.type,title:e.title,entity_id:e.entity_id},y.value=!0}return F(M),(n,a)=>{let h=d(`el-icon`),S=l(`loading`);return _((i(),e(`div`,be,[p(`div`,xe,[r(P,{variant:`dashboard`})]),m.value?(i(),e(g,{key:0},[p(`div`,Se,[p(`section`,Ce,[a[10]||=p(`div`,{class:`card-head`},[p(`h2`,{class:`dashboard-section-title`},`经营总览`)],-1),p(`div`,we,[p(`div`,Te,[p(`div`,Ee,[a[6]||=p(`span`,null,`高校覆盖`,-1),p(`span`,De,[r(h,null,{default:f(()=>[r(t(w))]),_:1})])]),p(`strong`,null,b(m.value.overview.universities.total),1)]),p(`div`,Oe,[p(`div`,ke,[a[7]||=p(`span`,null,`老师资产`,-1),p(`span`,Ae,[r(h,null,{default:f(()=>[r(t(C))]),_:1})])]),p(`strong`,null,b(m.value.overview.teachers.total),1),p(`em`,null,`本月 +`+b(m.value.overview.teachers.month_new)+`,五星 `+b(m.value.overview.teachers.five_star),1)]),p(`div`,je,[p(`div`,Me,[a[8]||=p(`span`,null,`论文发现`,-1),p(`span`,Ne,[r(h,null,{default:f(()=>[r(t(E))]),_:1})])]),p(`strong`,null,b(m.value.overview.papers.total),1),p(`em`,null,`本月新增 `+b(m.value.overview.papers.month_new)+`,待关联老师 `+b(m.value.overview.papers.pending_link),1)]),p(`div`,Pe,[p(`div`,Fe,[a[9]||=p(`span`,null,`需求履约率`,-1),p(`span`,Ie,[r(h,null,{default:f(()=>[r(t(O))]),_:1})])]),p(`strong`,null,b(m.value.overview.demands.fulfillment_rate)+`%`,1),p(`em`,null,b(m.value.overview.demands.total)+` 条需求,`+b(m.value.overview.demands.done)+` 条已完成`,1)])])]),p(`section`,Le,[p(`div`,Re,[a[11]||=p(`h2`,{class:`dashboard-section-title`},`待办`,-1),p(`span`,ze,b(m.value.todos.total)+` 项`,1)]),p(`div`,Be,[p(`button`,{type:`button`,class:`dashboard-todo-card is-urgent`,onClick:a[0]||=e=>I(`/teachers`)},[p(`span`,Ve,[r(h,null,{default:f(()=>[r(t(C))]),_:1})]),a[12]||=p(`span`,null,[p(`b`,null,`老师跟进`),p(`em`,null,`高星老师逾期回访,需补跟进记录`)],-1),p(`strong`,null,b(m.value.todos.teacher_follow),1)]),p(`button`,{type:`button`,class:`dashboard-todo-card is-warning`,onClick:a[1]||=e=>I(`/demands`)},[p(`span`,He,[r(h,null,{default:f(()=>[r(t(A))]),_:1})]),p(`span`,null,[a[13]||=p(`b`,null,`需求处理`,-1),p(`em`,null,b(m.value.todos.demand_overdue)+` 条需求逾期,`+b(m.value.todos.demand_waiting)+` 条等待资源匹配`,1)]),p(`strong`,null,b(m.value.todos.demand_process),1)]),p(`button`,{type:`button`,class:`dashboard-todo-card`,onClick:a[2]||=e=>I(`/papers`)},[p(`span`,Ue,[r(h,null,{default:f(()=>[r(t(E))]),_:1})]),a[14]||=p(`span`,null,[p(`b`,null,`论文数据`),p(`em`,null,`近30天入库且未关联老师`)],-1),p(`strong`,null,b(m.value.todos.paper_data),1)])])])]),p(`section`,We,[p(`div`,Ge,[a[17]||=p(`div`,null,[p(`h2`,{class:`dashboard-section-title`},`课程、活动日历`)],-1),p(`div`,Ke,[p(`button`,{type:`button`,onClick:a[3]||=e=>I(`/courses`)},[r(h,null,{default:f(()=>[r(t(N))]),_:1}),a[15]||=p(`span`,null,`课程`,-1)]),p(`button`,{type:`button`,onClick:a[4]||=e=>I(`/activities`)},[r(h,null,{default:f(()=>[r(t(T))]),_:1}),a[16]||=p(`span`,null,`活动`,-1)])])]),p(`div`,qe,[p(`div`,Je,[p(`span`,$,[r(h,null,{default:f(()=>[r(t(N))]),_:1})]),a[18]||=p(`span`,null,`课程排期`,-1),p(`strong`,null,b(m.value.events.course_sessions),1),p(`em`,null,b(m.value.events.course_draft)+` 场待发布`,1)]),p(`div`,Ye,[p(`span`,Xe,[r(h,null,{default:f(()=>[r(t(T))]),_:1})]),a[19]||=p(`span`,null,`活动排期`,-1),p(`strong`,null,b(m.value.events.activity_sessions),1),p(`em`,null,b(m.value.events.activity_open)+` 场报名中`,1)]),p(`div`,Ze,[p(`span`,Qe,[r(h,null,{default:f(()=>[r(t(C))]),_:1})]),a[20]||=p(`span`,null,`报名人数`,-1),p(`strong`,null,b(m.value.events.signup_total),1),p(`em`,null,`较上月 `+b(m.value.events.signup_delta>=0?`+`:``)+b(m.value.events.signup_delta),1)]),p(`div`,$e,[p(`span`,et,[r(h,null,{default:f(()=>[r(t(A))]),_:1})]),a[21]||=p(`span`,null,`转化线索`,-1),p(`strong`,null,b(m.value.events.teacher_leads+m.value.events.demand_leads),1),p(`em`,null,`老师 `+b(m.value.events.teacher_leads)+`,需求 `+b(m.value.events.demand_leads),1)])]),p(`div`,tt,[p(`div`,nt,[(i(),e(g,null,v(D,e=>p(`div`,{key:e,class:`calendar-head`},b(e),1)),64))]),p(`div`,rt,[(i(!0),e(g,null,v(j.value,(t,n)=>(i(),e(`div`,{key:n,class:`calendar-week-grid`,style:o({"--event-lanes":t.barRows})},[(i(!0),e(g,null,v(t.cells,(t,n)=>(i(),e(`div`,{key:t.key,class:u([`calendar-cell`,{muted:t.muted,past:t.past&&!t.muted,"is-today":t.isToday,"has-event":t.hasEvent}]),style:o({gridColumn:n+1})},[p(`span`,it,b(t.day),1)],6))),128)),(i(!0),e(g,null,v(t.bars,t=>(i(),e(`button`,{key:t.id,type:`button`,class:u([`calendar-event-span`,{"is-past-event":t.isPast,"is-activity":t.event.type===`activity`,"is-continuation":!t.showTitle}]),style:o({gridColumn:`${t.startCol} / span ${t.span}`,marginTop:`calc(1.25rem + ${(t.row-1)*26}px)`}),title:t.event.title,onClick:e=>L(t.event)},[t.showTitle?(i(),e(`span`,ot,b(t.event.title),1)):s(``,!0)],14,at))),128))],4))),128))])])])],64)):s(``,!0),r(me,{modelValue:y.value,"onUpdate:modelValue":a[5]||=e=>y.value=e,event:x.value},null,8,[`modelValue`,`event`])])),[[S,c.value]])}}}),[[`__scopeId`,`data-v-ae208002`]]);export{st as default}; |