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
36 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{n as e,st as t}from"./axios-Cze8nXLL.js";import{At as n,I as r,N as i,O as a,P as o,V as s,X as c,_ as l,at as u,d,dt as ee,f,i as p,l as m,p as h,rt as g,u as _,v,y as te,z as y}from"./runtime-core.esm-bundler-CP0MNZrl.js";import{a as b,n as x,o as S,s as ne}from"./index-CBrDPDlF.js";import{t as re}from"./RichEditorField-BxghITP4.js";import{t as ie}from"./listTable-DKAruyoN.js";function ae(e,t){return function(){return e()?window.confirm(t):!0}}function oe(e,t=`当前有未保存改动,确定要离开吗?`){function n(t){e()&&(t.preventDefault(),t.returnValue=``)}b((n,r,i)=>{if(!e()){i();return}i(window.confirm(t))}),i(()=>{window.addEventListener(`beforeunload`,n)}),o(()=>{window.removeEventListener(`beforeunload`,n)})}var se=[`src`],ce={key:1},le={key:1,style:{color:`var(--color-text-3)`}},ue={style:{"margin-top":`8px`,width:`100%`,display:`flex`,"flex-wrap":`wrap`,gap:`8px`}},de={key:0,style:{color:`#86909c`}},fe={class:`activity-address-coord-row`},pe={class:`activity-cover-carousel-wrap`},me={class:`activity-cover-carousel-row__col`},he=[`src`],ge={class:`activity-cover-carousel-row__col`},_e={style:{display:`flex`,"flex-direction":`column`,"align-items":`flex-start`,width:`100%`}},ve={style:{width:`100%`,"margin-bottom":`8px`}},ye={class:`activity-gallery-grid`},be=[`src`,`onClick`],xe=[`src`,`onClick`],Se=[`src`],Ce=[`src`],we={style:{display:`flex`,gap:`12px`}},Te={style:{width:`280px`,height:`520px`,overflow:`auto`,border:`1px solid #e5e6eb`,padding:`8px`}},Ee={key:0,class:`booking-settings`},De={style:{"margin-top":`16px`,"text-align":`right`}},C=S(te({__name:`ActivityList`,setup(o){let te=u([]),b=u([]),S=u(null),C=u(!1),Oe=u(!1),w=u(!1),ke=u(!1),T=u(!1),E=u(``),D=u([]),Ae=u(null),O=g({current:1,pageSize:10,total:0}),k=g({keyword:``,venue_id:void 0,is_active:`all`,schedule_status:`all`,audit_status:`all`}),A=u(null),j=u(``),je=u(!1),Me=u(!0),Ne=u(null),M=u(``),Pe={maxHeight:`70vh`,overflow:`auto`},Fe=u(0),Ie=u(!1),Le=u(`image`),N=u(``),P=u(!1),F=u(!1),Re=u(!1),I=u(null),L=u(`both`),R=u(1),z=u(1),B=u([]);function V(){return`bk-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function H(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 ze=m(()=>B.value.reduce((e,t)=>e+(Number(t.day_quota)||0),0)),Be=m(()=>{let e=I.value;return e?.venue_id?b.value.find(t=>t.id===e.venue_id)?.appointment_type===`team_only`:!1}),U=null,W=null,G=u(null),K={lat:31.299379,lng:120.585315},q=g({venue_id:void 0,title:``,start_at:``,end_at:``,address:``,contact_phone:``,lat:void 0,lng:void 0,detail_html:``,cover_image:``,gallery_media:[],tags:[],reservation_notice:``,open_time:``,sort:0,summary:``,is_active:!0}),Ve=u(``),He=m(()=>nt(q.start_at||``,q.end_at||``));function J(e){if(e==null||e===``)return;let t=typeof e==`number`?e:parseFloat(String(e).trim());return Number.isFinite(t)?t:void 0}function Ue(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 Y(e){let t=new FormData;t.append(`file`,e);let{data:n}=await x.post(`/upload`,t);return Ue(n?.url,n?.path)}function We(){Fe.value+=1}function Ge(e,t){t&&(Le.value=e,N.value=t,Ie.value=!0)}function Ke(){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 Y(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 qe(){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 Y(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 Je={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:Ke,video:qe}}},placeholder:`请输入活动详情内容`};function X(){return JSON.stringify(q)}function Ye(){M.value=X()}function Z(){return w.value&&X()!==M.value}let Xe=ae(Z,`活动表单有未保存改动,确认关闭吗?`);function Ze(){return S.value?.role===`venue_admin`}function Qe(){return S.value?.role===`super_admin`}function $e(e){return e===`pending`?`待审核`:e===`rejected`?`已退回`:e===`approved`?`已通过`:`-`}function et(e){return e===`pending`?`orangered`:e===`rejected`?`red`:e===`approved`?`green`:`gray`}function tt(){return new Intl.DateTimeFormat(`en-CA`,{timeZone:`Asia/Shanghai`,year:`numeric`,month:`2-digit`,day:`2-digit`}).format(new Date)}function Q(e,t){return!e||!t?0:e<t?-1:e>t?1:0}function nt(e,t){let n=tt();return!e&&!t?null:e&&!t?Q(n,e)<0?`not_started`:`ongoing`:!e&&t?Q(n,t)>0?`ended`:`ongoing`:Q(n,e)<0?`not_started`:Q(n,t)>0?`ended`:`ongoing`}function rt(e){return e==null?``:e===`not_started`?`未开始`:e===`ended`?`已结束`:`进行中`}function it(e){return e==null?`gray`:e===`not_started`?`arcoblue`:e===`ended`?`gray`:`green`}async function at(t){try{await x.post(`/activities/${t.id}/audit/approve`),e.success(`已通过审核`),await $()}catch(t){e.error(t?.response?.data?.message??`操作失败`)}}function ot(e){A.value=e.id,j.value=``,je.value=!0}async function st(){if(!A.value)return!1;try{return await x.post(`/activities/${A.value}/audit/reject`,{remark:j.value||void 0}),e.success(`已退回`),je.value=!1,await $(),!0}catch(t){return e.error(t?.response?.data?.message??`操作失败`),!1}}function ct(e){return e===`individual`?`个人`:e===`group`?`团体`:e===`both`?`个人+团体`:`未配置`}function lt(e){if(e.booking_audience==null||e.booking_audience===``)return``;let t=e.total_quota;return t==null?`0`:String(t)}function ut(e){return(e||[]).length?(e||[]).join(``):`-`}function dt(e){let t=e.booking_audience,n=``;return(t===`group`||t===`both`)&&(n=` · 人数 ${e.min_people_per_order??1}-${e.max_people_per_order??1}`),`${ct(t)}${n} · 总名额 ${lt(e)}`}function ft(e){return b.value.find(t=>t.id===e)}function pt(e){let t=ft(e);t&&(q.address=t.address||``,q.lat=J(t.lat),q.lng=J(t.lng),q.cover_image=t.cover_image||``,q.gallery_media=Array.isArray(t.gallery_media)?[...t.gallery_media]:[],q.reservation_notice=t.reservation_notice||``,q.open_time=t.open_time||``)}function mt(){return!!(q.address&&q.address.trim()||typeof q.lat==`number`||typeof q.lng==`number`||q.cover_image||q.gallery_media&&q.gallery_media.length>0||q.reservation_notice&&q.reservation_notice.trim()||q.open_time&&q.open_time.trim())}function ht(e){let t=e?Number(e):void 0;if(!t){q.venue_id=void 0;return}if(q.venue_id===t)return;let n=()=>{q.venue_id=t,pt(t)};if(!mt()){n();return}ne.confirm({title:`切换场馆`,content:`切换场馆后将使用该场馆默认的地址、经纬度、封面、轮播、预约须知和开放时间,是否继续?`,onOk:n})}async function $(){C.value=!0;try{let[e,t]=await Promise.all([x.get(`/activities`,{params:{page:O.current,page_size:O.pageSize,keyword:k.keyword||void 0,venue_id:k.venue_id||void 0,is_active:k.is_active===`all`?void 0:k.is_active,schedule_status:k.schedule_status===`all`?void 0:k.schedule_status,audit_status:k.audit_status===`all`?void 0:k.audit_status}}),x.get(`/venues`)]);te.value=e.data.data,O.total=e.data.total,b.value=t.data}catch(t){e.error(t?.response?.data?.message??`加载活动失败`)}finally{C.value=!1}}async function gt(){let{data:e}=await x.get(`/me`);if(S.value=e,e?.role===`venue_admin`){let t=e.venues?.[0]?.id;k.venue_id=t,q.venue_id=t}}function _t(){Me.value=!0,Ne.value=null,q.venue_id=Ze()?S.value?.venues?.[0]?.id:b.value[0]?.id,q.title=``,q.start_at=``,q.end_at=``,q.contact_phone=``,q.detail_html=``,q.tags=[],q.summary=``,q.sort=0,q.is_active=!0,pt(q.venue_id),We(),Ye(),w.value=!0}function vt(e){Me.value=!1,Ne.value=e.id,q.venue_id=e.venue_id,q.title=e.title,q.start_at=e.start_at?H(e.start_at):``,q.end_at=e.end_at?H(e.end_at):``,q.address=e.address||``,q.contact_phone=e.contact_phone||``,q.lat=J(e.lat),q.lng=J(e.lng),q.detail_html=e.detail_html||``,q.cover_image=e.cover_image||``,q.gallery_media=Array.isArray(e.gallery_media)?[...e.gallery_media]:[],q.tags=Array.isArray(e.tags)?[...e.tags]:[],q.reservation_notice=e.reservation_notice||``,q.open_time=e.open_time||``,q.sort=e.sort??0,q.summary=e.summary||``,q.is_active=e.is_active,We(),Ye(),w.value=!0}function yt(){O.current=1,$()}function bt(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 xt(t){try{let n=bt(t);if(!n)return!1;q.cover_image=await Y(n),e.success(`封面上传成功`)}catch(t){e.error(t?.response?.data?.message??`封面上传失败`)}return!1}async function St(t){try{let n=bt(t);if(!n)return!1;let r=await Y(n),i=n.type.startsWith(`video/`);q.gallery_media.push({type:i?`video`:`image`,url:r}),e.success(`轮播资源上传成功`)}catch(t){e.error(t?.response?.data?.message??`轮播资源上传失败`)}return!1}function Ct(...e){xt(e)}function wt(...e){St(e)}function Tt(){q.cover_image=``}function Et(e){q.gallery_media.splice(e,1)}function Dt(){let t=Ve.value.trim();if(!t){e.warning(`请输入标签内容`);return}if(q.tags.includes(t)){e.warning(`标签已存在`);return}q.tags=[...q.tags,t],Ve.value=``}function Ot(e){let t=[...q.tags];t.splice(e,1),q.tags=t}function kt(){return`CRFBZ-NTART-YU4XX-LCDGK-3J456-VKBK2`}async function At(){if(window.TMap)return;let e=kt();if(!e)throw Error(`请先配置 VITE_TENCENT_MAP_KEY`);await new Promise((t,n)=>{let r=document.createElement(`script`);r.src=`https://map.qq.com/api/gljs?v=1.exp&key=${e}`,r.async=!0,r.onload=()=>t(),r.onerror=()=>n(Error(`腾讯地图SDK加载失败`)),document.head.appendChild(r)})}function jt(e,t){let n=window.TMap;U&&(W&&W.setMap(null),W=new n.MultiMarker({map:U,styles:{marker:new n.MarkerStyle({width:24,height:35})},geometries:[{id:`picked`,styleId:`marker`,position:new n.LatLng(e,t)}]}),U.setCenter(new n.LatLng(e,t)))}async function Mt(e,t){let{data:n}=await x.get(`/map/reverse-geocode`,{params:{lat:e,lng:t}});G.value={lat:e,lng:t,address:n.address||``}}async function Nt(){await At();let e=window.TMap,t=typeof q.lat==`number`?q.lat:K.lat,n=typeof q.lng==`number`?q.lng:K.lng,r=new e.LatLng(t,n);U?U.setCenter(r):(U=new e.Map(Ae.value,{center:r,zoom:13}),U.on(`click`,async e=>{let t=Number(e.latLng.getLat().toFixed(6)),n=Number(e.latLng.getLng().toFixed(6));jt(t,n),await Mt(t,n)})),typeof q.lat==`number`&&typeof q.lng==`number`&&(jt(q.lat,q.lng),G.value={lat:q.lat,lng:q.lng,address:q.address||``})}async function Pt(){ke.value=!0,E.value=``,D.value=[],T.value=!0;try{await a(),setTimeout(async()=>{try{await Nt()}catch(t){e.error(t?.message??`地图初始化失败`)}finally{T.value=!1}},200)}catch{T.value=!1}}async function Ft(){if(!E.value.trim()){D.value=[];return}T.value=!0;try{let{data:e}=await x.get(`/map/search`,{params:{keyword:E.value,region:`苏州`}});D.value=e}catch(t){e.error(t?.response?.data?.message??`地图搜索失败`)}finally{T.value=!1}}async function It(e){jt(e.lat,e.lng),await Mt(e.lat,e.lng)}function Lt(){return G.value?(q.lat=G.value.lat,q.lng=G.value.lng,q.address=G.value.address||q.address,ke.value=!1,!0):(e.warning(`请先点击地图或选择搜索结果`),!1)}async function Rt(){try{if(!q.venue_id)return e.warning(`请先选择场馆`),!1;if(!q.title.trim())return e.warning(`请填写活动名称`),!1;let t={venue_id:q.venue_id,title:q.title.trim(),summary:q.summary.trim()||null,quota:0,category:null,start_at:q.start_at||null,end_at:q.end_at||null,address:q.address.trim()||null,contact_phone:q.contact_phone.trim()||null,lat:typeof q.lat==`number`?q.lat:null,lng:typeof q.lng==`number`?q.lng:null,detail_html:q.detail_html||null,cover_image:q.cover_image||null,gallery_media:q.gallery_media,tags:q.tags,reservation_notice:q.reservation_notice||null,open_time:q.open_time||null,sort:Qe()?q.sort:void 0,is_active:q.is_active};return Me.value?(await x.post(`/activities`,t),e.success(`创建活动成功`)):(await x.put(`/activities/${Ne.value}`,t),e.success(`更新活动成功`)),Ye(),w.value=!1,await $(),!0}catch(t){return e.error(t?.response?.data?.message??`保存失败`),!1}}oe(Z,`活动表单有未保存改动,确定要离开吗?`),i(async()=>{await gt().catch(()=>void 0),await $()});function zt(e){O.current=e,$()}async function Bt(t){try{await x.post(`/activities/${t.id}/toggle`),e.success(`状态已切换`),await $()}catch(t){e.error(t?.response?.data?.message??`操作失败`)}}async function Vt(t){try{await x.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 Ht(e){let t=String(e??``).replace(`T`,` `).trim();return t?t.length>=19?t.slice(0,19):t:``}function Ut(e){return{_key:V(),id:typeof e.id==`number`?e.id:void 0,session_name:String(e.session_name??``).trim(),session_start_at:Ht(e.session_start_at),session_end_at:Ht(e.session_end_at),booking_deadline_at:Ht(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 Wt(){return{_key:V(),session_name:``,session_start_at:``,session_end_at:``,booking_deadline_at:``,day_quota:1,booked_count:0}}function Gt(){B.value.push(Wt())}function Kt(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 qt(t){if(!t.start_at||!t.end_at){e.warning(`请先在活动编辑中填写活动开始、结束日期,用于校验各场次时间。`);return}I.value=t,P.value=!0,F.value=!0;try{let{data:e}=await x.get(`/activities/${t.id}/booking-settings`);L.value=e.booking_audience===`group`?`group`:e.booking_audience===`individual`?`individual`:`both`,b.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=[Wt()]:B.value=n.map(e=>Ut(e))}catch(t){e.error(t?.response?.data?.message??`加载场次设置失败`),P.value=!1}finally{F.value=!1}}async function Jt(){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}}Re.value=!0;try{await x.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(`场次设置已保存`),P.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{Re.value=!1}}}return(e,i)=>{let a=s(`a-button`),o=s(`a-space`),u=s(`a-input`),m=s(`a-option`),g=s(`a-select`),x=s(`a-table-column`),S=s(`a-tag`),ne=s(`a-tooltip`),ae=s(`a-popconfirm`),oe=s(`a-table`),A=s(`a-card`),Ne=s(`a-textarea`),M=s(`a-modal`),V=s(`a-form-item`),U=s(`a-date-picker`),W=s(`a-switch`),K=s(`a-input-number`),J=s(`a-upload`),Ue=s(`a-typography-text`),Y=s(`a-form`),We=s(`a-typography-paragraph`),Ke=s(`a-list-item`),qe=s(`a-list`),X=s(`a-alert`),Ye=s(`a-typography-title`),Z=s(`a-radio`),tt=s(`a-radio-group`),Q=s(`a-spin`);return r(),h(p,null,[v(A,{title:`活动管理 / 活动列表`},{extra:c(()=>[v(o,null,{default:c(()=>[v(a,{onClick:$},{default:c(()=>[...i[29]||=[l(`刷新`,-1)]]),_:1}),v(a,{type:`primary`,onClick:_t},{default:c(()=>[...i[30]||=[l(`新增活动`,-1)]]),_:1})]),_:1})]),default:c(()=>[v(o,{style:{"margin-bottom":`12px`},wrap:``},{default:c(()=>[v(u,{modelValue:k.keyword,"onUpdate:modelValue":i[0]||=e=>k.keyword=e,placeholder:`搜索活动名称`,style:{width:`220px`}},null,8,[`modelValue`]),v(g,{modelValue:k.venue_id,"onUpdate:modelValue":i[1]||=e=>k.venue_id=e,"allow-clear":``,placeholder:`筛选场馆`,style:{width:`220px`},disabled:Ze()},{default:c(()=>[(r(!0),h(p,null,y(b.value,e=>(r(),d(m,{key:e.id,value:e.id},{default:c(()=>[l(n(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`,`disabled`]),v(g,{modelValue:k.is_active,"onUpdate:modelValue":i[2]||=e=>k.is_active=e,style:{width:`140px`}},{default:c(()=>[v(m,{value:`all`},{default:c(()=>[...i[31]||=[l(`全部状态`,-1)]]),_:1}),v(m,{value:`1`},{default:c(()=>[...i[32]||=[l(`启用`,-1)]]),_:1}),v(m,{value:`0`},{default:c(()=>[...i[33]||=[l(`停用`,-1)]]),_:1})]),_:1},8,[`modelValue`]),v(g,{modelValue:k.audit_status,"onUpdate:modelValue":i[3]||=e=>k.audit_status=e,style:{width:`130px`},placeholder:`审核状态`},{default:c(()=>[v(m,{value:`all`},{default:c(()=>[...i[34]||=[l(`全部审核`,-1)]]),_:1}),v(m,{value:`approved`},{default:c(()=>[...i[35]||=[l(`已通过`,-1)]]),_:1}),v(m,{value:`pending`},{default:c(()=>[...i[36]||=[l(`待审核`,-1)]]),_:1}),v(m,{value:`rejected`},{default:c(()=>[...i[37]||=[l(`已退回`,-1)]]),_:1})]),_:1},8,[`modelValue`]),v(a,{type:`primary`,onClick:yt},{default:c(()=>[...i[38]||=[l(`查询`,-1)]]),_:1})]),_:1}),v(oe,{class:`list-data-table`,scroll:{x:ee(ie)},data:te.value,loading:C.value,"row-key":`id`,pagination:{current:O.current,pageSize:O.pageSize,total:O.total,showTotal:!0},onPageChange:zt},{columns:c(()=>[v(x,{title:`ID`,"data-index":`id`,width:80,ellipsis:!0,tooltip:!0}),v(x,{title:`活动名称`,"data-index":`title`,width:200,"min-width":160,ellipsis:!0,tooltip:!0}),v(x,{title:`简介`,width:180,"min-width":140,ellipsis:!0,tooltip:!0},{cell:c(({record:e})=>[l(n(e.summary||`-`),1)]),_:1}),v(x,{title:`场馆`,width:160,"min-width":120,ellipsis:!0,tooltip:!0},{cell:c(({record:e})=>[l(n(e.venue?.name||`-`),1)]),_:1}),v(x,{title:`封面`,width:100},{cell:c(({record:e})=>[e.cover_image?(r(),h(`img`,{key:0,src:e.cover_image,style:{width:`60px`,height:`40px`,"object-fit":`cover`,"border-radius":`4px`}},null,8,se)):(r(),h(`span`,ce,`-`))]),_:1}),v(x,{title:`标签`,width:200,"min-width":140,ellipsis:!0,tooltip:!0},{cell:c(({record:e})=>[l(n(ut(e.tags)),1)]),_:1}),v(x,{title:`场次/名额`,width:150,"min-width":130,ellipsis:!0,tooltip:!0},{cell:c(({record:e})=>[l(n(dt(e)),1)]),_:1}),v(x,{title:`开始日期`,width:120,ellipsis:!0,tooltip:!0},{cell:c(({record:e})=>[l(n(e.start_at?H(String(e.start_at)):`-`),1)]),_:1}),v(x,{title:`结束日期`,width:120,ellipsis:!0,tooltip:!0},{cell:c(({record:e})=>[l(n(e.end_at?H(String(e.end_at)):`-`),1)]),_:1}),v(x,{title:`开放时间`,width:180,"min-width":140,ellipsis:!0,tooltip:!0},{cell:c(({record:e})=>[l(n(e.open_time||`-`),1)]),_:1}),v(x,{title:`联系电话`,width:180,"min-width":140,ellipsis:!0,tooltip:!0},{cell:c(({record:e})=>[l(n(e.contact_phone||`-`),1)]),_:1}),v(x,{title:`活动状态`,width:100},{cell:c(({record:e})=>[v(S,{color:it(e.schedule_status)},{default:c(()=>[l(n(rt(e.schedule_status)),1)]),_:2},1032,[`color`])]),_:1}),v(x,{title:`启停状态`,width:100},{cell:c(({record:e})=>[v(S,{color:e.is_active?`green`:`gray`},{default:c(()=>[l(n(e.is_active?`启用`:`停用`),1)]),_:2},1032,[`color`])]),_:1}),v(x,{title:`审核状态`,width:120},{cell:c(({record:e})=>[e.audit_status===`rejected`&&e.audit_remark?(r(),d(ne,{key:0,content:e.audit_remark},{default:c(()=>[v(S,{color:et(e.audit_status)},{default:c(()=>[l(n($e(e.audit_status)),1)]),_:2},1032,[`color`])]),_:2},1032,[`content`])):(r(),d(S,{key:1,color:et(e.audit_status)},{default:c(()=>[l(n($e(e.audit_status)),1)]),_:2},1032,[`color`]))]),_:1}),v(x,{title:`操作`,width:460,fixed:`right`,align:`center`},{cell:c(({record:e})=>[v(o,{wrap:``},{default:c(()=>[v(a,{type:`text`,onClick:t=>vt(e)},{default:c(()=>[...i[39]||=[l(`编辑`,-1)]]),_:1},8,[`onClick`]),v(a,{type:`text`,onClick:t=>qt(e)},{default:c(()=>[...i[40]||=[l(`场次设置`,-1)]]),_:1},8,[`onClick`]),Qe()&&(e.audit_status===`pending`||e.audit_status===`rejected`)?(r(),h(p,{key:0},[v(a,{type:`text`,status:`success`,onClick:t=>at(e)},{default:c(()=>[...i[41]||=[l(`通过`,-1)]]),_:1},8,[`onClick`]),v(a,{type:`text`,status:`danger`,onClick:t=>ot(e)},{default:c(()=>[...i[42]||=[l(`退回`,-1)]]),_:1},8,[`onClick`])],64)):f(``,!0),v(a,{type:`text`,status:`warning`,onClick:t=>Bt(e)},{default:c(()=>[l(n(e.is_active?`停用`:`启用`),1)]),_:2},1032,[`onClick`]),v(ae,{content:`确认删除该活动?`,onOk:t=>Vt(e)},{default:c(()=>[v(a,{type:`text`,status:`danger`},{default:c(()=>[...i[43]||=[l(`删除`,-1)]]),_:1})]),_:1},8,[`onOk`])]),_:2},1024)]),_:1})]),_:1},8,[`scroll`,`data`,`loading`,`pagination`])]),_:1}),v(M,{visible:je.value,"onUpdate:visible":i[5]||=e=>je.value=e,title:`退回活动`,"on-before-ok":st},{default:c(()=>[v(Ne,{modelValue:j.value,"onUpdate:modelValue":i[4]||=e=>j.value=e,placeholder:`退回说明(选填)`,"auto-size":{minRows:3,maxRows:8}},null,8,[`modelValue`])]),_:1},8,[`visible`]),v(M,{visible:w.value,"onUpdate:visible":i[20]||=e=>w.value=e,title:Me.value?`新增活动`:`编辑活动`,width:`70%`,"body-style":Pe,"on-before-cancel":ee(Xe),"confirm-loading":Oe.value,"on-before-ok":Rt},{default:c(()=>[v(Y,{model:q,layout:`vertical`,class:`admin-modal-form`},{default:c(()=>[v(V,{label:`场馆`,required:``},{default:c(()=>[v(g,{"model-value":q.venue_id,disabled:Ze(),onChange:ht},{default:c(()=>[(r(!0),h(p,null,y(b.value,e=>(r(),d(m,{key:e.id,value:e.id},{default:c(()=>[l(n(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`model-value`,`disabled`])]),_:1}),v(V,{label:`活动名称`,required:``},{default:c(()=>[v(u,{modelValue:q.title,"onUpdate:modelValue":i[6]||=e=>q.title=e},null,8,[`modelValue`])]),_:1}),v(V,{label:`开始日期`},{default:c(()=>[v(U,{modelValue:q.start_at,"onUpdate:modelValue":i[7]||=e=>q.start_at=e,format:`YYYY-MM-DD`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1}),v(V,{label:`结束日期`},{default:c(()=>[v(U,{modelValue:q.end_at,"onUpdate:modelValue":i[8]||=e=>q.end_at=e,format:`YYYY-MM-DD`,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1}),v(V,{label:`活动状态`},{extra:c(()=>[...i[44]||=[l(`按起止日自动判断`,-1)]]),default:c(()=>[He.value?(r(),d(S,{key:0,color:it(He.value)},{default:c(()=>[l(n(rt(He.value)),1)]),_:1},8,[`color`])):(r(),h(`span`,le,``))]),_:1}),v(V,{label:`启停状态`},{default:c(()=>[v(W,{modelValue:q.is_active,"onUpdate:modelValue":i[9]||=e=>q.is_active=e},null,8,[`modelValue`])]),_:1}),v(V,{label:`排序`},{default:c(()=>[v(K,{modelValue:q.sort,"onUpdate:modelValue":i[10]||=e=>q.sort=e,min:0,disabled:!Qe()},null,8,[`modelValue`,`disabled`])]),_:1}),v(V,{label:`开放时间`},{default:c(()=>[v(u,{modelValue:q.open_time,"onUpdate:modelValue":i[11]||=e=>q.open_time=e,placeholder:`如:周一至周五 09:00-17:00周末 09:00-18:00`},null,8,[`modelValue`])]),_:1}),v(V,{label:`联系电话`},{default:c(()=>[v(u,{modelValue:q.contact_phone,"onUpdate:modelValue":i[12]||=e=>q.contact_phone=e,placeholder:`选填,前台可点击拨打`},null,8,[`modelValue`])]),_:1}),v(V,{label:`标签`,class:`admin-modal-form__full`},{default:c(()=>[v(o,{style:{width:`100%`}},{default:c(()=>[v(u,{modelValue:Ve.value,"onUpdate:modelValue":i[13]||=e=>Ve.value=e,placeholder:`请输入标签内容`},null,8,[`modelValue`]),v(a,{type:`primary`,onClick:Dt},{default:c(()=>[...i[45]||=[l(`新增标签`,-1)]]),_:1})]),_:1}),_(`div`,ue,[(r(!0),h(p,null,y(q.tags,(e,t)=>(r(),d(S,{key:`${e}-${t}`,closable:``,style:{"margin-bottom":`0`},onClose:e=>Ot(t)},{default:c(()=>[l(n(e),1)]),_:2},1032,[`onClose`]))),128)),q.tags.length?f(``,!0):(r(),h(`span`,de,`暂无标签`))])]),_:1}),v(V,{label:`地址与经纬度`,class:`admin-modal-form__full`},{default:c(()=>[_(`div`,fe,[v(u,{modelValue:q.address,"onUpdate:modelValue":i[14]||=e=>q.address=e,class:`activity-address-coord-row__address`,placeholder:`活动地址`,"allow-clear":``},null,8,[`modelValue`]),v(K,{modelValue:q.lng,"onUpdate:modelValue":i[15]||=e=>q.lng=e,class:`activity-address-coord-row__lng`,precision:7,placeholder:`经度`,"hide-button":``},null,8,[`modelValue`]),v(K,{modelValue:q.lat,"onUpdate:modelValue":i[16]||=e=>q.lat=e,class:`activity-address-coord-row__lat`,precision:7,placeholder:`纬度`,"hide-button":``},null,8,[`modelValue`]),v(a,{type:`primary`,class:`activity-address-coord-row__map`,onClick:Pt},{default:c(()=>[...i[46]||=[l(`地图选点`,-1)]]),_:1})])]),_:1}),v(V,{label:`封面与轮播`,class:`admin-modal-form__full`},{default:c(()=>[_(`div`,pe,[_(`div`,me,[i[50]||=_(`div`,{class:`activity-cover-carousel-row__sub`},`封面图`,-1),v(o,{direction:`vertical`,fill:``,style:{width:`100%`}},{default:c(()=>[v(J,{"auto-upload":!1,"show-file-list":!1,accept:`image/*`,"before-upload":xt,onChange:Ct},{"upload-button":c(()=>[v(a,null,{default:c(()=>[...i[47]||=[l(`上传封面`,-1)]]),_:1})]),_:1}),v(Ue,{type:`secondary`},{default:c(()=>[...i[48]||=[l(`图片尺寸推荐 1200×600`,-1)]]),_:1}),q.cover_image?(r(),d(o,{key:0,direction:`vertical`,align:`start`},{default:c(()=>[_(`img`,{src:q.cover_image,class:`activity-cover-thumb`,onClick:i[17]||=e=>Ge(`image`,q.cover_image)},null,8,he),v(a,{size:`mini`,status:`danger`,onClick:Tt},{default:c(()=>[...i[49]||=[l(`删除封面`,-1)]]),_:1})]),_:1})):f(``,!0)]),_:1})]),_(`div`,ge,[i[54]||=_(`div`,{class:`activity-cover-carousel-row__sub`},`轮播图`,-1),_(`div`,_e,[_(`div`,ve,[v(J,{"auto-upload":!1,"show-file-list":!1,multiple:``,accept:`image/*,video/*`,"before-upload":St,onChange:wt},{"upload-button":c(()=>[v(a,{type:`primary`},{default:c(()=>[...i[51]||=[l(`新增轮播资源`,-1)]]),_:1})]),_:1}),v(Ue,{type:`secondary`,style:{"margin-top":`12px`,display:`block`}},{default:c(()=>[...i[52]||=[l(`图片尺寸推荐 1200×600`,-1)]]),_:1})]),_(`div`,ye,[(r(!0),h(p,null,y(q.gallery_media,(e,n)=>(r(),h(`div`,{key:e.url+n,class:`activity-gallery-item`},[e.type===`image`?(r(),h(`img`,{key:0,src:e.url,class:`activity-gallery-thumb`,onClick:t=>Ge(`image`,e.url)},null,8,be)):(r(),h(`video`,{key:1,src:e.url,controls:``,class:`activity-gallery-thumb activity-gallery-thumb--video`,onClick:t(t=>Ge(`video`,e.url),[`stop`])},null,8,xe)),v(a,{size:`mini`,status:`danger`,onClick:e=>Et(n)},{default:c(()=>[...i[53]||=[l(`删除`,-1)]]),_:1},8,[`onClick`])]))),128))])])])])]),_:1}),v(V,{label:`预约须知`,class:`admin-modal-form__full`},{default:c(()=>[(r(),d(re,{modelValue:q.reservation_notice,"onUpdate:modelValue":i[18]||=e=>q.reservation_notice=e,"editor-options":Je,"field-key":`activity-reservation`,key:`activity-reservation-${Fe.value}`},null,8,[`modelValue`]))]),_:1}),v(V,{label:`活动详情`,class:`admin-modal-form__full`},{default:c(()=>[(r(),d(re,{modelValue:q.detail_html,"onUpdate:modelValue":i[19]||=e=>q.detail_html=e,"editor-options":Je,"field-key":`activity-detail`,"min-height":280,key:`activity-detail-${Fe.value}`},null,8,[`modelValue`]))]),_:1})]),_:1},8,[`model`])]),_:1},8,[`visible`,`title`,`on-before-cancel`,`confirm-loading`]),v(M,{visible:Ie.value,"onUpdate:visible":i[21]||=e=>Ie.value=e,title:`媒体预览`,width:`72%`,footer:!1},{default:c(()=>[Le.value===`image`&&N.value?(r(),h(`img`,{key:0,src:N.value,style:{display:`block`,"max-width":`100%`,"max-height":`72vh`,margin:`0 auto`}},null,8,Se)):Le.value===`video`&&N.value?(r(),h(`video`,{key:1,src:N.value,controls:``,autoplay:``,style:{display:`block`,width:`100%`,"max-height":`72vh`}},null,8,Ce)):f(``,!0)]),_:1},8,[`visible`]),v(M,{visible:ke.value,"onUpdate:visible":i[23]||=e=>ke.value=e,title:`地图选点(腾讯地图)`,width:`70%`,"body-style":Pe,"on-before-ok":Lt},{default:c(()=>[v(o,{style:{"margin-bottom":`12px`,width:`100%`}},{default:c(()=>[v(u,{modelValue:E.value,"onUpdate:modelValue":i[22]||=e=>E.value=e,placeholder:`输入关键词搜索,如:苏州博物馆`,style:{width:`420px`}},null,8,[`modelValue`]),v(a,{type:`primary`,loading:T.value,onClick:Ft},{default:c(()=>[...i[55]||=[l(`搜索`,-1)]]),_:1},8,[`loading`])]),_:1}),_(`div`,we,[_(`div`,{ref_key:`mapContainerRef`,ref:Ae,style:{height:`520px`,flex:`1`,border:`1px solid #e5e6eb`}},null,512),_(`div`,Te,[i[56]||=_(`div`,{style:{"margin-bottom":`8px`,color:`#86909c`}},`搜索结果`,-1),v(qe,{size:`small`},{default:c(()=>[(r(!0),h(p,null,y(D.value,(e,t)=>(r(),d(Ke,{key:t,onClick:t=>It(e)},{default:c(()=>[v(We,{ellipsis:{rows:1}},{default:c(()=>[l(n(e.title),1)]),_:2},1024),v(Ue,{type:`secondary`},{default:c(()=>[l(n(e.address),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1})])]),G.value?(r(),d(X,{key:0,type:`info`,style:{"margin-top":`12px`}},{default:c(()=>[l(` 已选坐标:`+n(G.value.lng)+`, `+n(G.value.lat),1),i[57]||=_(`br`,null,null,-1),l(` 地址:`+n(G.value.address||`-`),1)]),_:1})):f(``,!0)]),_:1},8,[`visible`]),v(M,{visible:P.value,"onUpdate:visible":i[28]||=e=>P.value=e,title:`场次设置`,width:`80%`,"body-style":Pe,footer:!1,"mask-closable":!1},{default:c(()=>[v(Q,{loading:F.value,style:{width:`100%`}},{default:c(()=>[I.value?(r(),h(`div`,Ee,[v(Ye,{heading:6,style:{"margin-top":`0`}},{default:c(()=>[l(`活动:`+n(I.value.title),1)]),_:1}),v(X,{type:`info`,style:{"margin-bottom":`12px`}},{default:c(()=>[l(` 活动开始~结束日:`+n(H(String(I.value.start_at)))+` `+n(H(String(I.value.end_at)))+`。场次的开始/结束仅可选同一天,且不能超出上述日期;预约截止时间不得晚于场次开始;至少保留 1 个场次,每行可「新增」多个场次;删除行前请确保该场次无已占用订单。 `,1)]),_:1}),v(Y,{layout:`vertical`,class:`admin-modal-form`},{default:c(()=>[v(V,{label:`预约方式`,required:``,class:`admin-modal-form__full`},{default:c(()=>[v(tt,{modelValue:L.value,"onUpdate:modelValue":i[24]||=e=>L.value=e,direction:`vertical`},{default:c(()=>[v(Z,{value:`individual`,disabled:Be.value},{default:c(()=>[...i[58]||=[l(`个人:仅可预约 1 人(填写个人信息)。`,-1)]]),_:1},8,[`disabled`]),v(Z,{value:`group`},{default:c(()=>[...i[59]||=[l(`团体:填写领队信息 + 团体人数(人数范围见下方设置,含联系人本人)。`,-1)]]),_:1}),v(Z,{value:`both`,disabled:Be.value},{default:c(()=>[...i[60]||=[l(`个人+团体:个人为 1 人;团体人数范围见下方设置(含联系人本人)。`,-1)]]),_:1},8,[`disabled`])]),_:1},8,[`modelValue`]),Be.value?(r(),d(X,{key:0,type:`warning`,style:{"margin-top":`8px`}},{default:c(()=>[...i[61]||=[l(` 该场馆预约类型为「仅团队」,场次设置只能选择团体。 `,-1)]]),_:1})):f(``,!0)]),_:1}),L.value===`group`||L.value===`both`?(r(),d(V,{key:0,label:`单笔预约人数限制`,required:``,class:`admin-modal-form__full`},{default:c(()=>[v(o,null,{default:c(()=>[v(K,{modelValue:R.value,"onUpdate:modelValue":i[25]||=e=>R.value=e,min:1,precision:0,style:{width:`180px`}},null,8,[`modelValue`]),i[62]||=_(`span`,null,`最小人数`,-1),v(K,{modelValue:z.value,"onUpdate:modelValue":i[26]||=e=>z.value=e,min:1,precision:0,style:{width:`180px`}},null,8,[`modelValue`]),i[63]||=_(`span`,null,`最大人数`,-1)]),_:1}),i[64]||=_(`div`,{style:{"margin-top":`6px`,color:`var(--color-text-3)`}},`人数包含领队/联系人本人;最大人数需 ≥ 最小人数。H5 团体预约将按此范围校验。`,-1)]),_:1})):f(``,!0),L.value===`group`||L.value===`both`?(r(),d(X,{key:1,type:`info`,class:`admin-modal-form__full`,style:{"margin-bottom":`12px`}},{default:c(()=>[...i[65]||=[l(` 团体人数与单场「总名额(人数)」无直接换算关系;单场总名额为可预约的占用名额上限。 `,-1)]]),_:1})):f(``,!0),v(V,{label:`总名额(各场次数之和)`},{default:c(()=>[v(K,{"model-value":ze.value,disabled:``,style:{width:`200px`}},null,8,[`model-value`]),i[66]||=_(`span`,{style:{"margin-left":`8px`,color:`var(--color-text-3)`}},`保存时写入活动「总名额」`,-1)]),_:1})]),_:1}),v(o,{style:{"margin-bottom":`8px`}},{default:c(()=>[v(a,{type:`primary`,onClick:Gt},{default:c(()=>[...i[67]||=[l(`新增场次`,-1)]]),_:1})]),_:1}),v(oe,{data:B.value,pagination:!1,"row-key":`_key`,bordered:{cell:!0}},{columns:c(()=>[v(x,{title:`场次名称`,width:160,"min-width":120},{cell:c(({record:e})=>[v(u,{modelValue:e.session_name,"onUpdate:modelValue":t=>e.session_name=t,placeholder:`必填`,"allow-clear":``,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),v(x,{title:`场次开始`,width:200},{cell:c(({record:e})=>[v(U,{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}),v(x,{title:`场次结束`,width:200},{cell:c(({record:e})=>[v(U,{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}),v(x,{title:`预约截止`,width:200},{title:c(()=>[...i[68]||=[_(`span`,null,`预约截止`,-1),_(`div`,{style:{"font-weight":`normal`,"font-size":`12px`,color:`var(--color-text-3)`,"margin-top":`2px`}},`不能晚于场次开始`,-1)]]),cell:c(({record:e})=>[v(U,{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}),v(x,{title:`总名额`,width:120},{cell:c(({record:e})=>[v(K,{modelValue:e.day_quota,"onUpdate:modelValue":t=>e.day_quota=t,min:1,precision:0,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),v(x,{title:`已占用`,width:80},{cell:c(({record:e})=>[l(n(e.booked_count??0),1)]),_:1}),v(x,{title:`操作`,width:90,fixed:`right`,align:`center`},{cell:c(({record:e})=>[v(a,{type:`text`,status:`danger`,disabled:(e.booked_count??0)>0,onClick:t=>Kt(e)},{default:c(()=>[...i[69]||=[l(`删除`,-1)]]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1},8,[`data`])])):f(``,!0)]),_:1},8,[`loading`]),_(`div`,De,[v(o,null,{default:c(()=>[v(a,{onClick:i[27]||=e=>P.value=!1},{default:c(()=>[...i[70]||=[l(`取消`,-1)]]),_:1}),v(a,{type:`primary`,loading:Re.value,disabled:F.value,onClick:Jt},{default:c(()=>[...i[71]||=[l(`保存`,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1})])]),_:1},8,[`visible`])],64)}}}),[[`__scopeId`,`data-v-e9e0d75c`]]);export{C as default};