|
|
import{n as e,st as t}from"./axios-CiYFffbI.js";import{I as n,N as r,O as i,P as a,V as o,Y as s,_ as c,d as l,f as u,i as d,it as f,kt as p,l as m,nt as h,p as g,u as _,ut as ee,v,y as te,z as y}from"./runtime-core.esm-bundler-CnFWH3R5.js";import{n as b,o as x,s as S}from"./index-u9L2EJ4o.js";import{t as ne}from"./RichEditorField-C3G_ZsLp.js";import{t as re}from"./listTable-Dphyh0Bn.js";import{t as C}from"./mediaUrl-B7aD5nK5.js";var ie={style:{"margin-top":`8px`,width:`100%`,display:`flex`,"flex-wrap":`wrap`,gap:`8px`}},ae={key:0,style:{color:`#86909c`}},oe={class:`activity-cover-carousel-wrap`},se={class:`activity-cover-carousel-row__col`},ce=[`src`],le={class:`activity-cover-carousel-row__col`},ue={style:{display:`flex`,"flex-direction":`column`,"align-items":`flex-start`,width:`100%`}},de={class:`activity-gallery-grid`},fe=[`src`,`onClick`],pe=[`src`,`onClick`],me={class:`tg-venue-block`},he={class:`tg-venue-table-scroll`},ge={class:`tg-venue-actions`},_e={class:`tg-venue-contact-row`},ve={class:`tg-venue-contact-row__col`},ye={class:`tg-venue-contact-row__col`},be={class:`tg-venue-contact-row__col`},xe={class:`activity-address-coord-row`},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:1},w=x(te({__name:`TicketGrabList`,setup(te){let x=f(null),w=f(!1),De=f([]),T=f([]),E=h({current:1,pageSize:10,total:0}),Oe=f(``),D=f(!1),ke=f(!1),O=f(null),k=h({title:``,tags:[],start_at:``,end_at:``,booking_start_at:``,booking_end_at:``,daily_release_start_time:`10:00`,daily_release_end_time:`23:59`,age_limit_start:``,age_limit_end:``,booking_audience:`all`,reservation_notice:``,detail_html:``,cover_image:``,gallery_media:[],is_active:!0,venues:[]}),Ae=f(0),je={maxHeight:`70vh`,overflow:`auto`},Me={maxHeight:`70vh`,overflow:`auto`},A=f(null),Ne=f(0),j=f(!1),M=m(()=>{let e=A.value;return e?k.venues.find(t=>t._key===e)??null:null}),N=f(!1),Pe=f(!1),Fe=f(!1),P=f(null),F=f(null),I=f({}),L=f(``),R=f(!1),z=f(!1),B=f(``),V=f([]),Ie=f(null),H=f(null),U=f(null),W={lat:31.299379,lng:120.585315},G=null,K=null,Le=f(!1),Re=f(`image`),q=f(``);function J(){return`tgrv-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function Y(){return{_key:J(),venue_id:void 0,venue_total_quota:0,opening_hours:``,address:``,lat:void 0,lng:void 0,unit_name:``,contact_name:``,contact_phone:``,qr_verify_method:``,verify_contact_info:``,detail_html:``}}function X(e){if(e==null||e===``)return;let t=typeof e==`number`?e:parseFloat(String(e).trim());return Number.isFinite(t)?t:void 0}function ze(e){return{_key:J(),venue_id:typeof e.venue_id==`number`?e.venue_id:Number(e.venue_id)||void 0,venue_total_quota:Math.max(0,Math.floor(Number(e.venue_total_quota)||0)),opening_hours:String(e.opening_hours??``),address:String(e.address??``),lat:X(e.lat),lng:X(e.lng),unit_name:String(e.unit_name??``),contact_name:String(e.contact_name??``),contact_phone:String(e.contact_phone??``),qr_verify_method:String(e.qr_verify_method??``),verify_contact_info:String(e.verify_contact_info??``),detail_html:String(e.detail_html??``)}}function Be(e){return!!(e.opening_hours?.trim()||e.address?.trim()||e.unit_name?.trim()||e.contact_name?.trim()||e.contact_phone?.trim()||e.qr_verify_method?.trim()||e.verify_contact_info?.trim()||e.detail_html&&e.detail_html.trim()||typeof e.lat==`number`||typeof e.lng==`number`)}function Ve(e){if(e)return T.value.find(t=>t.id===e)}function He(e,t){let n=Ve(t);if(!n)return;e.opening_hours=n.open_time||``,e.address=n.address||``,e.lat=X(n.lat),e.lng=X(n.lng),e.unit_name=n.unit_name||``;let r=n.contact_phone||``;e.contact_phone=r,e.qr_verify_method=``,e.verify_contact_info=r,e.detail_html=n.detail_html?String(n.detail_html):``}function Ue(e,t){if(t==null){e.venue_id=void 0;return}let n=e.venue_id;if(n===t)return;let r=()=>{e.venue_id=t,He(e,t),i(()=>vt(e))};if(n==null||!Be(e)){r();return}S.confirm({title:`更换场馆`,content:`将使用新场馆的默认信息覆盖本行中已填的开放说明、地址、联系等,是否继续?`,onOk:r})}async function We(){let{data:e}=await b.get(`/me`);x.value=e}function Ge(){return x.value?.role===`super_admin`}function Ke(){let t=L.value.trim();if(!t){e.warning(`请输入标签内容`);return}if(k.tags.includes(t)){e.warning(`标签已存在`);return}k.tags=[...k.tags,t],L.value=``}function qe(e){let t=[...k.tags];t.splice(e,1),k.tags=t}function Je(e,t){if(e==null||e===``)return t;if(typeof e==`string`&&/^\d{1,2}:\d{2}/.test(e)){let t=e.trim().split(`:`),n=Math.min(23,Math.max(0,parseInt(t[0]||`0`,10)||0)),r=Math.min(59,Math.max(0,parseInt(t[1]||`0`,10)||0));return`${String(n).padStart(2,`0`)}:${String(r).padStart(2,`0`)}`}let n=e;if(typeof n?.format==`function`)try{return n.format(`HH:mm`)}catch{return t}return t}function Ye(e,t){if(e&&/^https?:\/\//i.test(e))return e;let n=t||e||``;if(!n)return``;let r=n.replace(/^\/+/,``);return`${window.location.origin}/storage/${r}`}async function Z(e){let t=new FormData;t.append(`file`,e);let{data:n}=await b.post(`/upload`,t);return Ye(n?.url,n?.path)}function Xe(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 Ze(t){try{let n=Xe(t);if(!n)return!1;k.cover_image=await Z(n),k.cover_image=C(k.cover_image),e.success(`封面上传成功`)}catch(t){e.error(t?.response?.data?.message??`封面上传失败`)}return!1}async function Qe(t){try{let n=Xe(t);if(!n)return!1;let r=C(await Z(n)),i=n.type.startsWith(`video/`);k.gallery_media.push({type:i?`video`:`image`,url:r}),e.success(`轮播资源上传成功`)}catch(t){e.error(t?.response?.data?.message??`轮播资源上传失败`)}return!1}function $e(...e){Ze(e)}function et(...e){Qe(e)}function tt(){k.cover_image=``}function nt(e){k.gallery_media.splice(e,1)}function rt(e,t){t&&(Re.value=e,q.value=t,Le.value=!0)}function it(){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 Z(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 at(){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 Z(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 ot={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:it,video:at}}},placeholder:`请输入内容`};function st(){return`CRFBZ-NTART-YU4XX-LCDGK-3J456-VKBK2`}async function ct(){if(window.TMap)return;let e=st();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 lt(e,t){let n=window.TMap;G&&(K&&K.setMap(null),K=new n.MultiMarker({map:G,styles:{marker:new n.MarkerStyle({width:24,height:35})},geometries:[{id:`picked`,styleId:`marker`,position:new n.LatLng(e,t)}]}),G.setCenter(new n.LatLng(e,t)))}async function ut(e,t){let{data:n}=await b.get(`/map/reverse-geocode`,{params:{lat:e,lng:t}});U.value={lat:e,lng:t,address:n.address||``}}function dt(){return H.value}async function ft(){if(await ct(),!Ie.value){e.error(`地图容器未就绪,请重试`);return}let t=window.TMap,n=dt(),r=typeof n?.lat==`number`?n.lat:W.lat,i=typeof n?.lng==`number`?n.lng:W.lng,a=new t.LatLng(r,i);G?G.setCenter(a):(G=new t.Map(Ie.value,{center:a,zoom:13}),G.on(`click`,async e=>{let t=Number(e.latLng.getLat().toFixed(6)),n=Number(e.latLng.getLng().toFixed(6));lt(t,n),await ut(t,n)})),typeof n?.lat==`number`&&typeof n?.lng==`number`?(lt(n.lat,n.lng),U.value={lat:n.lat,lng:n.lng,address:n.address||``}):U.value=null}async function pt(t){H.value=t,R.value=!0,B.value=``,V.value=[],z.value=!0;try{await i(),setTimeout(async()=>{try{await ft()}catch(t){e.error(t?.message??`地图初始化失败`)}finally{z.value=!1}},200)}catch{z.value=!1}}async function mt(){if(!B.value.trim()){V.value=[];return}z.value=!0;try{let{data:e}=await b.get(`/map/search`,{params:{keyword:B.value,region:`苏州`}});V.value=e}catch(t){e.error(t?.response?.data?.message??`地图搜索失败`)}finally{z.value=!1}}async function ht(e){lt(e.lat,e.lng),await ut(e.lat,e.lng)}function gt(){if(!U.value)return e.warning(`请先点击地图或选择搜索结果`),!1;let t=H.value;return t&&(t.lat=U.value.lat,t.lng=U.value.lng,t.address=U.value.address||t.address),R.value=!1,H.value=null,!0}function _t(){H.value=null}a(()=>{if(G){try{G.destroy?.()}catch{}G=null}K=null});function vt(e){A.value=e._key,Ne.value+=1,j.value=!0}function Q(){j.value=!1,A.value=null}function yt(e){return T.value.find(t=>t.id===e)?.name??`场馆#${e}`}function bt(e){return e===`not_started`?`未开始`:e===`ongoing`?`进行中`:e===`ended`?`已结束`:e??`-`}function xt(e,t){return e?e.length<=t?e:`${e.slice(0,t)}…`:`—`}function St(){k.venues.push(Y())}function Ct(t){if(k.venues.length<=1){e.warning(`至少保留一个场馆`);return}A.value===t._key&&Q(),k.venues=k.venues.filter(e=>e._key!==t._key)}function wt(){Ae.value+=1}function Tt(){k.title=``,k.tags=[],L.value=``,k.start_at=``,k.end_at=``,k.booking_start_at=``,k.booking_end_at=``,k.daily_release_start_time=`10:00`,k.daily_release_end_time=`23:59`,k.age_limit_start=``,k.age_limit_end=``,k.booking_audience=`all`,k.reservation_notice=``,k.detail_html=``,k.cover_image=``,k.gallery_media=[],k.is_active=!0,k.venues=[Y()]}async function Et(){let{data:e}=await b.get(`/venues`,{params:{page_size:500}}),t=e.data??e;T.value=Array.isArray(t)?t:[]}async function $(){w.value=!0;try{let{data:e}=await b.get(`/ticket-grab-events`,{params:{page:E.current,page_size:E.pageSize,keyword:Oe.value||void 0}});De.value=e.data,E.total=e.total}catch(t){e.error(t?.response?.data?.message??`加载失败`)}finally{w.value=!1}}function Dt(){O.value=null,Tt(),wt(),Q(),D.value=!0}async function Ot(t){O.value=t.id,Tt();try{let{data:e}=await b.get(`/ticket-grab-events/${t.id}`);k.title=e.title??``,k.tags=Array.isArray(e.tags)?[...e.tags]:[],L.value=``,k.start_at=e.start_at?String(e.start_at).slice(0,10):``,k.end_at=e.end_at?String(e.end_at).slice(0,10):``,k.booking_start_at=e.booking_start_at?String(e.booking_start_at).slice(0,10):``,k.booking_end_at=e.booking_end_at?String(e.booking_end_at).slice(0,10):``,k.daily_release_start_time=e.daily_release_start_time??`10:00`,k.daily_release_end_time=e.daily_release_end_time??`23:59`,k.age_limit_start=e.age_limit_start?String(e.age_limit_start).slice(0,10):``,k.age_limit_end=e.age_limit_end?String(e.age_limit_end).slice(0,10):``,k.booking_audience=e.booking_audience??`all`,k.reservation_notice=e.reservation_notice??``,k.detail_html=e.detail_html??``;let n=e.cover_image;k.cover_image=n?C(String(n)):``;let r=e.gallery_media;k.gallery_media=Array.isArray(r)?r.map(e=>({...e,url:C(e.url)})):[],k.is_active=!!e.is_active,wt();let i=e.event_venue_pivots??e.eventVenuePivots??[],a=(Array.isArray(i)?i:[]).map(e=>ze(e));k.venues=a.length?a:[Y()],Q(),D.value=!0}catch(t){e.error(t?.response?.data?.message??`加载详情失败`)}}function kt(){return k.venues.filter(e=>e.venue_id!=null&&e.venue_total_quota>=0).map(e=>({venue_id:e.venue_id,venue_total_quota:e.venue_total_quota,opening_hours:e.opening_hours||void 0,address:e.address||void 0,lat:e.lat,lng:e.lng,unit_name:e.unit_name||void 0,contact_name:e.contact_name||void 0,contact_phone:e.contact_phone||void 0,qr_verify_method:e.qr_verify_method||void 0,verify_contact_info:e.verify_contact_info||void 0,detail_html:e.detail_html||void 0}))}function At(e){return/^\d{1,2}:\d{2}$/.test(String(e||``).trim())}async function jt(){if(!k.title.trim())return e.warning(`请填写名称`),!1;if(!k.start_at)return e.warning(`请填写活动开始日`),!1;if(!k.end_at)return e.warning(`请填写活动结束日`),!1;if(!k.booking_start_at)return e.warning(`请填写预约开始日`),!1;if(!k.booking_end_at)return e.warning(`请填写预约结束日`),!1;let t=String(k.daily_release_start_time||``).trim(),n=String(k.daily_release_end_time||``).trim();if(!At(t))return e.warning(`请填写每日放票开始时间`),!1;if(!At(n))return e.warning(`请填写每日放票结束时间`),!1;if(k.booking_audience!==`all`&&k.booking_audience!==`school_age`)return e.warning(`请选择预约人群`),!1;let r=kt();if(!r.length)return e.warning(`请至少选择一个场馆并填写放票数`),!1;let i={title:k.title.trim(),start_at:k.start_at||null,end_at:k.end_at||null,booking_start_at:k.booking_start_at||null,booking_end_at:k.booking_end_at||null,daily_release_start_time:Je(k.daily_release_start_time,`10:00`),daily_release_end_time:Je(k.daily_release_end_time,`23:59`),age_limit_start:k.age_limit_start||null,age_limit_end:k.age_limit_end||null,booking_audience:k.booking_audience,cover_image:k.cover_image||null,gallery_media:k.gallery_media.length?k.gallery_media:void 0,is_active:k.is_active,reservation_notice:k.reservation_notice||null,detail_html:k.detail_html||null,tags:k.tags.length?k.tags:void 0,venues:r};ke.value=!0;try{return O.value?(await b.put(`/ticket-grab-events/${O.value}`,i),e.success(`已保存`)):(await b.post(`/ticket-grab-events`,i),e.success(`已创建`)),D.value=!1,await $(),!0}catch(t){return e.error(t?.response?.data?.message??`保存失败`),!1}finally{ke.value=!1}}async function Mt(t){try{await b.post(`/ticket-grab-events/${t.id}/toggle`),e.success(`已更新`),await $()}catch(t){e.error(t?.response?.data?.message??`操作失败`)}}async function Nt(t){try{await b.delete(`/ticket-grab-events/${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??t?.message??`删除失败`)}}async function Pt(t){P.value=t.id,N.value=!0,Pe.value=!0,F.value=null,I.value={};try{let{data:e}=await b.get(`/ticket-grab-events/${t.id}/release-config`);F.value=e;for(let t of e.venues??[]){let e=t.venue_id;I.value[e]={};for(let n of t.release_days??[])I.value[e][n.release_date]=n.day_quota}}catch(t){e.error(t?.response?.data?.message??`加载放票配置失败`),N.value=!1}finally{Pe.value=!1}}async function Ft(){if(!F.value||!P.value)return;let t=[];for(let e of F.value.venues??[]){let n=[],r=I.value[e.venue_id]??{};for(let t of e.release_days??[]){let e=r[t.release_date]??t.day_quota;n.push({date:t.release_date,day_quota:e})}t.push({venue_id:e.venue_id,days:n})}Fe.value=!0;try{await b.put(`/ticket-grab-events/${P.value}/release-config`,{venue_day_quotas:t}),e.success(`放票日配置已保存`),N.value=!1}catch(t){let n=t?.response?.data?.message;t?.response?.data?.errors?S.error({title:`校验失败`,content:JSON.stringify(t.response.data.errors)}):e.error(n??`保存失败`)}finally{Fe.value=!1}}return r(async()=>{await Promise.all([We().catch(()=>void 0),Et()]),await $()}),(e,r)=>{let i=o(`a-input`),a=o(`a-button`),f=o(`a-space`),m=o(`a-table-column`),h=o(`a-tag`),te=o(`a-popconfirm`),b=o(`a-table`),x=o(`a-form-item`),S=o(`a-date-picker`),C=o(`a-time-picker`),A=o(`a-option`),P=o(`a-select`),H=o(`a-switch`),W=o(`a-upload`),G=o(`a-typography-text`),K=o(`a-input-number`),J=o(`a-form`),Y=o(`a-modal`),X=o(`a-typography-paragraph`),ze=o(`a-list-item`),Be=o(`a-list`),Ve=o(`a-alert`),He=o(`a-spin`),We=o(`a-tab-pane`),Ye=o(`a-tabs`),Z=o(`a-card`);return n(),l(Z,{title:`抢票管理 / 抢票列表`,bordered:!1},{default:s(()=>[v(f,{direction:`vertical`,fill:``},{default:s(()=>[v(f,{wrap:``,size:12},{default:s(()=>[v(i,{modelValue:Oe.value,"onUpdate:modelValue":r[0]||=e=>Oe.value=e,placeholder:`按名称搜索`,"allow-clear":``,style:{width:`200px`}},null,8,[`modelValue`]),v(a,{type:`primary`,onClick:r[1]||=()=>(E.current=1,$())},{default:s(()=>[...r[36]||=[c(`查询`,-1)]]),_:1}),v(a,{type:`primary`,onClick:Dt},{default:s(()=>[...r[37]||=[c(`新建抢票`,-1)]]),_:1}),v(a,{onClick:$},{default:s(()=>[...r[38]||=[c(`刷新`,-1)]]),_:1})]),_:1}),v(b,{class:`list-data-table`,scroll:{x:ee(re)},data:De.value,loading:w.value,"row-key":`id`,pagination:{current:E.current,pageSize:E.pageSize,total:E.total,showTotal:!0,onChange:e=>{E.current=e,$()},onPageSizeChange:e=>{E.pageSize=e,E.current=1,$()}}},{columns:s(()=>[v(m,{title:`ID`,"data-index":`id`,width:72}),v(m,{title:`名称`,"data-index":`title`,width:120,"min-width":96,ellipsis:!0,tooltip:!0}),v(m,{title:`标签`,width:120,ellipsis:!0,tooltip:!0},{cell:s(({record:e})=>[c(p((e.tags||[]).length?(e.tags||[]).join(`、`):`—`),1)]),_:1}),v(m,{title:`场馆`,width:200,ellipsis:!0,tooltip:!0},{cell:s(({record:e})=>[c(p((e.venues||[]).map(e=>e.name).join(`、`)||`-`),1)]),_:1}),v(m,{title:`活动状态`,width:96},{cell:s(({record:e})=>[c(p(bt(e.schedule_status)),1)]),_:1}),v(m,{title:`放票总数`,width:88},{cell:s(({record:e})=>[c(p(e.total_quota??0),1)]),_:1}),v(m,{title:`已约`,width:72},{cell:s(({record:e})=>[c(p(e.registered_count??0),1)]),_:1}),v(m,{title:`启停`,width:80},{cell:s(({record:e})=>[v(h,{color:e.is_active?`green`:`red`},{default:s(()=>[c(p(e.is_active?`开`:`关`),1)]),_:2},1032,[`color`])]),_:1}),v(m,{title:`审核`,width:88},{cell:s(({record:e})=>[e.audit_status===`pending`?(n(),l(h,{key:0,color:`orangered`},{default:s(()=>[...r[39]||=[c(`待审`,-1)]]),_:1})):e.audit_status===`rejected`?(n(),l(h,{key:1,color:`red`},{default:s(()=>[...r[40]||=[c(`驳回`,-1)]]),_:1})):(n(),l(h,{key:2,color:`green`},{default:s(()=>[...r[41]||=[c(`通过`,-1)]]),_:1}))]),_:1}),v(m,{title:`操作`,width:156,fixed:`right`,align:`center`},{cell:s(({record:e})=>[v(f,{size:2,class:`tg-list-actions`},{default:s(()=>[v(a,{type:`text`,size:`small`,onClick:t=>Ot(e)},{default:s(()=>[...r[42]||=[c(`编辑`,-1)]]),_:1},8,[`onClick`]),v(a,{type:`text`,size:`small`,onClick:t=>Pt(e)},{default:s(()=>[...r[43]||=[c(`放票`,-1)]]),_:1},8,[`onClick`]),v(a,{type:`text`,size:`small`,onClick:t=>Mt(e)},{default:s(()=>[...r[44]||=[c(`切换`,-1)]]),_:1},8,[`onClick`]),Ge()?(n(),l(te,{key:0,content:`确认删除?无预约时方可删除`,onOk:t=>Nt(e)},{default:s(()=>[v(a,{type:`text`,size:`small`,status:`danger`},{default:s(()=>[...r[45]||=[c(`删除`,-1)]]),_:1})]),_:1},8,[`onOk`])):u(``,!0)]),_:2},1024)]),_:1})]),_:1},8,[`scroll`,`data`,`loading`,`pagination`])]),_:1}),v(Y,{visible:D.value,"onUpdate:visible":r[17]||=e=>D.value=e,title:O.value?`编辑抢票`:`新建抢票`,width:`70%`,"body-style":je,"ok-loading":ke.value,"unmount-on-close":``,"on-before-ok":jt,onCancel:r[18]||=e=>D.value=!1},{default:s(()=>[v(J,{model:k,layout:`vertical`,class:`admin-modal-form`},{default:s(()=>[v(x,{label:`名称`,required:``},{default:s(()=>[v(i,{modelValue:k.title,"onUpdate:modelValue":r[2]||=e=>k.title=e},null,8,[`modelValue`])]),_:1}),v(x,{label:`活动开始日`,required:``},{default:s(()=>[v(S,{modelValue:k.start_at,"onUpdate:modelValue":r[3]||=e=>k.start_at=e,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1}),v(x,{label:`活动结束日`,required:``},{default:s(()=>[v(S,{modelValue:k.end_at,"onUpdate:modelValue":r[4]||=e=>k.end_at=e,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1}),v(x,{label:`预约开始日`,required:``},{default:s(()=>[v(S,{modelValue:k.booking_start_at,"onUpdate:modelValue":r[5]||=e=>k.booking_start_at=e,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1}),v(x,{label:`预约结束日`,required:``},{default:s(()=>[v(S,{modelValue:k.booking_end_at,"onUpdate:modelValue":r[6]||=e=>k.booking_end_at=e,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1}),v(x,{label:`每日放票开始`,required:``},{default:s(()=>[v(C,{"model-value":k.daily_release_start_time,format:`HH:mm`,style:{width:`100%`},onChange:r[7]||=e=>k.daily_release_start_time=Je(e,`10:00`)},null,8,[`model-value`])]),_:1}),v(x,{label:`每日放票结束`,required:``},{default:s(()=>[v(C,{"model-value":k.daily_release_end_time,format:`HH:mm`,style:{width:`100%`},onChange:r[8]||=e=>k.daily_release_end_time=Je(e,`23:59`)},null,8,[`model-value`])]),_:1}),v(x,{label:`预约人群`,required:``},{default:s(()=>[v(P,{modelValue:k.booking_audience,"onUpdate:modelValue":r[9]||=e=>k.booking_audience=e,placeholder:`请选择`},{default:s(()=>[v(A,{value:`all`},{default:s(()=>[...r[46]||=[c(`全部人员`,-1)]]),_:1}),v(A,{value:`school_age`},{default:s(()=>[...r[47]||=[c(`学龄内学生`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1}),v(x,{label:`年龄限制(出生起)`,extra:`按身份证出生日期,可选。仅填下限时须不早于该日;上下均空表示不限制`},{default:s(()=>[v(S,{modelValue:k.age_limit_start,"onUpdate:modelValue":r[10]||=e=>k.age_limit_start=e,"value-format":`YYYY-MM-DD`,"allow-clear":``,style:{width:`100%`},placeholder:`选填`},null,8,[`modelValue`])]),_:1}),v(x,{label:`年龄限制(出生止)`,extra:`选填。与上项都空则不限;两值均有则为闭区间`},{default:s(()=>[v(S,{modelValue:k.age_limit_end,"onUpdate:modelValue":r[11]||=e=>k.age_limit_end=e,"value-format":`YYYY-MM-DD`,"allow-clear":``,style:{width:`100%`},placeholder:`选填`},null,8,[`modelValue`])]),_:1}),v(x,{label:`启停`,extra:`活动是否对前台开放`},{default:s(()=>[v(H,{modelValue:k.is_active,"onUpdate:modelValue":r[12]||=e=>k.is_active=e},null,8,[`modelValue`])]),_:1}),v(x,{label:`标签`,class:`admin-modal-form__full`},{default:s(()=>[v(f,{style:{width:`100%`}},{default:s(()=>[v(i,{modelValue:L.value,"onUpdate:modelValue":r[13]||=e=>L.value=e,placeholder:`请输入标签内容`,onPressEnter:Ke},null,8,[`modelValue`]),v(a,{type:`primary`,onClick:Ke},{default:s(()=>[...r[48]||=[c(`新增标签`,-1)]]),_:1})]),_:1}),_(`div`,ie,[(n(!0),g(d,null,y(k.tags,(e,t)=>(n(),l(h,{key:`${e}-${t}`,closable:``,style:{"margin-bottom":`0`},onClose:e=>qe(t)},{default:s(()=>[c(p(e),1)]),_:2},1032,[`onClose`]))),128)),k.tags.length?u(``,!0):(n(),g(`span`,ae,`暂无标签`))])]),_:1}),v(x,{label:`封面与轮播`,class:`admin-modal-form__full`},{default:s(()=>[_(`div`,oe,[_(`div`,se,[r[52]||=_(`div`,{class:`activity-cover-carousel-row__sub`},`封面图`,-1),v(f,{direction:`vertical`,fill:``,style:{width:`100%`}},{default:s(()=>[v(W,{"auto-upload":!1,"show-file-list":!1,accept:`image/*`,"before-upload":Ze,onChange:$e},{"upload-button":s(()=>[v(a,null,{default:s(()=>[...r[49]||=[c(`上传封面`,-1)]]),_:1})]),_:1}),v(G,{type:`secondary`},{default:s(()=>[...r[50]||=[c(`图片尺寸推荐 1200×600`,-1)]]),_:1}),k.cover_image?(n(),l(f,{key:0,direction:`vertical`,align:`start`},{default:s(()=>[_(`img`,{src:k.cover_image,class:`activity-cover-thumb`,onClick:r[14]||=e=>rt(`image`,k.cover_image)},null,8,ce),v(a,{size:`mini`,status:`danger`,onClick:tt},{default:s(()=>[...r[51]||=[c(`删除封面`,-1)]]),_:1})]),_:1})):u(``,!0)]),_:1})]),_(`div`,le,[r[56]||=_(`div`,{class:`activity-cover-carousel-row__sub`},`轮播图`,-1),_(`div`,ue,[v(W,{"auto-upload":!1,"show-file-list":!1,multiple:``,accept:`image/*,video/*`,"before-upload":Qe,onChange:et},{"upload-button":s(()=>[v(a,{type:`primary`},{default:s(()=>[...r[53]||=[c(`新增轮播资源`,-1)]]),_:1})]),_:1}),v(G,{type:`secondary`,style:{"margin-top":`12px`,display:`block`}},{default:s(()=>[...r[54]||=[c(`图片尺寸推荐 1200×600`,-1)]]),_:1}),_(`div`,de,[(n(!0),g(d,null,y(k.gallery_media,(e,i)=>(n(),g(`div`,{key:e.url+i,class:`activity-gallery-item`},[e.type===`image`?(n(),g(`img`,{key:0,src:e.url,class:`activity-gallery-thumb`,onClick:t=>rt(`image`,e.url)},null,8,fe)):(n(),g(`video`,{key:1,src:e.url,controls:``,class:`activity-gallery-thumb activity-gallery-thumb--video`,onClick:t(t=>rt(`video`,e.url),[`stop`])},null,8,pe)),v(a,{size:`mini`,status:`danger`,onClick:e=>nt(i)},{default:s(()=>[...r[55]||=[c(`删除`,-1)]]),_:1},8,[`onClick`])]))),128))])])])])]),_:1}),v(x,{label:`预约须知`,class:`admin-modal-form__full`},{default:s(()=>[(n(),l(ne,{modelValue:k.reservation_notice,"onUpdate:modelValue":r[15]||=e=>k.reservation_notice=e,"editor-options":ot,"field-key":`tg-reservation`,key:`tg-r-${Ae.value}`},null,8,[`modelValue`]))]),_:1}),v(x,{label:`活动详情`,class:`admin-modal-form__full`},{default:s(()=>[(n(),l(ne,{modelValue:k.detail_html,"onUpdate:modelValue":r[16]||=e=>k.detail_html=e,"editor-options":ot,"field-key":`tg-detail`,"min-height":280,key:`tg-d-${Ae.value}`},null,8,[`modelValue`]))]),_:1}),v(x,{label:`参与场馆与放票`,required:``,class:`admin-modal-form__full`},{default:s(()=>[_(`div`,me,[v(a,{type:`primary`,class:`tg-venue-block__add`,onClick:St},{default:s(()=>[...r[57]||=[c(`新增场馆`,-1)]]),_:1}),_(`div`,he,[v(b,{class:`tg-venue-table`,data:k.venues,pagination:!1,"row-key":`_key`,size:`small`,bordered:{cell:!0},scroll:{x:1e3}},{columns:s(()=>[v(m,{title:`场馆`,"min-width":200},{cell:s(({record:e})=>[v(P,{"model-value":e.venue_id,"allow-clear":``,"allow-search":``,placeholder:`选择场馆`,style:{width:`100%`},options:T.value.map(e=>({label:e.name,value:e.id})),"onUpdate:modelValue":t=>Ue(e,t)},null,8,[`model-value`,`options`,`onUpdate:modelValue`])]),_:1}),v(m,{title:`放票数`,width:200},{cell:s(({record:e})=>[v(K,{modelValue:e.venue_total_quota,"onUpdate:modelValue":t=>e.venue_total_quota=t,min:0,class:`tg-venue-quota-input`,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),v(m,{title:`开放时间`,"min-width":120,ellipsis:!0,tooltip:!0},{cell:s(({record:e})=>[c(p(xt(e.opening_hours,20)),1)]),_:1}),v(m,{title:`地址`,"min-width":160,ellipsis:!0,tooltip:!0},{cell:s(({record:e})=>[c(p(xt(e.address,24)),1)]),_:1}),v(m,{title:`操作`,width:120,align:`center`},{cell:s(({record:e})=>[_(`div`,ge,[v(a,{type:`text`,size:`small`,onClick:t=>vt(e)},{default:s(()=>[...r[58]||=[c(`编辑预约详情`,-1)]]),_:1},8,[`onClick`]),v(a,{type:`text`,size:`small`,status:`danger`,disabled:k.venues.length<=1,onClick:t=>Ct(e)},{default:s(()=>[...r[59]||=[c(` 删除 `,-1)]]),_:1},8,[`disabled`,`onClick`])])]),_:1})]),_:1},8,[`data`])])])]),_:1})]),_:1},8,[`model`])]),_:1},8,[`visible`,`title`,`ok-loading`]),v(Y,{visible:j.value,"onUpdate:visible":r[30]||=e=>j.value=e,title:`编辑场馆预约详情`,width:`80%`,"body-style":je,"unmount-on-close":``,onOk:Q,onCancel:Q},{default:s(()=>[M.value?(n(),l(J,{layout:`vertical`,class:`admin-modal-form`,key:M.value._key},{default:s(()=>[v(x,{label:`开放时间`},{default:s(()=>[v(i,{modelValue:M.value.opening_hours,"onUpdate:modelValue":r[19]||=e=>M.value.opening_hours=e,placeholder:`可填写面向用户的开放时段说明`,"allow-clear":``},null,8,[`modelValue`])]),_:1}),v(x,{label:`所在单位`},{default:s(()=>[v(i,{modelValue:M.value.unit_name,"onUpdate:modelValue":r[20]||=e=>M.value.unit_name=e,"allow-clear":``},null,8,[`modelValue`])]),_:1}),v(x,{label:`联系人`},{default:s(()=>[v(i,{modelValue:M.value.contact_name,"onUpdate:modelValue":r[21]||=e=>M.value.contact_name=e,"allow-clear":``},null,8,[`modelValue`])]),_:1}),v(x,{label:`联系方式 / 二维码核销 / 检票联系`,class:`admin-modal-form__full`},{default:s(()=>[_(`div`,_e,[_(`div`,ve,[r[60]||=_(`div`,{class:`tg-venue-contact-row__sub`},`联系方式`,-1),v(i,{modelValue:M.value.contact_phone,"onUpdate:modelValue":r[22]||=e=>M.value.contact_phone=e,"allow-clear":``,placeholder:`电话等`},null,8,[`modelValue`])]),_(`div`,ye,[r[61]||=_(`div`,{class:`tg-venue-contact-row__sub`},`二维码核销方式`,-1),v(i,{modelValue:M.value.qr_verify_method,"onUpdate:modelValue":r[23]||=e=>M.value.qr_verify_method=e,"allow-clear":``},null,8,[`modelValue`])]),_(`div`,be,[r[62]||=_(`div`,{class:`tg-venue-contact-row__sub`},`核销及检票联系方式`,-1),v(i,{modelValue:M.value.verify_contact_info,"onUpdate:modelValue":r[24]||=e=>M.value.verify_contact_info=e,"allow-clear":``},null,8,[`modelValue`])])])]),_:1}),v(x,{label:`场馆地址与经纬度`,class:`admin-modal-form__full`},{default:s(()=>[_(`div`,xe,[v(i,{modelValue:M.value.address,"onUpdate:modelValue":r[25]||=e=>M.value.address=e,class:`activity-address-coord-row__address`,placeholder:`场馆地址`,"allow-clear":``},null,8,[`modelValue`]),v(K,{modelValue:M.value.lng,"onUpdate:modelValue":r[26]||=e=>M.value.lng=e,class:`activity-address-coord-row__lng`,precision:7,placeholder:`经度`,"hide-button":``},null,8,[`modelValue`]),v(K,{modelValue:M.value.lat,"onUpdate:modelValue":r[27]||=e=>M.value.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:r[28]||=e=>pt(M.value)},{default:s(()=>[...r[63]||=[c(`地图选点`,-1)]]),_:1})])]),_:1}),v(x,{label:`详情`,class:`admin-modal-form__full`},{default:s(()=>[(n(),l(ne,{modelValue:M.value.detail_html,"onUpdate:modelValue":r[29]||=e=>M.value.detail_html=e,"editor-options":ot,"field-key":`tg-venue-d-${M.value._key}`,"min-height":200,key:`tg-vd-${Ne.value}-${M.value._key}`},null,8,[`modelValue`,`field-key`]))]),_:1})]),_:1})):u(``,!0)]),_:1},8,[`visible`]),v(Y,{visible:Le.value,"onUpdate:visible":r[31]||=e=>Le.value=e,title:`媒体预览`,width:`72%`,footer:!1},{default:s(()=>[Re.value===`image`&&q.value?(n(),g(`img`,{key:0,src:q.value,style:{display:`block`,"max-width":`100%`,"max-height":`72vh`,margin:`0 auto`}},null,8,Se)):Re.value===`video`&&q.value?(n(),g(`video`,{key:1,src:q.value,controls:``,autoplay:``,style:{display:`block`,width:`100%`,"max-height":`72vh`}},null,8,Ce)):u(``,!0)]),_:1},8,[`visible`]),v(Y,{visible:R.value,"onUpdate:visible":r[33]||=e=>R.value=e,title:`地图选点(腾讯地图)`,width:`70%`,"body-style":Me,"on-before-ok":gt,"unmount-on-close":``,onCancel:_t},{default:s(()=>[v(f,{style:{"margin-bottom":`12px`,width:`100%`}},{default:s(()=>[v(i,{modelValue:B.value,"onUpdate:modelValue":r[32]||=e=>B.value=e,placeholder:`输入关键词搜索,如:苏州博物馆`,style:{width:`420px`}},null,8,[`modelValue`]),v(a,{type:`primary`,loading:z.value,onClick:mt},{default:s(()=>[...r[64]||=[c(`搜索`,-1)]]),_:1},8,[`loading`])]),_:1}),_(`div`,we,[_(`div`,{ref_key:`mapContainerRef`,ref:Ie,style:{height:`520px`,flex:`1`,border:`1px solid #e5e6eb`}},null,512),_(`div`,Te,[r[65]||=_(`div`,{style:{"margin-bottom":`8px`,color:`#86909c`}},`搜索结果`,-1),v(Be,{size:`small`},{default:s(()=>[(n(!0),g(d,null,y(V.value,(e,t)=>(n(),l(ze,{key:t,onClick:t=>ht(e)},{default:s(()=>[v(X,{ellipsis:{rows:1}},{default:s(()=>[c(p(e.title),1)]),_:2},1024),v(G,{type:`secondary`},{default:s(()=>[c(p(e.address),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1})])]),U.value?(n(),l(Ve,{key:0,type:`info`,style:{"margin-top":`12px`}},{default:s(()=>[c(` 已选坐标:`+p(U.value.lng)+`, `+p(U.value.lat),1),r[66]||=_(`br`,null,null,-1),c(` 地址:`+p(U.value.address||`-`),1)]),_:1})):u(``,!0)]),_:1},8,[`visible`]),v(Y,{visible:N.value,"onUpdate:visible":r[34]||=e=>N.value=e,title:`放票与每日配置`,width:900,"ok-loading":Fe.value,onOk:Ft,onCancel:r[35]||=e=>N.value=!1},{default:s(()=>[Pe.value?(n(),l(He,{key:0,style:{width:`100%`,padding:`24px`}})):F.value?(n(),g(`div`,Ee,[F.value.event?(n(),l(X,{key:0,type:`secondary`,style:{"margin-top":`0`}},{default:s(()=>[c(` 预约日 `+p(F.value.event.booking_start_at)+` ~ `+p(F.value.event.booking_end_at)+`,每日 `+p(F.value.event.daily_release_start_time)+` 起开放,至 `+p(F.value.event.daily_release_end_time)+` 止。 `,1)]),_:1})):u(``,!0),F.value.venues?.length?(n(),l(Ye,{key:1,"default-active-key":`0`},{default:s(()=>[(n(!0),g(d,null,y(F.value.venues,(e,t)=>(n(),l(We,{key:String(t),title:`${yt(e.venue_id)} · 总配额 ${e.venue_total_quota}`},{default:s(()=>[v(b,{data:e.release_days,pagination:!1,scroll:{y:320}},{columns:s(()=>[v(m,{title:`放票日`,"data-index":`release_date`,width:120}),v(m,{title:`滚入`,width:72},{cell:s(({record:e})=>[c(p(e.carry_in),1)]),_:1}),v(m,{title:`基础放票`,width:120},{cell:s(({record:t})=>[v(K,{modelValue:I.value[e.venue_id][t.release_date],"onUpdate:modelValue":n=>I.value[e.venue_id][t.release_date]=n,min:0,mode:`button`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:2},1024),v(m,{title:`含滚入(可放)`,width:120},{cell:s(({record:e})=>[c(p(e.total_day_pool),1)]),_:1}),v(m,{title:`已约`,width:72},{cell:s(({record:e})=>[c(p(e.booked_count),1)]),_:1}),v(m,{title:`余量`,width:88},{cell:s(({record:e})=>[c(p(e.current_remaining),1)]),_:1})]),_:2},1032,[`data`])]),_:2},1032,[`title`]))),128))]),_:1})):u(``,!0),F.value.venues?.length?u(``,!0):(n(),l(Ve,{key:2,type:`warning`},{default:s(()=>[...r[67]||=[c(`暂无放票日数据,请先保存活动并含预约日期与场馆。`,-1)]]),_:1}))])):u(``,!0)]),_:1},8,[`visible`,`ok-loading`])]),_:1})}}}),[[`__scopeId`,`data-v-c526f5d9`]]);export{w as default}; |