You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2 lines
5.4 KiB
JavaScript
2 lines
5.4 KiB
JavaScript
import{g as a,c as e,w as t,i as s,o as l,b as i,d,t as n,k as o,r as c,F as r,j as h,n as p,e as m}from"./index-46d4z6wp.js";import{g as _,a as u}from"./plan.San3OwbT.js";import{_ as f}from"./_plugin-vue_export-helper.BCo6x5W8.js";import"./index.BglA1-b9.js";const y=f({data:()=>({applicationIds:"",year:(new Date).getFullYear(),month:(new Date).getMonth()+1,weeks:["日","一","二","三","四","五","六"],calendarDays:[],calendarData:{},selectedDate:"",periods:[],selectedPlanId:null,loading:!1}),onLoad(a){this.applicationIds=a.application_ids||"",this.generateCalendar(),this.loadCalendar()},methods:{generateCalendar(){const a=new Date(this.year,this.month-1,1),e=new Date(this.year,this.month,0),t=a.getDay(),s=e.getDate(),l=new Date;l.setHours(0,0,0,0);const i=[];for(let n=0;n<t;n++)i.push({day:"",date:"",past:!0,available:0});for(let n=1;n<=s;n++){const a=`${this.year}-${String(this.month).padStart(2,"0")}-${String(n).padStart(2,"0")}`,e=new Date(this.year,this.month-1,n);i.push({day:n,date:a,past:e<l,available:0})}const d=42-i.length;for(let n=0;n<d;n++)i.push({day:"",date:"",past:!0,available:0});this.calendarDays=i},async loadCalendar(){this.loading=!0;try{const a=this.applicationIds.split(",").map(Number),e=(await _({exam_application_ids:a,channel_id:3,year:this.year,month:this.month})).data.resources||[],t={};e.forEach(a=>{(a.slot_data||[]).forEach(a=>{t[a.date]||(t[a.date]=0),t[a.date]+=a.available_count})}),this.calendarData=t,this.calendarDays.forEach(a=>{a.date&&(a.available=t[a.date]||0)})}catch(a){}this.loading=!1},prevMonth(){this.month--,this.month<1&&(this.month=12,this.year--),this.selectedDate="",this.periods=[],this.generateCalendar(),this.loadCalendar()},nextMonth(){this.month++,this.month>12&&(this.month=1,this.year++),this.selectedDate="",this.periods=[],this.generateCalendar(),this.loadCalendar()},selectDate(a){!a.date||a.past||a.available<=0||(this.selectedDate=a.date,this.selectedPlanId=null,this.loadAvailable())},async loadAvailable(){this.loading=!0;try{const a=this.applicationIds.split(",").map(Number),e=(await u({exam_application_ids:a,channel_id:3,start_date:this.selectedDate})).data.resources||[];this.periods=[],e.forEach(a=>{a.periods&&a.periods.forEach(e=>{e.room_name=a.room_name,this.periods.push(e)})}),this.periods.sort((a,e)=>a.time_range.localeCompare(e.time_range))}catch(a){this.periods=[]}this.loading=!1},selectSlot(a){a.enable&&a.plan_id&&(this.selectedPlanId=a.plan_id)},selectTimePoint(a){this.selectedPlanId=a.id},goConfirm(){a({url:`/pages/appointment/confirm?application_ids=${this.applicationIds}&plan_id=${this.selectedPlanId}&date=${this.selectedDate}`})}}},[["render",function(a,_,u,f,y,g){const k=s,b=m;return l(),e(k,{class:"container"},{default:t(()=>[i(k,{class:"month-bar"},{default:t(()=>[i(k,{class:"month-btn",onClick:g.prevMonth},{default:t(()=>[d("◀")]),_:1},8,["onClick"]),i(k,{class:"month-text"},{default:t(()=>[d(n(y.year)+"年"+n(y.month)+"月",1)]),_:1}),i(k,{class:"month-btn",onClick:g.nextMonth},{default:t(()=>[d("▶")]),_:1},8,["onClick"])]),_:1}),i(k,{class:"calendar card"},{default:t(()=>[i(k,{class:"week-row"},{default:t(()=>[(l(!0),o(r,null,c(y.weeks,a=>(l(),e(k,{class:"week-item",key:a},{default:t(()=>[d(n(a),1)]),_:2},1024))),128))]),_:1}),i(k,{class:"date-grid"},{default:t(()=>[(l(!0),o(r,null,c(y.calendarDays,(a,s)=>(l(),e(k,{class:p(["date-item",{selected:y.selectedDate===a.date,hasPlan:a.available>0,disabled:!a.date||a.past}]),key:s,onClick:e=>g.selectDate(a)},{default:t(()=>[i(k,{class:"date-num"},{default:t(()=>[d(n(a.day),1)]),_:2},1024),a.available>0?(l(),e(k,{key:0,class:"date-dot"})):h("",!0)]),_:2},1032,["class","onClick"]))),128))]),_:1})]),_:1}),y.selectedDate&&y.periods.length>0?(l(),e(k,{key:0,class:"periods"},{default:t(()=>[i(k,{class:"section-title"},{default:t(()=>[d(n(y.selectedDate)+" 可预约时段",1)]),_:1}),(l(!0),o(r,null,c(y.periods,a=>(l(),e(k,{class:"period-card card",key:a.period_id},{default:t(()=>[i(k,{class:"period-header"},{default:t(()=>[i(k,{class:"period-left"},{default:t(()=>[i(b,{class:"period-time"},{default:t(()=>[d(n(a.time_range),1)]),_:2},1024),a.room_name?(l(),e(b,{key:0,class:"period-room"},{default:t(()=>[d(n(a.room_name),1)]),_:2},1024)):h("",!0)]),_:2},1024),void 0!==a.remain_count?(l(),e(b,{key:0,class:"period-remain"},{default:t(()=>[d("余 "+n(a.remain_count),1)]),_:2},1024)):h("",!0)]),_:2},1024),a.slots?(l(),e(k,{key:1,class:"slot-list"},{default:t(()=>[(l(!0),o(r,null,c(a.slots,a=>(l(),e(k,{class:p(["slot-item",{disabled:!a.enable,selected:y.selectedPlanId===a.id}]),key:a.id,onClick:e=>a.enable&&g.selectTimePoint(a)},{default:t(()=>[d(n(a.time),1)]),_:2},1032,["class","onClick"]))),128))]),_:2},1024)):(l(),e(k,{key:0},{default:t(()=>[i(k,{class:p(["slot-item",{disabled:!a.enable}]),onClick:e=>g.selectSlot(a)},{default:t(()=>[i(b,null,{default:t(()=>[d(n(a.enable?"可选择":"已满"),1)]),_:2},1024)]),_:2},1032,["class","onClick"])]),_:2},1024))]),_:2},1024))),128))]),_:1})):h("",!0),y.selectedDate&&0===y.periods.length&&!y.loading?(l(),e(k,{key:1,class:"empty-state"},{default:t(()=>[i(k,{class:"empty-icon"},{default:t(()=>[d("📅")]),_:1}),i(k,null,{default:t(()=>[d("该日期暂无可用号源")]),_:1})]),_:1})):h("",!0),y.selectedPlanId?(l(),e(k,{key:2,class:"bottom-bar"},{default:t(()=>[i(k,{class:"btn-primary",onClick:g.goConfirm},{default:t(()=>[d("确认选择")]),_:1},8,["onClick"])]),_:1})):h("",!0)]),_:1})}],["__scopeId","data-v-d4dc5dea"]]);export{y as default};
|