|
|
import{n as e,st as t}from"./axios-CiYFffbI.js";import{I as n,N as r,P as i,V as a,Y as o,_ as s,d as c,f as l,i as u,it as d,kt as f,l as p,nt as m,p as h,u as g,ut as ee,v as _,y as te,z as v}from"./runtime-core.esm-bundler-CnFWH3R5.js";import{a as y,n as b,o as x}from"./index-AJjRNeYZ.js";import{t as ne}from"./RichEditorField-BSYileUi.js";import{t as re}from"./listTable-DXuZ0yk8.js";function S(e,t){return function(){return e()?window.confirm(t):!0}}function ie(e,t=`当前有未保存改动,确定要离开吗?`){function n(t){e()&&(t.preventDefault(),t.returnValue=``)}y((n,r,i)=>{if(!e()){i();return}i(window.confirm(t))}),r(()=>{window.addEventListener(`beforeunload`,n)}),i(()=>{window.removeEventListener(`beforeunload`,n)})}var ae=[`src`],oe={key:1},se={key:1,style:{color:`var(--color-text-3)`}},ce={style:{"margin-top":`8px`,width:`100%`,display:`flex`,"flex-wrap":`wrap`,gap:`8px`}},le={key:0,style:{color:`#86909c`}},ue={class:`activity-cover-carousel-wrap`},de={class:`activity-cover-carousel-row__col`},fe=[`src`],pe={class:`activity-cover-carousel-row__col`},me={style:{display:`flex`,"flex-direction":`column`,"align-items":`flex-start`,width:`100%`}},he={style:{width:`100%`,"margin-bottom":`8px`}},ge={class:`activity-gallery-grid`},_e=[`src`,`onClick`],ve=[`src`,`onClick`],ye=[`src`],be=[`src`],xe={key:0,class:`booking-settings`},Se={style:{"margin-top":`16px`,"text-align":`right`}},C=x(te({__name:`ActivityList`,setup(i){let te=d([]),y=d([]),x=d(null),C=d(!1),Ce=d(!1),w=d(!1),T=m({current:1,pageSize:10,total:0}),E=m({keyword:``,venue_id:void 0,is_active:`all`,schedule_status:`all`,audit_status:`all`}),D=d(null),O=d(``),k=d(!1),A=d(!0),j=d(null),we=d(``),Te={maxHeight:`70vh`,overflow:`auto`},Ee=d(0),De=d(!1),Oe=d(`image`),M=d(``),N=d(!1),P=d(!1),F=d(!1),I=d(null),L=d(`both`),R=d(1),z=d(1),B=d([]);function ke(){return`bk-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function V(e){if(!e)return``;let t=new Date(String(e));return Number.isNaN(t.getTime())?String(e).slice(0,10):new Intl.DateTimeFormat(`en-CA`,{timeZone:`Asia/Shanghai`,year:`numeric`,month:`2-digit`,day:`2-digit`}).format(t)}let Ae=p(()=>B.value.reduce((e,t)=>e+(Number(t.day_quota)||0),0)),je=p(()=>{let e=I.value;return e?.venue_id?y.value.find(t=>t.id===e.venue_id)?.appointment_type===`team_only`:!1}),H=m({venue_id:void 0,reservation_type:`online`,location:``,specific_time:``,offline_reservation_method:``,external_url:``,title:``,start_at:``,end_at:``,detail_html:``,cover_image:``,gallery_media:[],tags:[],sort:0,summary:``,is_active:!0}),U=d(``),Me=p(()=>Q(H.start_at||``,H.end_at||``));function W(e,t){let n=String(e||``).trim();if(n)return/^https?:\/\//i.test(n)?n:n.startsWith(`/`)?`${window.location.origin}${n}`:`${window.location.origin}/${n}`;let r=String(t||``).trim();if(!r)return``;let i=r.replace(/^\/+/,``);return`${window.location.origin}/storage/${i}`}async function G(e){let t=new FormData;t.append(`file`,e);let{data:n}=await b.post(`/upload`,t);return W(n?.url,n?.path)}function K(){Ee.value+=1}function Ne(e,t){t&&(Oe.value=e,M.value=t,De.value=!0)}function Pe(){let t=this.quill,n=document.createElement(`input`);n.type=`file`,n.accept=`image/*`,n.onchange=async()=>{let r=n.files?.[0];if(r)try{let e=await G(r),n=t.getSelection(!0)?.index??Math.max(0,t.getLength()-1);t.insertEmbed(n,`image`,e,`user`),t.setSelection(n+1,0)}catch(t){e.error(t?.response?.data?.message??`图片上传失败`)}},n.click()}function q(){let t=this.quill,n=document.createElement(`input`);n.type=`file`,n.accept=`video/*`,n.onchange=async()=>{let r=n.files?.[0];if(r)try{let e=await G(r),n=t.getSelection(!0)?.index??Math.max(0,t.getLength()-1);t.insertEmbed(n,`video`,e,`user`),t.setSelection(n+1,0)}catch(t){e.error(t?.response?.data?.message??`视频上传失败`)}},n.click()}let Fe={modules:{toolbar:{container:[[{header:[1,2,3,!1]}],[`bold`,`italic`,`underline`,`strike`],[{color:[]},{background:[]}],[{list:`ordered`},{list:`bullet`}],[{align:[]}],[`link`,`image`,`video`],[`clean`]],handlers:{image:Pe,video:q}}},placeholder:`请输入活动详情内容`};function J(){return JSON.stringify(H)}function Y(){we.value=J()}function X(){return w.value&&J()!==we.value}let Ie=S(X,`活动表单有未保存改动,确认关闭吗?`);function Le(){return x.value?.role===`venue_admin`}function Re(){return x.value?.role===`super_admin`}function ze(e){return e===`pending`?`待审核`:e===`rejected`?`已退回`:e===`approved`?`已通过`:`-`}function Be(e){return e===`pending`?`orangered`:e===`rejected`?`red`:e===`approved`?`green`:`gray`}function Ve(){return new Intl.DateTimeFormat(`en-CA`,{timeZone:`Asia/Shanghai`,year:`numeric`,month:`2-digit`,day:`2-digit`}).format(new Date)}function Z(e,t){return!e||!t?0:e<t?-1:e>t?1:0}function Q(e,t){let n=Ve();return!e&&!t?null:e&&!t?Z(n,e)<0?`not_started`:`ongoing`:!e&&t?Z(n,t)>0?`ended`:`ongoing`:Z(n,e)<0?`not_started`:Z(n,t)>0?`ended`:`ongoing`}function He(e){return e==null?``:e===`not_started`?`未开始`:e===`ended`?`已结束`:`进行中`}function Ue(e){return e==null?`gray`:e===`not_started`?`arcoblue`:e===`ended`?`gray`:`green`}async function We(t){try{await b.post(`/activities/${t.id}/audit/approve`),e.success(`已通过审核`),await $()}catch(t){e.error(t?.response?.data?.message??`操作失败`)}}function Ge(e){D.value=e.id,O.value=``,k.value=!0}async function Ke(){if(!D.value)return!1;try{return await b.post(`/activities/${D.value}/audit/reject`,{remark:O.value||void 0}),e.success(`已退回`),k.value=!1,await $(),!0}catch(t){return e.error(t?.response?.data?.message??`操作失败`),!1}}function qe(e){return e===`individual`?`个人`:e===`group`?`团体`:e===`both`?`个人+团体`:`未配置`}function Je(e){if(e.booking_audience==null||e.booking_audience===``)return`—`;let t=e.total_quota;return t==null?`0`:String(t)}function Ye(e){return(e||[]).length?(e||[]).join(`、`):`-`}function Xe(e){if(!Qe(e))return $e(e.reservation_type)+`(无线上场次)`;let t=e.booking_audience,n=``;return(t===`group`||t===`both`)&&(n=` · 人数 ${e.min_people_per_order??1}-${e.max_people_per_order??1}`),`${qe(t)}${n} · 总名额 ${Je(e)}`}function Ze(e){H.venue_id=e?Number(e):void 0}function Qe(e){let t=e.reservation_type;return!t||t===`online`}function $e(e){return e===`offline`?`线下预约`:e===`other`?`其他预约`:`线上预约`}async function $(){C.value=!0;try{let[e,t]=await Promise.all([b.get(`/activities`,{params:{page:T.current,page_size:T.pageSize,keyword:E.keyword||void 0,venue_id:E.venue_id||void 0,is_active:E.is_active===`all`?void 0:E.is_active,schedule_status:E.schedule_status===`all`?void 0:E.schedule_status,audit_status:E.audit_status===`all`?void 0:E.audit_status}}),b.get(`/venues`)]);te.value=e.data.data,T.total=e.data.total,y.value=t.data}catch(t){e.error(t?.response?.data?.message??`加载活动失败`)}finally{C.value=!1}}async function et(){let{data:e}=await b.get(`/me`);if(x.value=e,e?.role===`venue_admin`){let t=e.venues?.[0]?.id;E.venue_id=t,H.venue_id=t}}function tt(){A.value=!0,j.value=null,H.venue_id=Le()?x.value?.venues?.[0]?.id:y.value[0]?.id,H.reservation_type=`online`,H.location=``,H.specific_time=``,H.offline_reservation_method=``,H.external_url=``,H.title=``,H.start_at=``,H.end_at=``,H.detail_html=``,H.cover_image=``,H.gallery_media=[],H.tags=[],H.summary=``,H.sort=0,H.is_active=!0,K(),Y(),w.value=!0}function nt(e){A.value=!1,j.value=e.id,H.venue_id=e.venue_id,H.reservation_type=e.reservation_type||`online`,H.location=e.location||``,H.specific_time=e.specific_time||``,H.offline_reservation_method=e.offline_reservation_method||``,H.external_url=e.external_url||``,H.title=e.title,H.start_at=e.start_at?V(e.start_at):``,H.end_at=e.end_at?V(e.end_at):``,H.detail_html=e.detail_html||``,H.cover_image=e.cover_image||``,H.gallery_media=Array.isArray(e.gallery_media)?[...e.gallery_media]:[],H.tags=Array.isArray(e.tags)?[...e.tags]:[],H.sort=e.sort??0,H.summary=e.summary||``,H.is_active=e.is_active,K(),Y(),w.value=!0}function rt(){T.current=1,$()}function it(e){let t=new Set,n=[e];for(;n.length;){let e=n.shift();if(!(!e||t.has(e))){if(t.add(e),e instanceof File)return e;if(e?.target?.files?.[0]instanceof File)return e.target.files[0];if(Array.isArray(e)){n.push(...e);continue}if(typeof e==`object`){for(let t of[`file`,`raw`,`originFile`,`originFileObj`,`fileItem`,`item`,`data`])e[t]&&n.push(e[t]);for(let t of Object.values(e))t&&typeof t==`object`&&n.push(t)}}}return null}async function at(t){try{let n=it(t);if(!n)return!1;H.cover_image=await G(n),e.success(`封面上传成功`)}catch(t){e.error(t?.response?.data?.message??`封面上传失败`)}return!1}async function ot(t){try{let n=it(t);if(!n)return!1;let r=await G(n),i=n.type.startsWith(`video/`);H.gallery_media.push({type:i?`video`:`image`,url:r}),e.success(`轮播资源上传成功`)}catch(t){e.error(t?.response?.data?.message??`轮播资源上传失败`)}return!1}function st(...e){at(e)}function ct(...e){ot(e)}function lt(){H.cover_image=``}function ut(e){H.gallery_media.splice(e,1)}function dt(){let t=U.value.trim();if(!t){e.warning(`请输入标签内容`);return}if(H.tags.includes(t)){e.warning(`标签已存在`);return}H.tags=[...H.tags,t],U.value=``}function ft(e){let t=[...H.tags];t.splice(e,1),H.tags=t}async function pt(){try{if(!H.venue_id)return e.warning(`请先选择场馆`),!1;if(!H.title.trim())return e.warning(`请填写活动名称`),!1;if(!H.start_at||!H.end_at)return e.warning(`请填写开始日期和结束日期`),!1;if(!H.location.trim())return e.warning(`请填写活动地点`),!1;if(H.reservation_type===`offline`&&!H.offline_reservation_method.trim())return e.warning(`选择「线下预约」时请填写预约方式`),!1;let t={venue_id:H.venue_id,reservation_type:H.reservation_type,location:H.location.trim(),specific_time:H.specific_time.trim()||null,offline_reservation_method:H.reservation_type===`offline`&&H.offline_reservation_method.trim()||null,external_url:H.reservation_type===`other`&&H.external_url.trim()||null,title:H.title.trim(),summary:H.summary.trim()||null,quota:0,category:null,start_at:H.start_at||null,end_at:H.end_at||null,address:null,contact_phone:null,lat:null,lng:null,detail_html:H.detail_html||null,cover_image:H.cover_image||null,gallery_media:H.gallery_media,tags:H.tags,reservation_notice:null,open_time:null,sort:Re()?H.sort:void 0,is_active:H.is_active};return A.value?(await b.post(`/activities`,t),e.success(`创建活动成功`)):(await b.put(`/activities/${j.value}`,t),e.success(`更新活动成功`)),Y(),w.value=!1,await $(),!0}catch(t){return e.error(t?.response?.data?.message??`保存失败`),!1}}ie(X,`活动表单有未保存改动,确定要离开吗?`),r(async()=>{await et().catch(()=>void 0),await $()});function mt(e){T.current=e,$()}async function ht(t){try{await b.post(`/activities/${t.id}/toggle`),e.success(`状态已切换`),await $()}catch(t){e.error(t?.response?.data?.message??`操作失败`)}}async function gt(t){try{await b.delete(`/activities/${t.id}`),e.success(`删除成功`),await $()}catch(t){let n=t?.response?.data;if(n?.message&&n?.reservation_count!==void 0){e.error(`${n.message}(关联报名数:${n.reservation_count})`);return}e.error(n?.message??`删除失败`)}}function _t(e){let t=String(e??``).replace(`T`,` `).trim();return t?t.length>=19?t.slice(0,19):t:``}function vt(e){return{_key:ke(),id:typeof e.id==`number`?e.id:void 0,session_name:String(e.session_name??``).trim(),session_start_at:_t(e.session_start_at),session_end_at:_t(e.session_end_at),booking_deadline_at:_t(e.booking_deadline_at),day_quota:Math.max(0,Math.floor(Number(e.day_quota)||0)),booked_count:Math.floor(Number(e.booked_count)||0)}}function yt(){return{_key:ke(),session_name:``,session_start_at:``,session_end_at:``,booking_deadline_at:``,day_quota:1,booked_count:0}}function bt(){B.value.push(yt())}function xt(t){if(B.value.length<=1){e.warning(`至少保留一个场次`);return}if((t.booked_count??0)>0){e.warning(`该场次已有预约占用,无法删除`);return}B.value=B.value.filter(e=>e._key!==t._key)}async function St(t){if(!Qe(t)){e.warning(`仅「线上预约」活动可配置场次`);return}if(!t.start_at||!t.end_at){e.warning(`请先在活动编辑中填写活动开始、结束日期,用于校验各场次时间。`);return}I.value=t,N.value=!0,P.value=!0;try{let{data:e}=await b.get(`/activities/${t.id}/booking-settings`);L.value=e.booking_audience===`group`?`group`:e.booking_audience===`individual`?`individual`:`both`,y.value.find(e=>e.id===t.venue_id)?.appointment_type===`team_only`&&(L.value=`group`),R.value=Math.max(1,Math.floor(Number(e.min_people_per_order??1))),z.value=Math.max(R.value,Math.floor(Number(e.max_people_per_order??R.value)));let n=Array.isArray(e.days)?e.days:[];n.length===0?B.value=[yt()]:B.value=n.map(e=>vt(e))}catch(t){e.error(t?.response?.data?.message??`加载场次设置失败`),N.value=!1}finally{P.value=!1}}async function Ct(){let t=I.value;if(t){if(!B.value.length){e.warning(`至少保存一个场次`);return}for(let t of B.value){if(!t.session_name.trim()){e.error(`请填写所有场次的「场次名称」`);return}if(!t.session_start_at||!t.session_end_at||!t.booking_deadline_at){e.error(`场次「${t.session_name}」的场次时间、预约截止时间均需填写完整`);return}if(t.session_start_at.slice(0,10)!==t.session_end_at.slice(0,10)){e.error(`场次「${t.session_name}」开始与结束须为同一天内`);return}if(new Date(t.session_end_at).getTime()<=new Date(t.session_start_at).getTime()){e.error(`场次「${t.session_name}」结束时间须晚于开始时间`);return}if(new Date(t.booking_deadline_at).getTime()>new Date(t.session_start_at).getTime()){e.error(`场次「${t.session_name}」预约截止时间不能晚于场次开始时间`);return}}if(L.value===`group`||L.value===`both`){let t=Math.max(1,Math.floor(Number(R.value)||0));if(Math.max(1,Math.floor(Number(z.value)||0))<t){e.error(`最大预约人数不能小于最小预约人数`);return}}F.value=!0;try{await b.put(`/activities/${t.id}/booking-settings`,{booking_audience:L.value,min_people_per_order:L.value===`individual`?1:Math.max(1,Math.floor(R.value)),max_people_per_order:L.value===`individual`?1:Math.max(1,Math.floor(z.value)),days:B.value.map(e=>{let t={session_name:e.session_name.trim(),session_start_at:e.session_start_at,session_end_at:e.session_end_at,booking_deadline_at:e.booking_deadline_at,day_quota:Math.max(1,Math.floor(Number(e.day_quota)||0))};return e.id&&(t.id=e.id),t})}),e.success(`场次设置已保存`),N.value=!1,await $()}catch(t){let n=t?.response?.data?.message,r=t?.response?.data?.errors;r?.days?.[0]?e.error(String(r.days[0])):e.error(n??`保存失败`)}finally{F.value=!1}}}return(e,r)=>{let i=a(`a-button`),d=a(`a-space`),p=a(`a-input`),m=a(`a-option`),b=a(`a-select`),x=a(`a-table-column`),S=a(`a-tag`),ie=a(`a-tooltip`),D=a(`a-popconfirm`),j=a(`a-table`),we=a(`a-card`),ke=a(`a-textarea`),W=a(`a-modal`),G=a(`a-form-item`),K=a(`a-date-picker`),Pe=a(`a-switch`),q=a(`a-input-number`),J=a(`a-upload`),Y=a(`a-typography-text`),X=a(`a-form`),Ve=a(`a-typography-title`),Z=a(`a-alert`),Q=a(`a-radio`),qe=a(`a-radio-group`),Je=a(`a-spin`);return n(),h(u,null,[_(we,{title:`活动管理 / 活动列表`},{extra:o(()=>[_(d,null,{default:o(()=>[_(i,{onClick:$},{default:o(()=>[...r[27]||=[s(`刷新`,-1)]]),_:1}),_(i,{type:`primary`,onClick:tt},{default:o(()=>[...r[28]||=[s(`新增活动`,-1)]]),_:1})]),_:1})]),default:o(()=>[_(d,{style:{"margin-bottom":`12px`},wrap:``},{default:o(()=>[_(p,{modelValue:E.keyword,"onUpdate:modelValue":r[0]||=e=>E.keyword=e,placeholder:`搜索活动名称`,style:{width:`220px`}},null,8,[`modelValue`]),_(b,{modelValue:E.venue_id,"onUpdate:modelValue":r[1]||=e=>E.venue_id=e,"allow-clear":``,placeholder:`筛选场馆`,style:{width:`220px`},disabled:Le()},{default:o(()=>[(n(!0),h(u,null,v(y.value,e=>(n(),c(m,{key:e.id,value:e.id},{default:o(()=>[s(f(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`,`disabled`]),_(b,{modelValue:E.is_active,"onUpdate:modelValue":r[2]||=e=>E.is_active=e,style:{width:`140px`}},{default:o(()=>[_(m,{value:`all`},{default:o(()=>[...r[29]||=[s(`全部状态`,-1)]]),_:1}),_(m,{value:`1`},{default:o(()=>[...r[30]||=[s(`启用`,-1)]]),_:1}),_(m,{value:`0`},{default:o(()=>[...r[31]||=[s(`停用`,-1)]]),_:1})]),_:1},8,[`modelValue`]),_(b,{modelValue:E.audit_status,"onUpdate:modelValue":r[3]||=e=>E.audit_status=e,style:{width:`130px`},placeholder:`审核状态`},{default:o(()=>[_(m,{value:`all`},{default:o(()=>[...r[32]||=[s(`全部审核`,-1)]]),_:1}),_(m,{value:`approved`},{default:o(()=>[...r[33]||=[s(`已通过`,-1)]]),_:1}),_(m,{value:`pending`},{default:o(()=>[...r[34]||=[s(`待审核`,-1)]]),_:1}),_(m,{value:`rejected`},{default:o(()=>[...r[35]||=[s(`已退回`,-1)]]),_:1})]),_:1},8,[`modelValue`]),_(i,{type:`primary`,onClick:rt},{default:o(()=>[...r[36]||=[s(`查询`,-1)]]),_:1})]),_:1}),_(j,{class:`list-data-table`,scroll:{x:ee(re)},data:te.value,loading:C.value,"row-key":`id`,pagination:{current:T.current,pageSize:T.pageSize,total:T.total,showTotal:!0},onPageChange:mt},{columns:o(()=>[_(x,{title:`ID`,"data-index":`id`,width:80,ellipsis:!0,tooltip:!0}),_(x,{title:`活动名称`,"data-index":`title`,width:200,"min-width":160,ellipsis:!0,tooltip:!0}),_(x,{title:`简介`,width:180,"min-width":140,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(e.summary||`-`),1)]),_:1}),_(x,{title:`场馆`,width:160,"min-width":120,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(e.venue?.name||`-`),1)]),_:1}),_(x,{title:`封面`,width:100},{cell:o(({record:e})=>[e.cover_image?(n(),h(`img`,{key:0,src:e.cover_image,style:{width:`60px`,height:`40px`,"object-fit":`cover`,"border-radius":`4px`}},null,8,ae)):(n(),h(`span`,oe,`-`))]),_:1}),_(x,{title:`标签`,width:200,"min-width":140,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(Ye(e.tags)),1)]),_:1}),_(x,{title:`场次/名额`,width:150,"min-width":130,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(Xe(e)),1)]),_:1}),_(x,{title:`开始日期`,width:120,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(e.start_at?V(String(e.start_at)):`-`),1)]),_:1}),_(x,{title:`结束日期`,width:120,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(e.end_at?V(String(e.end_at)):`-`),1)]),_:1}),_(x,{title:`活动地点`,width:160,"min-width":120,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(e.location||`-`),1)]),_:1}),_(x,{title:`预约类型`,width:110},{cell:o(({record:e})=>[s(f($e(e.reservation_type)),1)]),_:1}),_(x,{title:`活动状态`,width:100},{cell:o(({record:e})=>[_(S,{color:Ue(e.schedule_status)},{default:o(()=>[s(f(He(e.schedule_status)),1)]),_:2},1032,[`color`])]),_:1}),_(x,{title:`启停状态`,width:100},{cell:o(({record:e})=>[_(S,{color:e.is_active?`green`:`gray`},{default:o(()=>[s(f(e.is_active?`启用`:`停用`),1)]),_:2},1032,[`color`])]),_:1}),_(x,{title:`审核状态`,width:120},{cell:o(({record:e})=>[e.audit_status===`rejected`&&e.audit_remark?(n(),c(ie,{key:0,content:e.audit_remark},{default:o(()=>[_(S,{color:Be(e.audit_status)},{default:o(()=>[s(f(ze(e.audit_status)),1)]),_:2},1032,[`color`])]),_:2},1032,[`content`])):(n(),c(S,{key:1,color:Be(e.audit_status)},{default:o(()=>[s(f(ze(e.audit_status)),1)]),_:2},1032,[`color`]))]),_:1}),_(x,{title:`操作`,width:460,fixed:`right`,align:`center`},{cell:o(({record:e})=>[_(d,{wrap:``},{default:o(()=>[_(i,{type:`text`,onClick:t=>nt(e)},{default:o(()=>[...r[37]||=[s(`编辑`,-1)]]),_:1},8,[`onClick`]),Qe(e)?(n(),c(i,{key:0,type:`text`,onClick:t=>St(e)},{default:o(()=>[...r[38]||=[s(`场次设置`,-1)]]),_:1},8,[`onClick`])):l(``,!0),Re()&&(e.audit_status===`pending`||e.audit_status===`rejected`)?(n(),h(u,{key:1},[_(i,{type:`text`,status:`success`,onClick:t=>We(e)},{default:o(()=>[...r[39]||=[s(`通过`,-1)]]),_:1},8,[`onClick`]),_(i,{type:`text`,status:`danger`,onClick:t=>Ge(e)},{default:o(()=>[...r[40]||=[s(`退回`,-1)]]),_:1},8,[`onClick`])],64)):l(``,!0),_(i,{type:`text`,status:`warning`,onClick:t=>ht(e)},{default:o(()=>[s(f(e.is_active?`停用`:`启用`),1)]),_:2},1032,[`onClick`]),_(D,{content:`确认删除该活动?`,onOk:t=>gt(e)},{default:o(()=>[_(i,{type:`text`,status:`danger`},{default:o(()=>[...r[41]||=[s(`删除`,-1)]]),_:1})]),_:1},8,[`onOk`])]),_:2},1024)]),_:1})]),_:1},8,[`scroll`,`data`,`loading`,`pagination`])]),_:1}),_(W,{visible:k.value,"onUpdate:visible":r[5]||=e=>k.value=e,title:`退回活动`,"on-before-ok":Ke},{default:o(()=>[_(ke,{modelValue:O.value,"onUpdate:modelValue":r[4]||=e=>O.value=e,placeholder:`退回说明(选填)`,"auto-size":{minRows:3,maxRows:8}},null,8,[`modelValue`])]),_:1},8,[`visible`]),_(W,{visible:w.value,"onUpdate:visible":r[20]||=e=>w.value=e,title:A.value?`新增活动`:`编辑活动`,width:`70%`,"body-style":Te,"on-before-cancel":ee(Ie),"confirm-loading":Ce.value,"on-before-ok":pt},{default:o(()=>[_(X,{model:H,layout:`vertical`,class:`admin-modal-form`},{default:o(()=>[_(G,{label:`场馆`,required:``},{default:o(()=>[_(b,{modelValue:H.venue_id,"onUpdate:modelValue":r[6]||=e=>H.venue_id=e,disabled:Le(),onChange:Ze},{default:o(()=>[(n(!0),h(u,null,v(y.value,e=>(n(),c(m,{key:e.id,value:e.id},{default:o(()=>[s(f(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`,`disabled`])]),_:1}),_(G,{label:`活动名称`,required:``},{default:o(()=>[_(p,{modelValue:H.title,"onUpdate:modelValue":r[7]||=e=>H.title=e},null,8,[`modelValue`])]),_:1}),_(G,{label:`开始日期`,required:``},{default:o(()=>[_(K,{modelValue:H.start_at,"onUpdate:modelValue":r[8]||=e=>H.start_at=e,format:`YYYY-MM-DD`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1}),_(G,{label:`结束日期`,required:``},{default:o(()=>[_(K,{modelValue:H.end_at,"onUpdate:modelValue":r[9]||=e=>H.end_at=e,format:`YYYY-MM-DD`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1}),_(G,{label:`预约类型`,required:``},{extra:o(()=>[...r[45]||=[s(`非「线上预约」时不再使用场次设置;线下预约须填写预约方式;外链仅「其他预约」可填。`,-1)]]),default:o(()=>[_(b,{modelValue:H.reservation_type,"onUpdate:modelValue":r[10]||=e=>H.reservation_type=e},{default:o(()=>[_(m,{value:`online`},{default:o(()=>[...r[42]||=[s(`线上预约`,-1)]]),_:1}),_(m,{value:`offline`},{default:o(()=>[...r[43]||=[s(`线下预约`,-1)]]),_:1}),_(m,{value:`other`},{default:o(()=>[...r[44]||=[s(`其他预约`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1}),_(G,{label:`活动地点`,required:``},{default:o(()=>[_(p,{modelValue:H.location,"onUpdate:modelValue":r[11]||=e=>H.location=e,placeholder:`如:××区××路××号 或 线上平台`,"allow-clear":``},null,8,[`modelValue`])]),_:1}),_(G,{label:`具体时间`},{default:o(()=>[_(p,{modelValue:H.specific_time,"onUpdate:modelValue":r[12]||=e=>H.specific_time=e,placeholder:`如:每日 14:00–16:00;或 活动当日上午`,"allow-clear":``},null,8,[`modelValue`])]),_:1}),H.reservation_type===`offline`?(n(),c(G,{key:0,label:`预约方式(线下)`,required:``},{default:o(()=>[_(p,{modelValue:H.offline_reservation_method,"onUpdate:modelValue":r[13]||=e=>H.offline_reservation_method=e,"allow-clear":``,placeholder:`说明如何完成线下预约`},null,8,[`modelValue`])]),_:1})):l(``,!0),H.reservation_type===`other`?(n(),c(G,{key:1,label:`外链地址(选填)`},{default:o(()=>[_(p,{modelValue:H.external_url,"onUpdate:modelValue":r[14]||=e=>H.external_url=e,placeholder:`H5 详情可展示外链并统计点击;以 http(s):// 开头`,"allow-clear":``},null,8,[`modelValue`])]),_:1})):l(``,!0),_(G,{label:`活动状态`},{extra:o(()=>[...r[46]||=[s(`按起止日自动判断`,-1)]]),default:o(()=>[Me.value?(n(),c(S,{key:0,color:Ue(Me.value)},{default:o(()=>[s(f(He(Me.value)),1)]),_:1},8,[`color`])):(n(),h(`span`,se,`—`))]),_:1}),_(G,{label:`启停状态`},{default:o(()=>[_(Pe,{modelValue:H.is_active,"onUpdate:modelValue":r[15]||=e=>H.is_active=e},null,8,[`modelValue`])]),_:1}),_(G,{label:`排序`},{default:o(()=>[_(q,{modelValue:H.sort,"onUpdate:modelValue":r[16]||=e=>H.sort=e,min:0,disabled:!Re()},null,8,[`modelValue`,`disabled`])]),_:1}),_(G,{label:`标签`,class:`admin-modal-form__full`},{default:o(()=>[_(d,{style:{width:`100%`}},{default:o(()=>[_(p,{modelValue:U.value,"onUpdate:modelValue":r[17]||=e=>U.value=e,placeholder:`请输入标签内容`},null,8,[`modelValue`]),_(i,{type:`primary`,onClick:dt},{default:o(()=>[...r[47]||=[s(`新增标签`,-1)]]),_:1})]),_:1}),g(`div`,ce,[(n(!0),h(u,null,v(H.tags,(e,t)=>(n(),c(S,{key:`${e}-${t}`,closable:``,style:{"margin-bottom":`0`},onClose:e=>ft(t)},{default:o(()=>[s(f(e),1)]),_:2},1032,[`onClose`]))),128)),H.tags.length?l(``,!0):(n(),h(`span`,le,`暂无标签`))])]),_:1}),_(G,{label:`封面与轮播`,class:`admin-modal-form__full`},{default:o(()=>[g(`div`,ue,[g(`div`,de,[r[51]||=g(`div`,{class:`activity-cover-carousel-row__sub`},`封面图`,-1),_(d,{direction:`vertical`,fill:``,style:{width:`100%`}},{default:o(()=>[_(J,{"auto-upload":!1,"show-file-list":!1,accept:`image/*`,"before-upload":at,onChange:st},{"upload-button":o(()=>[_(i,null,{default:o(()=>[...r[48]||=[s(`上传封面`,-1)]]),_:1})]),_:1}),_(Y,{type:`secondary`},{default:o(()=>[...r[49]||=[s(`图片尺寸推荐 1200×600`,-1)]]),_:1}),H.cover_image?(n(),c(d,{key:0,direction:`vertical`,align:`start`},{default:o(()=>[g(`img`,{src:H.cover_image,class:`activity-cover-thumb`,onClick:r[18]||=e=>Ne(`image`,H.cover_image)},null,8,fe),_(i,{size:`mini`,status:`danger`,onClick:lt},{default:o(()=>[...r[50]||=[s(`删除封面`,-1)]]),_:1})]),_:1})):l(``,!0)]),_:1})]),g(`div`,pe,[r[55]||=g(`div`,{class:`activity-cover-carousel-row__sub`},`轮播图`,-1),g(`div`,me,[g(`div`,he,[_(J,{"auto-upload":!1,"show-file-list":!1,multiple:``,accept:`image/*,video/*`,"before-upload":ot,onChange:ct},{"upload-button":o(()=>[_(i,{type:`primary`},{default:o(()=>[...r[52]||=[s(`新增轮播资源`,-1)]]),_:1})]),_:1}),_(Y,{type:`secondary`,style:{"margin-top":`12px`,display:`block`}},{default:o(()=>[...r[53]||=[s(`图片尺寸推荐 1200×600`,-1)]]),_:1})]),g(`div`,ge,[(n(!0),h(u,null,v(H.gallery_media,(e,a)=>(n(),h(`div`,{key:e.url+a,class:`activity-gallery-item`},[e.type===`image`?(n(),h(`img`,{key:0,src:e.url,class:`activity-gallery-thumb`,onClick:t=>Ne(`image`,e.url)},null,8,_e)):(n(),h(`video`,{key:1,src:e.url,controls:``,class:`activity-gallery-thumb activity-gallery-thumb--video`,onClick:t(t=>Ne(`video`,e.url),[`stop`])},null,8,ve)),_(i,{size:`mini`,status:`danger`,onClick:e=>ut(a)},{default:o(()=>[...r[54]||=[s(`删除`,-1)]]),_:1},8,[`onClick`])]))),128))])])])])]),_:1}),_(G,{label:`活动详情`,class:`admin-modal-form__full`},{default:o(()=>[(n(),c(ne,{modelValue:H.detail_html,"onUpdate:modelValue":r[19]||=e=>H.detail_html=e,"editor-options":Fe,"field-key":`activity-detail`,"min-height":280,key:`activity-detail-${Ee.value}`},null,8,[`modelValue`]))]),_:1})]),_:1},8,[`model`])]),_:1},8,[`visible`,`title`,`on-before-cancel`,`confirm-loading`]),_(W,{visible:De.value,"onUpdate:visible":r[21]||=e=>De.value=e,title:`媒体预览`,width:`72%`,footer:!1},{default:o(()=>[Oe.value===`image`&&M.value?(n(),h(`img`,{key:0,src:M.value,style:{display:`block`,"max-width":`100%`,"max-height":`72vh`,margin:`0 auto`}},null,8,ye)):Oe.value===`video`&&M.value?(n(),h(`video`,{key:1,src:M.value,controls:``,autoplay:``,style:{display:`block`,width:`100%`,"max-height":`72vh`}},null,8,be)):l(``,!0)]),_:1},8,[`visible`]),_(W,{visible:N.value,"onUpdate:visible":r[26]||=e=>N.value=e,title:`场次设置`,width:`80%`,"body-style":Te,footer:!1,"mask-closable":!1},{default:o(()=>[_(Je,{loading:P.value,style:{width:`100%`}},{default:o(()=>[I.value?(n(),h(`div`,xe,[_(Ve,{heading:6,style:{"margin-top":`0`}},{default:o(()=>[s(`活动:`+f(I.value.title),1)]),_:1}),_(Z,{type:`info`,style:{"margin-bottom":`12px`}},{default:o(()=>[s(` 活动开始~结束日:`+f(V(String(I.value.start_at)))+` ~ `+f(V(String(I.value.end_at)))+`。场次的开始/结束仅可选同一天,且不能超出上述日期;预约截止时间不得晚于场次开始;至少保留 1 个场次,每行可「新增」多个场次;删除行前请确保该场次无已占用订单。 `,1)]),_:1}),_(X,{layout:`vertical`,class:`admin-modal-form`},{default:o(()=>[_(G,{label:`预约方式`,required:``,class:`admin-modal-form__full`},{default:o(()=>[_(qe,{modelValue:L.value,"onUpdate:modelValue":r[22]||=e=>L.value=e,direction:`vertical`},{default:o(()=>[_(Q,{value:`individual`,disabled:je.value},{default:o(()=>[...r[56]||=[s(`个人:仅可预约 1 人(填写个人信息)。`,-1)]]),_:1},8,[`disabled`]),_(Q,{value:`group`},{default:o(()=>[...r[57]||=[s(`团体:填写领队信息 + 团体人数(人数范围见下方设置,含联系人本人)。`,-1)]]),_:1}),_(Q,{value:`both`,disabled:je.value},{default:o(()=>[...r[58]||=[s(`个人+团体:个人为 1 人;团体人数范围见下方设置(含联系人本人)。`,-1)]]),_:1},8,[`disabled`])]),_:1},8,[`modelValue`]),je.value?(n(),c(Z,{key:0,type:`warning`,style:{"margin-top":`8px`}},{default:o(()=>[...r[59]||=[s(` 该场馆预约类型为「仅团队」,场次设置只能选择团体。 `,-1)]]),_:1})):l(``,!0)]),_:1}),L.value===`group`||L.value===`both`?(n(),c(G,{key:0,label:`单笔预约人数限制`,required:``,class:`admin-modal-form__full`},{default:o(()=>[_(d,null,{default:o(()=>[_(q,{modelValue:R.value,"onUpdate:modelValue":r[23]||=e=>R.value=e,min:1,precision:0,style:{width:`180px`}},null,8,[`modelValue`]),r[60]||=g(`span`,null,`最小人数`,-1),_(q,{modelValue:z.value,"onUpdate:modelValue":r[24]||=e=>z.value=e,min:1,precision:0,style:{width:`180px`}},null,8,[`modelValue`]),r[61]||=g(`span`,null,`最大人数`,-1)]),_:1}),r[62]||=g(`div`,{style:{"margin-top":`6px`,color:`var(--color-text-3)`}},`人数包含领队/联系人本人;最大人数需 ≥ 最小人数。H5 团体预约将按此范围校验。`,-1)]),_:1})):l(``,!0),L.value===`group`||L.value===`both`?(n(),c(Z,{key:1,type:`info`,class:`admin-modal-form__full`,style:{"margin-bottom":`12px`}},{default:o(()=>[...r[63]||=[s(` 团体人数与单场「总名额(人数)」无直接换算关系;单场总名额为可预约的占用名额上限。 `,-1)]]),_:1})):l(``,!0),_(G,{label:`总名额(各场次数之和)`},{default:o(()=>[_(q,{"model-value":Ae.value,disabled:``,style:{width:`200px`}},null,8,[`model-value`]),r[64]||=g(`span`,{style:{"margin-left":`8px`,color:`var(--color-text-3)`}},`保存时写入活动「总名额」`,-1)]),_:1})]),_:1}),_(d,{style:{"margin-bottom":`8px`}},{default:o(()=>[_(i,{type:`primary`,onClick:bt},{default:o(()=>[...r[65]||=[s(`新增场次`,-1)]]),_:1})]),_:1}),_(j,{data:B.value,pagination:!1,"row-key":`_key`,bordered:{cell:!0}},{columns:o(()=>[_(x,{title:`场次名称`,width:160,"min-width":120},{cell:o(({record:e})=>[_(p,{modelValue:e.session_name,"onUpdate:modelValue":t=>e.session_name=t,placeholder:`必填`,"allow-clear":``,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),_(x,{title:`场次开始`,width:200},{cell:o(({record:e})=>[_(K,{modelValue:e.session_start_at,"onUpdate:modelValue":t=>e.session_start_at=t,"show-time":``,format:`YYYY-MM-DD HH:mm`,"value-format":`YYYY-MM-DD HH:mm:ss`,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),_(x,{title:`场次结束`,width:200},{cell:o(({record:e})=>[_(K,{modelValue:e.session_end_at,"onUpdate:modelValue":t=>e.session_end_at=t,"show-time":``,format:`YYYY-MM-DD HH:mm`,"value-format":`YYYY-MM-DD HH:mm:ss`,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),_(x,{title:`预约截止`,width:200},{title:o(()=>[...r[66]||=[g(`span`,null,`预约截止`,-1),g(`div`,{style:{"font-weight":`normal`,"font-size":`12px`,color:`var(--color-text-3)`,"margin-top":`2px`}},`不能晚于场次开始`,-1)]]),cell:o(({record:e})=>[_(K,{modelValue:e.booking_deadline_at,"onUpdate:modelValue":t=>e.booking_deadline_at=t,"show-time":``,format:`YYYY-MM-DD HH:mm`,"value-format":`YYYY-MM-DD HH:mm:ss`,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),_(x,{title:`总名额`,width:120},{cell:o(({record:e})=>[_(q,{modelValue:e.day_quota,"onUpdate:modelValue":t=>e.day_quota=t,min:1,precision:0,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),_(x,{title:`已占用`,width:80},{cell:o(({record:e})=>[s(f(e.booked_count??0),1)]),_:1}),_(x,{title:`操作`,width:90,fixed:`right`,align:`center`},{cell:o(({record:e})=>[_(i,{type:`text`,status:`danger`,disabled:(e.booked_count??0)>0,onClick:t=>xt(e)},{default:o(()=>[...r[67]||=[s(`删除`,-1)]]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1},8,[`data`])])):l(``,!0)]),_:1},8,[`loading`]),g(`div`,Se,[_(d,null,{default:o(()=>[_(i,{onClick:r[25]||=e=>N.value=!1},{default:o(()=>[...r[68]||=[s(`取消`,-1)]]),_:1}),_(i,{type:`primary`,loading:F.value,disabled:P.value,onClick:Ct},{default:o(()=>[...r[69]||=[s(`保存`,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1})])]),_:1},8,[`visible`])],64)}}}),[[`__scopeId`,`data-v-7b328d75`]]);export{C as default}; |