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,V as a,Y as o,_ as s,d as c,f as l,h as u,i as d,it as f,kt as p,nt as m,p as h,u as g,ut as _,v,y,z as b}from"./runtime-core.esm-bundler-CnFWH3R5.js";import{n as x}from"./http-LCi9aT1G.js";import{u as S}from"./index-BMlTSINt.js";import{t as ee}from"./RichEditorField-DLE_5ppz.js";import{n as C,t as te}from"./adminMediaLimits-B3DR_jid.js";import{t as ne}from"./listTableRowIndex-ekx2Z6yT.js";import{t as w}from"./mediaUrl-D5Z8dTjp.js";var re={key:1},ie={style:{color:`#f53f3f`}},ae={style:{color:`#f53f3f`}},oe={style:{color:`#f53f3f`}},se={style:{color:`#f53f3f`}},ce={style:{color:`#f53f3f`}},le={style:{color:`#f53f3f`}},ue={style:{color:`#f53f3f`}},de={style:{color:`#f53f3f`}},fe={style:{color:`#f53f3f`}},pe={style:{color:`#f53f3f`}},me={style:{color:`#f53f3f`}},he={style:{"margin-left":`8px`,color:`var(--color-text-3)`}},ge={style:{"margin-left":`8px`,color:`var(--color-text-3)`}},_e={style:{display:`flex`,gap:`16px`,width:`100%`}},ve={style:{flex:`1 1 50%`,"min-width":`0`}},ye={style:{flex:`1 1 50%`,"min-width":`0`}},be={key:0,class:`venue-gallery-grid`,style:{"margin-top":`8px`}},xe=[`src`,`onClick`],Se={key:0,style:{color:`#f53f3f`}},Ce={style:{color:`#f53f3f`}},we={class:`venue-address-coord-row`},Te={key:0,style:{color:`#f53f3f`}},Ee={class:`venue-cover-carousel-wrap`},De={class:`venue-cover-carousel-row__col`},Oe=[`src`],ke={key:0,style:{color:`#f53f3f`,"margin-top":`4px`,"font-size":`12px`}},Ae={class:`venue-cover-carousel-row__col`},je={style:{display:`flex`,"flex-direction":`column`,"align-items":`flex-start`,width:`100%`}},Me={style:{width:`100%`,"margin-bottom":`8px`}},Ne={class:`venue-gallery-grid`},Pe=[`src`,`onClick`],Fe=[`src`,`onClick`],Ie={key:0,style:{color:`#f53f3f`,"margin-top":`4px`,"font-size":`12px`}},Le={key:0,style:{color:`#f53f3f`}},Re=[`src`],ze=[`src`],Be={style:{display:`flex`,gap:`12px`}},Ve={style:{width:`280px`,height:`520px`,overflow:`auto`,border:`1px solid #e5e6eb`,padding:`8px`}},He=2060,T=S(y({__name:`VenueList`,setup(y){let S=f(!1),T=f(!1),E=f(!1),D=f(!1),O=f(!1),k=f(``),Ue=f([]),A=f(!1),j=f(null),We=f([]),M=f([]),N=f([]),Ge=f([]),Ke=f([]),P=f([]),F=f([]),qe=f(null),Je=f(null),Ye=f(0),Xe=f(!1),Ze=f(`image`),I=f(``),L=null,R=null,z=f(null),B={lat:31.299379,lng:120.585315},Qe={maxHeight:`70vh`,overflow:`auto`},V=m({name:``,venue_types:``,district:``,unit_name:``,ticket_type:``,booking_mode:``,open_mode:``,visit_form:``,open_time:``,consultation_hours:``,contact_phone:``,address:``,lat:``,lng:``,booking_method:``,ticket_content:``,cover_image:``,gallery_media:``,detail_html:``});function H(){Object.keys(V).forEach(e=>{V[e]=``})}let U=m({keyword:``,district:``,venue_type:``,ticket_type:``,booking_mode:``,open_mode:``,appointment_type:``,is_active:``,is_included_in_stats:``}),W=m({current:1,pageSize:10,total:0}),G=f(null),K=f(``),q=f(!1);function $e(e){if(e==null||e===``)return;let t=typeof e==`number`?e:parseFloat(String(e).trim());return Number.isFinite(t)?t:void 0}function et(){let t=this.quill,n=document.createElement(`input`);n.type=`file`,n.accept=`image/*`,n.onchange=async()=>{let r=n.files?.[0];if(!r)return;let i=C(r);if(i){e.warning(i);return}try{let n=await Q(r),i=t.getSelection(!0)?.index??Math.max(0,t.getLength()-1);t.insertEmbed(i,`image`,n,`user`),t.setSelection(i+1,0),e.success(`图片已上传并插入`)}catch(t){e.error(t?.response?.data?.message??`图片上传失败`)}},n.click()}function tt(){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 n=await Q(r),i=t.getSelection(!0)?.index??Math.max(0,t.getLength()-1);t.insertEmbed(i,`video`,n,`user`),t.setSelection(i+1,0),e.success(`视频已上传并插入`)}catch(t){e.error(t?.response?.data?.message??`视频上传失败`)}},n.click()}let J={toolbar:{container:[[{header:[1,2,3,!1]}],[`bold`,`italic`,`underline`,`strike`],[{color:[]},{background:[]}],[{list:`ordered`},{list:`bullet`}],[{align:[]}],[`link`,`image`,`video`],[`clean`]],handlers:{image:et,video:tt}}},nt={modules:J,placeholder:`请输入场馆详情内容`},rt={modules:J,placeholder:``},Y=m({name:``,venue_types:[],unit_name:``,district:``,ticket_type:``,appointment_type:``,booking_mode:``,open_mode:``,open_time:``,reservation_notice:``,ticket_content:``,booking_method:``,visit_form:``,consultation_hours:``,booking_qr_media:[],address:``,contact_phone:``,lat:void 0,lng:void 0,cover_image:``,gallery_media:[],detail_html:``,sort:0,is_active:!0,is_included_in_stats:!1});function X(){return qe.value?.full_admin_access===!0}async function it(t){try{await x.post(`/venues/${t.id}/audit/approve`),e.success(`已通过审核`),await $()}catch(t){e.error(t?.response?.data?.message??`操作失败`)}}function at(e){G.value=e.id,K.value=``,q.value=!0}async function ot(){if(!G.value)return!1;try{return await x.post(`/venues/${G.value}/audit/reject`,{remark:K.value||void 0}),e.success(`已退回`),q.value=!1,await $(),!0}catch(t){return e.error(t?.response?.data?.message??`操作失败`),!1}}async function st(t){try{await x.delete(`/venues/${t.id}`),e.success(`删除成功`),await $()}catch(t){e.error(t?.response?.data?.message??`删除失败`)}}let ct=f(!1);async function lt(){ct.value=!0;try{let t=await x.get(`/venues/export`,{responseType:`blob`,timeout:12e4}),n=t.data;if(n.type&&(n.type.includes(`json`)||n.type.includes(`text/html`))){let t=await n.text(),r=`导出失败`;try{let e=JSON.parse(t);e?.message&&(r=e.message)}catch{}e.error(r);return}let r=t.headers[`content-disposition`],i=`场馆导出-${new Date().toISOString().slice(0,10)}.csv`;if(r){let e=/filename\*=(?:UTF-8'')?([^;]+)|filename="?([^";]+)/i.exec(r),t=decodeURIComponent((e?.[1]||e?.[2]||``).trim().replace(/^"+|"+$/g,``));t&&(i=t)}let a=URL.createObjectURL(n),o=document.createElement(`a`);o.href=a,o.download=i,o.click(),URL.revokeObjectURL(a),e.success(`已导出`)}catch(t){e.error(t?.response?.data?.message??t?.message??`导出失败`)}finally{ct.value=!1}}function ut(e){let t=(e||``).trim();return t?t.replace(/<[^>]+>/g,` `).replace(/\s+/g,` `):`-`}function dt(e,t){return t?e.find(e=>e.item_value===t)?.item_label||t:`-`}function ft(e,t,n=`arcoblue`){return t&&e.find(e=>e.item_value===t)?.item_remark||n}function pt(e){let t=e.venue_types;return Array.isArray(t)&&t.length?t.map(e=>String(e)):e.venue_type?[String(e.venue_type)]:[]}function Z(){return`CRFBZ-NTART-YU4XX-LCDGK-3J456-VKBK2`}function mt(e,t){let n=String(e||``).trim();if(n)return w(n);let r=String(t||``).trim();return r?w(r):``}async function Q(e){let t=new FormData;t.append(`file`,e);let n=(await x.post(`/upload`,t))?.data||{};return mt(n.url,n.path)}function ht(){Ye.value+=1}function gt(e,t){t&&(Ze.value=e,I.value=w(t),Xe.value=!0)}function _t(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)){for(let t of e)n.push(t);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`||Array.isArray(t))&&n.push(t)}}}return null}async function $(){S.value=!0;try{let{data:e}=await x.get(`/venues`,{params:{keyword:U.keyword||void 0,district:U.district||void 0,venue_type:U.venue_type||void 0,ticket_type:U.ticket_type||void 0,booking_mode:U.booking_mode||void 0,open_mode:U.open_mode||void 0,appointment_type:U.appointment_type||void 0,is_active:U.is_active||void 0,is_included_in_stats:U.is_included_in_stats||void 0}});We.value=e,W.total=e.length}catch(t){e.error(t?.response?.data?.message??`加载场馆失败`)}finally{S.value=!1}}async function vt(){let{data:e}=await x.get(`/dict-items`,{params:{dict_type:`district`,active_only:1}});M.value=e}async function yt(){let{data:e}=await x.get(`/dict-items`,{params:{dict_type:`venue_type`,active_only:1}});N.value=e}async function bt(){let{data:e}=await x.get(`/dict-items`,{params:{dict_type:`venue_appointment_type`,active_only:1}});Ge.value=e}async function xt(){let{data:e}=await x.get(`/dict-items`,{params:{dict_type:`venue_open_mode`,active_only:1}});P.value=e}async function St(){let{data:e}=await x.get(`/dict-items`,{params:{dict_type:`venue_booking_mode`,active_only:1}});Ke.value=e}async function Ct(){let{data:e}=await x.get(`/dict-items`,{params:{dict_type:`ticket_type`,active_only:1}});F.value=e}async function wt(){let{data:e}=await x.get(`/me`);qe.value=e}function Tt(){A.value=!0,j.value=null,H(),Y.name=``,Y.venue_types=[],Y.unit_name=``,Y.district=``,Y.ticket_type=``,Y.booking_mode=``,Y.open_mode=``,Y.open_time=``,Y.reservation_notice=``,Y.ticket_content=``,Y.booking_method=``,Y.visit_form=``,Y.consultation_hours=``,Y.booking_qr_media=[],Y.address=``,Y.contact_phone=``,Y.lat=void 0,Y.lng=void 0,Y.cover_image=``,Y.gallery_media=[],Y.detail_html=``,Y.sort=0,Y.is_active=!0,Y.is_included_in_stats=!1,ht(),E.value=!0}function Et(e){A.value=!1,j.value=e.id,H(),Y.name=e.name,Y.venue_types=Array.isArray(e.venue_types)&&e.venue_types.length?[...e.venue_types]:e.venue_type?[e.venue_type]:[],Y.unit_name=e.unit_name??``,Y.district=e.district??``,Y.ticket_type=e.ticket_type??``,Y.appointment_type=e.appointment_type??``,Y.booking_mode=e.booking_mode??``,Y.open_mode=e.open_mode??``,Y.open_time=e.open_time??``,Y.reservation_notice=e.reservation_notice??``,Y.ticket_content=e.ticket_content??``,Y.booking_method=e.booking_method??``,Y.visit_form=e.visit_form??``,Y.consultation_hours=e.consultation_hours??``;{let t=e.booking_qr_media;Array.isArray(t)&&t.length?Y.booking_qr_media=t.filter(e=>e&&e.url&&e.type===`image`).map(e=>({type:`image`,url:String(e.url)})):Y.booking_qr_media=[]}Y.address=e.address??``,Y.contact_phone=e.contact_phone??``,Y.lat=$e(e.lat),Y.lng=$e(e.lng),Y.cover_image=e.cover_image??``,Y.gallery_media=Array.isArray(e.gallery_media)?[...e.gallery_media]:[],Y.detail_html=e.detail_html??``;let t=e.sort;Y.sort=typeof t==`number`&&Number.isFinite(t)?t:parseInt(String(t??`0`),10)||0,Y.is_active=e.is_active,Y.is_included_in_stats=e.is_included_in_stats??!1,ht(),E.value=!0}async function Dt(t){try{let n=_t(t);if(!n)return e.warning(`未识别到上传文件`),!1;let r=C(n);if(r)return e.warning(r),!1;Y.cover_image=await Q(n),e.success(`封面上传成功`)}catch(t){e.error(t?.response?.data?.message??`封面上传失败`)}return!1}async function Ot(t){try{let n=_t(t);if(!n)return e.warning(`未识别到上传文件`),!1;let r=C(n);if(r)return e.warning(r),!1;let i=await Q(n);if(!i)return e.error(`上传成功但未返回可用地址`),!1;let a=n.type.startsWith(`video/`);Y.gallery_media.push({type:a?`video`:`image`,url:i}),e.success(`轮播资源上传成功`)}catch(t){e.error(t?.response?.data?.message??`轮播资源上传失败`)}return!1}function kt(...e){Dt(e)}function At(...e){Ot(e)}function jt(e){Y.gallery_media.splice(e,1)}async function Mt(t){try{if(!t)return e.warning(`未识别到上传文件`),!1;if(!t.type.startsWith(`image/`))return e.warning(`仅支持图片`),!1;let n=C(t);if(n)return e.warning(n),!1;let r=await Q(t);if(!r)return e.error(`上传成功但未返回可用地址`),!1;Y.booking_qr_media.push({type:`image`,url:r}),e.success(`已上传`)}catch(t){e.error(t?.response?.data?.message??`上传失败`)}return!1}function Nt(e){Y.booking_qr_media.splice(e,1)}function Pt(){Y.cover_image=``}function Ft(t){let n=t?.target,r=(n?.getAttribute?.(`src`)||n?.src||``).trim();!r||r===`about:blank`||e.error(`图片地址无法访问,请检查后端 storage 访问配置`)}function It(){W.current=1,$()}function Lt(e){W.current=e}async function Rt(){if(window.TMap)return;let e=Z();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 zt(e,t){let n=window.TMap;L&&(R&&R.setMap(null),R=new n.MultiMarker({map:L,styles:{marker:new n.MarkerStyle({width:24,height:35})},geometries:[{id:`picked`,styleId:`marker`,position:new n.LatLng(e,t)}]}),L.setCenter(new n.LatLng(e,t)))}function Bt(e,t){let n=window.TMap;if(!L||!n)return;let r=new n.LatLng(e,t);L.resize?.(),L.setCenter(r),L.setZoom(13),setTimeout(()=>{L.resize?.(),L.setCenter(r)},120)}async function Vt(e,t){let{data:n}=await x.get(`/map/reverse-geocode`,{params:{lat:e,lng:t}});z.value={lat:e,lng:t,address:n.address||``},n.district&&M.value.some(e=>e.item_value===n.district)&&(Y.district=n.district)}async function Ht(){await Rt();let t=window.TMap,n=typeof Y.lat==`number`?Y.lat:B.lat,r=typeof Y.lng==`number`?Y.lng:B.lng,i=new t.LatLng(n,r);L?L.setCenter(i):(L=new t.Map(Je.value,{center:i,zoom:13}),L.on(`click`,async t=>{let n=Number(t.latLng.getLat().toFixed(6)),r=Number(t.latLng.getLng().toFixed(6));zt(n,r);try{await Vt(n,r)}catch(t){e.error(t?.response?.data?.message??`逆地理编码失败`)}})),Bt(n,r),Y.lat!==void 0&&Y.lng!==void 0?(zt(Y.lat,Y.lng),z.value={lat:Y.lat,lng:Y.lng,address:Y.address||``}):(R&&=(R.setMap(null),null),z.value=null)}async function Ut(){if(A.value){D.value=!0,k.value=``,Ue.value=[],O.value=!0;try{await i(),setTimeout(async()=>{try{await Ht()}catch(t){e.error(t?.message??`地图初始化失败`)}finally{O.value=!1}},250)}catch{O.value=!1}}}async function Wt(){if(!k.value.trim()){Ue.value=[];return}O.value=!0;try{let{data:e}=await x.get(`/map/search`,{params:{keyword:k.value,region:`苏州`}});Ue.value=e}catch(t){e.error(t?.response?.data?.message??`地图搜索失败`)}finally{O.value=!1}}async function Gt(e){zt(e.lat,e.lng),z.value={lat:e.lat,lng:e.lng,address:e.address||``};try{await Vt(e.lat,e.lng)}catch{}}function Kt(){return z.value?(Y.lat=z.value.lat,Y.lng=z.value.lng,Y.address=z.value.address||Y.address,D.value=!1,!0):(e.warning(`请先点击地图或选择搜索结果`),!1)}function qt(){H();let e=!0;return Y.name.trim()||(V.name=`场馆名称为必填项`,e=!1),Y.district.trim()||(V.district=`行政区为必填项`,e=!1),Y.address.trim()||(V.address=`场馆地址为必填项`,e=!1),(typeof Y.lat!=`number`||typeof Y.lng!=`number`)&&(V.lat=`经纬度为必填项`,e=!1),Y.venue_types.length||(V.venue_types=`主题为必填项`,e=!1),Y.unit_name.trim()||(V.unit_name=`所属单位为必填项`,e=!1),Y.ticket_type||(V.ticket_type=`门票类型为必填项`,e=!1),Y.open_mode||(V.open_mode=`开放模式为必填项`,e=!1),Y.visit_form.trim()||(V.visit_form=`参观形式为必填项`,e=!1),Y.open_time.trim()||(V.open_time=`开放时间为必填项`,e=!1),Y.consultation_hours.trim()||(V.consultation_hours=`咨询时间为必填项`,e=!1),Y.contact_phone.trim()||(V.contact_phone=`咨询电话为必填项`,e=!1),Y.booking_method.trim()||(V.booking_method=`预约方式为必填项`,e=!1),Y.ticket_content.trim()||(V.ticket_content=`门票说明为必填项`,e=!1),Y.cover_image||(V.cover_image=`科普场馆主图为必填项`,e=!1),Y.gallery_media.length||(V.gallery_media=`科普场馆展示图片为必填项`,e=!1),(!Y.detail_html||!Y.detail_html.trim())&&(V.detail_html=`场馆简介为必填项`,e=!1),e}async function Jt(){T.value=!0;try{if(!qt())return e.warning(`请填写所有必填项`),!1;let t={...Y,booking_qr_media:Y.booking_qr_media||[],sort:X()?Y.sort:void 0};return A.value?(await x.post(`/venues`,t),e.success(`创建场馆成功`)):j.value&&(await x.put(`/venues/${j.value}`,t),e.success(`更新场馆成功`)),await $(),!0}catch(t){return e.error(t?.response?.data?.message??`保存失败`),!1}finally{T.value=!1}}async function Yt(){return await Jt()}return r(async()=>{await wt(),await Promise.all([$(),vt(),yt(),bt(),St(),xt(),Ct()])}),(e,r)=>{let i=a(`a-input`),f=a(`a-option`),m=a(`a-select`),y=a(`a-button`),x=a(`a-space`),C=a(`a-table-column`),j=a(`a-tag`),Ge=a(`a-popconfirm`),qe=a(`a-table`),L=a(`a-card`),R=a(`a-textarea`),B=a(`a-modal`),H=a(`a-form-item`),G=a(`a-input-number`),$e=a(`a-switch`),et=a(`a-col`),tt=a(`a-row`),J=a(`a-upload`),Z=a(`a-typography-text`),mt=a(`a-form`),Q=a(`a-typography-paragraph`),ht=a(`a-list-item`),_t=a(`a-list`),$=a(`a-alert`);return n(),h(d,null,[v(L,{title:`场馆管理 / 场馆列表`},{extra:o(()=>[v(x,{wrap:``},{default:o(()=>[v(i,{modelValue:U.keyword,"onUpdate:modelValue":r[0]||=e=>U.keyword=e,placeholder:`搜索名称/地址/开放时间/预约须知等`,style:{width:`260px`}},null,8,[`modelValue`]),v(m,{modelValue:U.venue_type,"onUpdate:modelValue":r[1]||=e=>U.venue_type=e,"allow-clear":``,placeholder:`筛选主题`,style:{width:`180px`}},{default:o(()=>[(n(!0),h(d,null,b(N.value,e=>(n(),c(f,{key:e.id,value:e.item_value},{default:o(()=>[s(p(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),v(m,{modelValue:U.district,"onUpdate:modelValue":r[2]||=e=>U.district=e,"allow-clear":``,placeholder:`筛选行政区`,style:{width:`180px`}},{default:o(()=>[(n(!0),h(d,null,b(M.value,e=>(n(),c(f,{key:e.id,value:e.item_value},{default:o(()=>[s(p(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),v(m,{modelValue:U.ticket_type,"onUpdate:modelValue":r[3]||=e=>U.ticket_type=e,"allow-clear":``,placeholder:`筛选门票类型`,style:{width:`180px`}},{default:o(()=>[(n(!0),h(d,null,b(F.value,e=>(n(),c(f,{key:e.id,value:e.item_value},{default:o(()=>[s(p(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),v(m,{modelValue:U.booking_mode,"onUpdate:modelValue":r[4]||=e=>U.booking_mode=e,"allow-clear":``,placeholder:`筛选预约模式`,style:{width:`180px`}},{default:o(()=>[(n(!0),h(d,null,b(Ke.value,e=>(n(),c(f,{key:e.id,value:e.item_value},{default:o(()=>[s(p(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),v(m,{modelValue:U.open_mode,"onUpdate:modelValue":r[5]||=e=>U.open_mode=e,"allow-clear":``,placeholder:`筛选开放模式`,style:{width:`180px`}},{default:o(()=>[(n(!0),h(d,null,b(P.value,e=>(n(),c(f,{key:e.id,value:e.item_value},{default:o(()=>[s(p(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),v(m,{modelValue:U.is_included_in_stats,"onUpdate:modelValue":r[6]||=e=>U.is_included_in_stats=e,"allow-clear":``,placeholder:`纳入市科协人数统计系统`,style:{width:`180px`}},{default:o(()=>[v(f,{value:`1`},{default:o(()=>[...r[36]||=[s(`纳入统计`,-1)]]),_:1}),v(f,{value:`0`},{default:o(()=>[...r[37]||=[s(`不纳入`,-1)]]),_:1})]),_:1},8,[`modelValue`]),v(m,{modelValue:U.is_active,"onUpdate:modelValue":r[7]||=e=>U.is_active=e,"allow-clear":``,placeholder:`上架状态`,style:{width:`130px`}},{default:o(()=>[v(f,{value:`1`},{default:o(()=>[...r[38]||=[s(`上架`,-1)]]),_:1}),v(f,{value:`0`},{default:o(()=>[...r[39]||=[s(`下架`,-1)]]),_:1})]),_:1},8,[`modelValue`]),v(y,{type:`primary`,onClick:It},{default:o(()=>[...r[40]||=[s(`查询`,-1)]]),_:1}),v(y,{type:`primary`,onClick:Tt},{default:o(()=>[...r[41]||=[s(`新增场馆`,-1)]]),_:1}),X()?(n(),c(y,{key:0,loading:ct.value,onClick:lt},{default:o(()=>[...r[42]||=[s(`导出场馆`,-1)]]),_:1},8,[`loading`])):l(``,!0)]),_:1})]),default:o(()=>[v(qe,{class:`list-data-table`,scroll:{x:He},data:We.value,loading:S.value,"row-key":`id`,pagination:{current:W.current,pageSize:W.pageSize,total:W.total,showTotal:!0,showJumper:!0},onPageChange:Lt},{columns:o(()=>[v(C,{title:``,width:50,ellipsis:!0,tooltip:!0},{cell:o(({rowIndex:e})=>[s(p(_(ne)(e,W.current,W.pageSize)),1)]),_:1}),v(C,{title:`场馆名称`,"data-index":`name`,width:220,"min-width":160,ellipsis:!0,tooltip:!0}),v(C,{title:`主题`,width:130},{cell:o(({record:e})=>[pt(e).length?(n(),c(x,{key:0,wrap:``,size:4},{default:o(()=>[(n(!0),h(d,null,b(pt(e),(t,r)=>(n(),c(j,{key:e.id+`-vt-`+r,color:ft(N.value,t,`arcoblue`)},{default:o(()=>[s(p(dt(N.value,t)),1)]),_:2},1032,[`color`]))),128))]),_:2},1024)):(n(),h(`span`,re,`-`))]),_:1}),v(C,{title:`行政区`,"data-index":`district`,width:120,ellipsis:!0,tooltip:!0}),v(C,{title:`所属单位`,"data-index":`unit_name`,width:200,"min-width":140,ellipsis:!0,tooltip:!0}),v(C,{title:`门票类型`,width:120},{cell:o(({record:e})=>[v(j,{color:ft(F.value,e.ticket_type,`green`)},{default:o(()=>[s(p(dt(F.value,e.ticket_type)),1)]),_:2},1032,[`color`])]),_:1}),v(C,{title:`预约模式`,width:180},{cell:o(({record:e})=>[g(`span`,null,p(dt(Ke.value,e.booking_mode)),1)]),_:1}),v(C,{title:`开放模式`,width:150},{cell:o(({record:e})=>[g(`span`,null,p(dt(P.value,e.open_mode)),1)]),_:1}),v(C,{title:`开放时间`,width:220,"min-width":160,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(p(ut(e.open_time)),1)]),_:1}),v(C,{title:`地址`,"data-index":`address`,width:280,"min-width":200,ellipsis:!0,tooltip:!0}),v(C,{title:`排序`,"data-index":`sort`,width:90,ellipsis:!0,tooltip:!0}),v(C,{title:`上架状态`,width:100},{cell:o(({record:e})=>[v(j,{color:e.is_active?`green`:`gray`},{default:o(()=>[s(p(e.is_active?`上架`:`下架`),1)]),_:2},1032,[`color`])]),_:1}),v(C,{title:`操作`,width:170,fixed:`right`,align:`left`},{cell:o(({record:e})=>[v(x,{wrap:``,justify:`start`},{default:o(()=>[v(y,{type:`text`,onClick:t=>Et(e)},{default:o(()=>[...r[43]||=[s(`编辑`,-1)]]),_:1},8,[`onClick`]),X()&&(e.audit_status===`pending`||e.audit_status===`rejected`)?(n(),h(d,{key:0},[v(y,{type:`text`,status:`success`,onClick:t=>it(e)},{default:o(()=>[...r[44]||=[s(`通过`,-1)]]),_:1},8,[`onClick`]),v(y,{type:`text`,status:`danger`,onClick:t=>at(e)},{default:o(()=>[...r[45]||=[s(`退回`,-1)]]),_:1},8,[`onClick`])],64)):l(``,!0),X()?(n(),c(Ge,{key:1,content:`删除后该场馆关联的活动、预约等数据将一并删除,且不可恢复,确认删除?`,onOk:t=>st(e)},{default:o(()=>[v(y,{type:`text`,status:`danger`},{default:o(()=>[...r[46]||=[s(`删除`,-1)]]),_:1})]),_:1},8,[`onOk`])):l(``,!0)]),_:2},1024)]),_:1})]),_:1},8,[`scroll`,`data`,`loading`,`pagination`])]),_:1}),v(B,{visible:q.value,"onUpdate:visible":r[9]||=e=>q.value=e,title:`退回场馆`,"on-before-ok":ot},{default:o(()=>[v(R,{modelValue:K.value,"onUpdate:modelValue":r[8]||=e=>K.value=e,placeholder:`退回说明(选填)`,"auto-size":{minRows:3,maxRows:8}},null,8,[`modelValue`])]),_:1},8,[`visible`]),v(B,{visible:E.value,"onUpdate:visible":r[32]||=e=>E.value=e,title:A.value?`新增场馆`:`编辑场馆`,width:`70%`,"body-style":Qe,"confirm-loading":T.value,"on-before-ok":Yt},{default:o(()=>[v(mt,{model:Y,layout:`vertical`,class:`admin-modal-form`},{default:o(()=>[v(H,{label:`场馆名称`,required:``,help:V.name},u({default:o(()=>[v(i,{modelValue:Y.name,"onUpdate:modelValue":r[10]||=e=>Y.name=e},null,8,[`modelValue`])]),_:2},[V.name?{name:`help`,fn:o(()=>[g(`span`,ie,p(V.name),1)]),key:`0`}:void 0]),1032,[`help`]),v(H,{label:`主题(可多选)`,required:``,help:V.venue_types},u({default:o(()=>[v(m,{modelValue:Y.venue_types,"onUpdate:modelValue":r[11]||=e=>Y.venue_types=e,multiple:``,placeholder:`请选择主题`},{default:o(()=>[(n(!0),h(d,null,b(N.value,e=>(n(),c(f,{key:e.id,value:e.item_value},{default:o(()=>[s(p(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:2},[V.venue_types?{name:`help`,fn:o(()=>[g(`span`,ae,p(V.venue_types),1)]),key:`0`}:void 0]),1032,[`help`]),v(H,{label:`行政区`,required:``,help:V.district},u({default:o(()=>[v(m,{modelValue:Y.district,"onUpdate:modelValue":r[12]||=e=>Y.district=e,"allow-clear":``,placeholder:`请选择行政区`},{default:o(()=>[(n(!0),h(d,null,b(M.value,e=>(n(),c(f,{key:e.id,value:e.item_value},{default:o(()=>[s(p(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:2},[V.district?{name:`help`,fn:o(()=>[g(`span`,oe,p(V.district),1)]),key:`0`}:void 0]),1032,[`help`]),v(H,{label:`所属单位`,required:``,help:V.unit_name},u({default:o(()=>[v(i,{modelValue:Y.unit_name,"onUpdate:modelValue":r[13]||=e=>Y.unit_name=e,placeholder:`所属单位名称`},null,8,[`modelValue`])]),_:2},[V.unit_name?{name:`help`,fn:o(()=>[g(`span`,se,p(V.unit_name),1)]),key:`0`}:void 0]),1032,[`help`]),v(H,{label:`门票类型`,required:``,help:V.ticket_type},u({default:o(()=>[v(m,{modelValue:Y.ticket_type,"onUpdate:modelValue":r[14]||=e=>Y.ticket_type=e,placeholder:`请选择门票类型`},{default:o(()=>[(n(!0),h(d,null,b(F.value,e=>(n(),c(f,{key:e.id,value:e.item_value},{default:o(()=>[s(p(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:2},[V.ticket_type?{name:`help`,fn:o(()=>[g(`span`,ce,p(V.ticket_type),1)]),key:`0`}:void 0]),1032,[`help`]),v(H,{label:`预约模式`,help:V.booking_mode},u({default:o(()=>[v(m,{modelValue:Y.booking_mode,"onUpdate:modelValue":r[15]||=e=>Y.booking_mode=e,"allow-clear":``,placeholder:`请选择预约模式`},{default:o(()=>[(n(!0),h(d,null,b(Ke.value,e=>(n(),c(f,{key:e.id,value:e.item_value},{default:o(()=>[s(p(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:2},[V.booking_mode?{name:`help`,fn:o(()=>[g(`span`,le,p(V.booking_mode),1)]),key:`0`}:void 0]),1032,[`help`]),v(H,{label:`开放模式`,required:``,help:V.open_mode},u({default:o(()=>[v(m,{modelValue:Y.open_mode,"onUpdate:modelValue":r[16]||=e=>Y.open_mode=e,placeholder:`请选择开放模式`},{default:o(()=>[(n(!0),h(d,null,b(P.value,e=>(n(),c(f,{key:e.id,value:e.item_value},{default:o(()=>[s(p(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:2},[V.open_mode?{name:`help`,fn:o(()=>[g(`span`,ue,p(V.open_mode),1)]),key:`0`}:void 0]),1032,[`help`]),v(H,{label:`参观形式`,required:``,help:V.visit_form},u({default:o(()=>[v(i,{modelValue:Y.visit_form,"onUpdate:modelValue":r[17]||=e=>Y.visit_form=e,placeholder:`参观形式说明`},null,8,[`modelValue`])]),_:2},[V.visit_form?{name:`help`,fn:o(()=>[g(`span`,de,p(V.visit_form),1)]),key:`0`}:void 0]),1032,[`help`]),v(H,{label:`开放时间`,required:``,help:V.open_time},u({default:o(()=>[v(i,{modelValue:Y.open_time,"onUpdate:modelValue":r[18]||=e=>Y.open_time=e,placeholder:`如:周一至周五 09:00-17:00周末 09:00-18:00`},null,8,[`modelValue`])]),_:2},[V.open_time?{name:`help`,fn:o(()=>[g(`span`,fe,p(V.open_time),1)]),key:`0`}:void 0]),1032,[`help`]),v(H,{label:`咨询时间`,required:``,help:V.consultation_hours},u({default:o(()=>[v(i,{modelValue:Y.consultation_hours,"onUpdate:modelValue":r[19]||=e=>Y.consultation_hours=e,placeholder:`咨询时间说明`},null,8,[`modelValue`])]),_:2},[V.consultation_hours?{name:`help`,fn:o(()=>[g(`span`,pe,p(V.consultation_hours),1)]),key:`0`}:void 0]),1032,[`help`]),v(H,{label:`咨询电话`,required:``,help:V.contact_phone},u({default:o(()=>[v(i,{modelValue:Y.contact_phone,"onUpdate:modelValue":r[20]||=e=>Y.contact_phone=e,placeholder:`前台可点击拨打`},null,8,[`modelValue`])]),_:2},[V.contact_phone?{name:`help`,fn:o(()=>[g(`span`,me,p(V.contact_phone),1)]),key:`0`}:void 0]),1032,[`help`]),v(H,{label:`排序`},{default:o(()=>[v(G,{modelValue:Y.sort,"onUpdate:modelValue":r[21]||=e=>Y.sort=e,min:0,disabled:!X()},null,8,[`modelValue`,`disabled`])]),_:1}),v(tt,{gutter:16},{default:o(()=>[v(et,{span:12},{default:o(()=>[v(H,{label:`上架状态`},{default:o(()=>[v($e,{modelValue:Y.is_active,"onUpdate:modelValue":r[22]||=e=>Y.is_active=e},null,8,[`modelValue`]),g(`span`,he,p(Y.is_active?`上架`:`下架`),1)]),_:1})]),_:1}),v(et,{span:12},{default:o(()=>[v(H,{label:`纳入市科协人数统计系统`},{default:o(()=>[v($e,{modelValue:Y.is_included_in_stats,"onUpdate:modelValue":r[23]||=e=>Y.is_included_in_stats=e},null,8,[`modelValue`]),g(`span`,ge,p(Y.is_included_in_stats?``:``),1)]),_:1})]),_:1})]),_:1}),v(H,{label:`预约方式与预约二维码`,required:``,class:`admin-modal-form__full`},{help:o(()=>[V.booking_method?(n(),h(`span`,Se,p(V.booking_method),1)):l(``,!0)]),default:o(()=>[g(`div`,_e,[g(`div`,ve,[r[47]||=g(`div`,{class:`venue-form-split-label`},[s(`预约方式 `),g(`span`,{style:{color:`#f53f3f`}},`*`)],-1),v(i,{modelValue:Y.booking_method,"onUpdate:modelValue":r[24]||=e=>Y.booking_method=e,placeholder:`单行文字说明`,style:{width:`100%`}},null,8,[`modelValue`])]),g(`div`,ye,[r[50]||=g(`div`,{class:`venue-form-split-label`},`预约二维码`,-1),v(J,{"auto-upload":!1,"show-file-list":!1,limit:20,multiple:``,accept:`image/*`,"on-before-upload":Mt},{"upload-button":o(()=>[v(y,{type:`primary`,size:`small`},{default:o(()=>[...r[48]||=[s(`上传图片`,-1)]]),_:1})]),_:1}),v(Z,{type:`secondary`,style:{"margin-top":`8px`,display:`block`,"font-size":`12px`}},{default:o(()=>[s(p(_(te)),1)]),_:1}),Y.booking_qr_media.length?(n(),h(`div`,be,[(n(!0),h(d,null,b(Y.booking_qr_media,(e,t)=>(n(),h(`div`,{key:`booking-qr-${t}`,class:`venue-gallery-item`},[g(`img`,{src:_(w)(e.url),class:`venue-gallery-thumb`,onError:Ft,onClick:t=>gt(`image`,e.url)},null,40,xe),v(y,{size:`mini`,status:`danger`,onClick:e=>Nt(t)},{default:o(()=>[...r[49]||=[s(`删除`,-1)]]),_:1},8,[`onClick`])]))),128))])):l(``,!0)])])]),_:1}),v(H,{label:`门票说明`,required:``,class:`admin-modal-form__full`,help:V.ticket_content},u({default:o(()=>[v(R,{modelValue:Y.ticket_content,"onUpdate:modelValue":r[25]||=e=>Y.ticket_content=e,"auto-size":{minRows:3,maxRows:12},placeholder:`门票说明`},null,8,[`modelValue`])]),_:2},[V.ticket_content?{name:`help`,fn:o(()=>[g(`span`,Ce,p(V.ticket_content),1)]),key:`0`}:void 0]),1032,[`help`]),v(H,{label:`场馆地址与经纬度`,required:``,class:`admin-modal-form__full`},{extra:o(()=>[...r[52]||=[s(`经纬度不可手动编辑,请使用地图选点自动填充。`,-1)]]),help:o(()=>[V.address||V.lat||V.lng?(n(),h(`span`,Te,p(V.address||V.lat||V.lng),1)):l(``,!0)]),default:o(()=>[g(`div`,we,[v(i,{modelValue:Y.address,"onUpdate:modelValue":r[26]||=e=>Y.address=e,class:`venue-address-coord-row__address`,placeholder:`场馆地址`,"allow-clear":``},null,8,[`modelValue`]),v(G,{modelValue:Y.lng,"onUpdate:modelValue":r[27]||=e=>Y.lng=e,class:`venue-address-coord-row__lng`,precision:7,placeholder:`经度`,"hide-button":``,disabled:``},null,8,[`modelValue`]),v(G,{modelValue:Y.lat,"onUpdate:modelValue":r[28]||=e=>Y.lat=e,class:`venue-address-coord-row__lat`,precision:7,placeholder:`纬度`,"hide-button":``,disabled:``},null,8,[`modelValue`]),A.value?(n(),c(y,{key:0,type:`primary`,class:`venue-address-coord-row__map`,onClick:Ut},{default:o(()=>[...r[51]||=[s(`地图选点`,-1)]]),_:1})):l(``,!0)])]),_:1}),v(H,{label:`科普场馆图片`,required:``,class:`admin-modal-form__full`},{default:o(()=>[g(`div`,Ee,[g(`div`,De,[r[55]||=g(`div`,{class:`venue-cover-carousel-row__sub`},[s(`科普场馆主图 `),g(`span`,{style:{color:`#f53f3f`}},`*`)],-1),v(x,{direction:`vertical`,fill:``,style:{width:`100%`}},{default:o(()=>[v(J,{"auto-upload":!1,"show-file-list":!1,accept:`image/*`,"before-upload":Dt,onChange:kt},{"upload-button":o(()=>[v(y,null,{default:o(()=>[...r[53]||=[s(`上传封面`,-1)]]),_:1})]),_:1}),v(Z,{type:`secondary`},{default:o(()=>[s(p(_(te)),1)]),_:1}),Y.cover_image?(n(),c(x,{key:0,direction:`vertical`,align:`start`},{default:o(()=>[g(`img`,{src:_(w)(Y.cover_image),style:{width:`80px`,border:`1px solid #e5e6eb`,"border-radius":`4px`,cursor:`zoom-in`},onError:Ft,onClick:r[29]||=e=>gt(`image`,Y.cover_image)},null,40,Oe),v(y,{size:`mini`,status:`danger`,onClick:Pt},{default:o(()=>[...r[54]||=[s(`删除封面`,-1)]]),_:1})]),_:1})):l(``,!0)]),_:1}),V.cover_image?(n(),h(`div`,ke,p(V.cover_image),1)):l(``,!0)]),g(`div`,Ae,[r[58]||=g(`div`,{class:`venue-cover-carousel-row__sub`},[s(`科普场馆展示图片 `),g(`span`,{style:{color:`#f53f3f`}},`*`)],-1),g(`div`,je,[g(`div`,Me,[v(J,{"auto-upload":!1,"show-file-list":!1,multiple:``,accept:`image/*,video/*`,"before-upload":Ot,onChange:At},{"upload-button":o(()=>[v(y,{type:`primary`},{default:o(()=>[...r[56]||=[s(`新增轮播资源`,-1)]]),_:1})]),_:1}),v(Z,{type:`secondary`,style:{"margin-top":`12px`,display:`block`}},{default:o(()=>[s(p(_(te)),1)]),_:1})]),g(`div`,Ne,[(n(!0),h(d,null,b(Y.gallery_media,(e,i)=>(n(),h(`div`,{key:e.url+i,class:`venue-gallery-item`},[e.type===`image`?(n(),h(`img`,{key:0,src:_(w)(e.url),class:`venue-gallery-thumb`,onError:Ft,onClick:t=>gt(`image`,e.url)},null,40,Pe)):(n(),h(`video`,{key:1,src:_(w)(e.url),controls:``,class:`venue-gallery-thumb venue-gallery-thumb--video`,onClick:t(t=>gt(`video`,e.url),[`stop`])},null,8,Fe)),v(y,{size:`mini`,status:`danger`,onClick:e=>jt(i)},{default:o(()=>[...r[57]||=[s(`删除`,-1)]]),_:1},8,[`onClick`])]))),128))])]),V.gallery_media?(n(),h(`div`,Ie,p(V.gallery_media),1)):l(``,!0)])])]),_:1}),v(H,{label:`预约须知`,class:`admin-modal-form__full`},{default:o(()=>[(n(),c(ee,{modelValue:Y.reservation_notice,"onUpdate:modelValue":r[30]||=e=>Y.reservation_notice=e,"editor-options":rt,"field-key":`venue-reservation`,key:`venue-reservation-${Ye.value}`},null,8,[`modelValue`]))]),_:1}),v(H,{label:`场馆简介`,required:``,class:`admin-modal-form__full`},{help:o(()=>[V.detail_html?(n(),h(`span`,Le,p(V.detail_html),1)):l(``,!0)]),default:o(()=>[(n(),c(ee,{modelValue:Y.detail_html,"onUpdate:modelValue":r[31]||=e=>Y.detail_html=e,"editor-options":nt,"field-key":`venue-detail`,"min-height":260,key:`venue-detail-${Ye.value}`},null,8,[`modelValue`]))]),_:1})]),_:1},8,[`model`])]),_:1},8,[`visible`,`title`,`confirm-loading`]),v(B,{visible:Xe.value,"onUpdate:visible":r[33]||=e=>Xe.value=e,title:`媒体预览`,width:`72%`,footer:!1},{default:o(()=>[Ze.value===`image`&&I.value?(n(),h(`img`,{key:0,src:I.value,style:{display:`block`,"max-width":`100%`,"max-height":`72vh`,margin:`0 auto`},onError:Ft},null,40,Re)):Ze.value===`video`&&I.value?(n(),h(`video`,{key:1,src:I.value,controls:``,autoplay:``,style:{display:`block`,width:`100%`,"max-height":`72vh`}},null,8,ze)):l(``,!0)]),_:1},8,[`visible`]),v(B,{visible:D.value,"onUpdate:visible":r[35]||=e=>D.value=e,title:`地图选点(腾讯地图)`,width:`70%`,"body-style":Qe,"on-before-ok":Kt},{default:o(()=>[v(x,{style:{"margin-bottom":`12px`,width:`100%`}},{default:o(()=>[v(i,{modelValue:k.value,"onUpdate:modelValue":r[34]||=e=>k.value=e,placeholder:`输入关键词搜索,如:苏州博物馆`,style:{width:`420px`}},null,8,[`modelValue`]),v(y,{type:`primary`,loading:O.value,onClick:Wt},{default:o(()=>[...r[59]||=[s(`搜索`,-1)]]),_:1},8,[`loading`])]),_:1}),g(`div`,Be,[g(`div`,{ref_key:`mapContainerRef`,ref:Je,style:{height:`520px`,flex:`1`,border:`1px solid #e5e6eb`}},null,512),g(`div`,Ve,[r[60]||=g(`div`,{style:{"margin-bottom":`8px`,color:`#86909c`}},`搜索结果`,-1),v(_t,{size:`small`},{default:o(()=>[(n(!0),h(d,null,b(Ue.value,(e,t)=>(n(),c(ht,{key:t,onClick:t=>Gt(e)},{default:o(()=>[v(Q,{ellipsis:{rows:1}},{default:o(()=>[s(p(e.title),1)]),_:2},1024),v(Z,{type:`secondary`},{default:o(()=>[s(p(e.address),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1})])]),z.value?(n(),c($,{key:0,type:`info`,style:{"margin-top":`12px`}},{default:o(()=>[s(` 已选坐标:`+p(z.value.lng)+`, `+p(z.value.lat),1),r[61]||=g(`br`,null,null,-1),s(` 地址:`+p(z.value.address||`-`),1)]),_:1})):l(``,!0)]),_:1},8,[`visible`])],64)}}}),[[`__scopeId`,`data-v-19e61bca`]]);export{T as default};