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