|
|
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,i as u,it as d,kt as f,nt as p,p as m,u as h,ut as g,v as _,y as v,z as y}from"./runtime-core.esm-bundler-CnFWH3R5.js";import{n as b,o as ee}from"./index-BLul_Qh8.js";import{t as te}from"./RichEditorField-pyk1R8B6.js";import{t as ne}from"./listTable-DKAruyoN.js";import{t as x}from"./mediaUrl-CxI9paVG.js";var re={key:1},ie={class:`import-file-label`},ae={key:1},oe={style:{"margin-top":`16px`,"text-align":`right`}},se={class:`venue-address-coord-row`},ce={class:`venue-cover-carousel-wrap`},le={class:`venue-cover-carousel-row__col`},ue=[`src`],de={class:`venue-cover-carousel-row__col`},fe={style:{display:`flex`,"flex-direction":`column`,"align-items":`flex-start`,width:`100%`}},pe={style:{width:`100%`,"margin-bottom":`8px`}},me={class:`venue-gallery-grid`},he=[`src`,`onClick`],ge=[`src`,`onClick`],_e=[`src`],ve=[`src`],ye={style:{display:`flex`,gap:`12px`}},be={style:{width:`280px`,height:`520px`,overflow:`auto`,border:`1px solid #e5e6eb`,padding:`8px`}},xe=3600,S=ee(v({__name:`VenueList`,setup(v){let ee=d(!1),S=d(!1),C=d(!1),Se=d(!1),w=d(!1),T=d(``),E=d([]),D=d(!1),O=d(null),Ce=d([]),k=d([]),A=d([]),we=d([]),j=d([]),M=d([]),N=d(null),Te=d(null),Ee=d(0),De=d(!1),Oe=d(`image`),P=d(``),F=null,I=null,L=d(null),R={lat:31.299379,lng:120.585315},ke={maxHeight:`70vh`,overflow:`auto`},z=p({keyword:``,district:``,venue_type:``,ticket_type:``,open_mode:``,is_active:`all`,audit_status:`all`}),B=d(null),V=d(``),H=d(!1),U=d(!1),Ae=d(!1),je=d(!1),W=d(null);function G(e){if(e==null||e===``)return;let t=typeof e==`number`?e:parseFloat(String(e).trim());return Number.isFinite(t)?t:void 0}function Me(){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 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 K(){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 q={toolbar:{container:[[{header:[1,2,3,!1]}],[`bold`,`italic`,`underline`,`strike`],[{color:[]},{background:[]}],[{list:`ordered`},{list:`bullet`}],[{align:[]}],[`link`,`image`,`video`],[`clean`]],handlers:{image:Me,video:K}}},Ne={modules:q,placeholder:`请输入场馆详情内容`},Pe={modules:q,placeholder:``},J=p({name:``,venue_types:[],unit_name:``,district:``,ticket_type:``,appointment_type:``,open_mode:``,open_time:``,reservation_notice:``,ticket_content:``,booking_method:``,visit_form:``,consultation_hours:``,address:``,contact_phone:``,lat:void 0,lng:void 0,cover_image:``,gallery_media:[],detail_html:``,sort:0,is_active:!0});function Y(){return N.value?.role===`super_admin`}function Fe(e){return e===`pending`?`待审核`:e===`rejected`?`已退回`:e===`approved`?`已通过`:`-`}function Ie(e){return e===`pending`?`orangered`:e===`rejected`?`red`:e===`approved`?`green`:`gray`}async function Le(t){try{await b.post(`/venues/${t.id}/audit/approve`),e.success(`已通过审核`),await $()}catch(t){e.error(t?.response?.data?.message??`操作失败`)}}function Re(e){B.value=e.id,V.value=``,H.value=!0}async function ze(){if(!B.value)return!1;try{return await b.post(`/venues/${B.value}/audit/reject`,{remark:V.value||void 0}),e.success(`已退回`),H.value=!1,await $(),!0}catch(t){return e.error(t?.response?.data?.message??`操作失败`),!1}}function Be(e){let t=(e||``).trim();return t?t.replace(/<[^>]+>/g,` `).replace(/\s+/g,` `):`-`}function Ve(e,t){return t?e.find(e=>e.item_value===t)?.item_label||t:`-`}function He(e,t,n=`arcoblue`){return t&&e.find(e=>e.item_value===t)?.item_remark||n}function Ue(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 X(){return`CRFBZ-NTART-YU4XX-LCDGK-3J456-VKBK2`}function Z(){return`szkp-map-admin`}function We(e,t){let n=String(e||``).trim();if(n)return x(n);let r=String(t||``).trim();return r?x(r):``}async function Q(e){let t=new FormData;t.append(`file`,e);let n=(await b.post(`/upload`,t))?.data||{};return We(n.url,n.path)}function Ge(){Ee.value+=1}function Ke(e,t){t&&(Oe.value=e,P.value=x(t),De.value=!0)}function qe(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 $(){ee.value=!0;try{let{data:e}=await b.get(`/venues`,{params:{keyword:z.keyword||void 0,district:z.district||void 0,venue_type:z.venue_type||void 0,ticket_type:z.ticket_type||void 0,open_mode:z.open_mode||void 0,is_active:z.is_active===`all`?void 0:z.is_active,audit_status:z.audit_status===`all`?void 0:z.audit_status}});Ce.value=e}catch(t){e.error(t?.response?.data?.message??`加载场馆失败`)}finally{ee.value=!1}}async function Je(){let{data:e}=await b.get(`/dict-items`,{params:{dict_type:`district`,active_only:1}});k.value=e}async function Ye(){let{data:e}=await b.get(`/dict-items`,{params:{dict_type:`venue_type`,active_only:1}});A.value=e}async function Xe(){let{data:e}=await b.get(`/dict-items`,{params:{dict_type:`venue_appointment_type`,active_only:1}});we.value=e}async function Ze(){let{data:e}=await b.get(`/dict-items`,{params:{dict_type:`venue_open_mode`,active_only:1}});j.value=e}async function Qe(){let{data:e}=await b.get(`/dict-items`,{params:{dict_type:`ticket_type`,active_only:1}});M.value=e}async function $e(){let{data:e}=await b.get(`/me`);N.value=e}function et(){D.value=!0,O.value=null,J.name=``,J.venue_types=[],J.unit_name=``,J.district=``,J.ticket_type=``,J.open_mode=``,J.open_time=``,J.reservation_notice=``,J.ticket_content=``,J.booking_method=``,J.visit_form=``,J.consultation_hours=``,J.address=``,J.contact_phone=``,J.lat=void 0,J.lng=void 0,J.cover_image=``,J.gallery_media=[],J.detail_html=``,J.sort=0,J.is_active=!0,Ge(),C.value=!0}function tt(e){D.value=!1,O.value=e.id,J.name=e.name,J.venue_types=Array.isArray(e.venue_types)&&e.venue_types.length?[...e.venue_types]:e.venue_type?[e.venue_type]:[],J.unit_name=e.unit_name??``,J.district=e.district??``,J.ticket_type=e.ticket_type??``,J.appointment_type=e.appointment_type??``,J.open_mode=e.open_mode??``,J.open_time=e.open_time??``,J.reservation_notice=e.reservation_notice??``,J.ticket_content=e.ticket_content??``,J.booking_method=e.booking_method??``,J.visit_form=e.visit_form??``,J.consultation_hours=e.consultation_hours??``,J.address=e.address??``,J.contact_phone=e.contact_phone??``,J.lat=G(e.lat),J.lng=G(e.lng),J.cover_image=e.cover_image??``,J.gallery_media=Array.isArray(e.gallery_media)?[...e.gallery_media]:[],J.detail_html=e.detail_html??``;let t=e.sort;J.sort=typeof t==`number`&&Number.isFinite(t)?t:parseInt(String(t??`0`),10)||0,J.is_active=e.is_active,Ge(),C.value=!0}async function nt(t){try{let n=qe(t);if(!n)return e.warning(`未识别到上传文件`),!1;J.cover_image=await Q(n),e.success(`封面上传成功`)}catch(t){e.error(t?.response?.data?.message??`封面上传失败`)}return!1}async function rt(t){try{let n=qe(t);if(!n)return e.warning(`未识别到上传文件`),!1;let r=await Q(n);if(!r)return e.error(`上传成功但未返回可用地址`),!1;let 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 it(...e){nt(e)}function at(...e){rt(e)}function ot(e){J.gallery_media.splice(e,1)}function st(){J.cover_image=``}function ct(t){let n=t?.target,r=(n?.getAttribute?.(`src`)||n?.src||``).trim();!r||r===`about:blank`||e.error(`图片地址无法访问,请检查后端 storage 访问配置`)}function lt(){$()}function ut(e,t,n,r){if(e===void 0||t===void 0)return``;let i=`coord:${e},${t};title:${n||`场馆位置`};addr:${r||``}`;return`https://apis.map.qq.com/uri/v1/marker?marker=${encodeURIComponent(i)}&referer=${encodeURIComponent(Z())}`}function dt(t){let n=ut(G(t.lat),G(t.lng),t.name,t.address);if(!n){e.warning(`该场馆尚未设置经纬度`);return}window.open(n,`_blank`)}async function ft(){if(window.TMap)return;let e=X();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 pt(e,t){let n=window.TMap;F&&(I&&I.setMap(null),I=new n.MultiMarker({map:F,styles:{marker:new n.MarkerStyle({width:24,height:35})},geometries:[{id:`picked`,styleId:`marker`,position:new n.LatLng(e,t)}]}),F.setCenter(new n.LatLng(e,t)))}function mt(e,t){let n=window.TMap;if(!F||!n)return;let r=new n.LatLng(e,t);F.resize?.(),F.setCenter(r),F.setZoom(13),setTimeout(()=>{F.resize?.(),F.setCenter(r)},120)}async function ht(e,t){let{data:n}=await b.get(`/map/reverse-geocode`,{params:{lat:e,lng:t}});L.value={lat:e,lng:t,address:n.address||``},n.district&&k.value.some(e=>e.item_value===n.district)&&(J.district=n.district)}async function gt(){await ft();let t=window.TMap,n=typeof J.lat==`number`?J.lat:R.lat,r=typeof J.lng==`number`?J.lng:R.lng,i=new t.LatLng(n,r);F?F.setCenter(i):(F=new t.Map(Te.value,{center:i,zoom:13}),F.on(`click`,async t=>{let n=Number(t.latLng.getLat().toFixed(6)),r=Number(t.latLng.getLng().toFixed(6));pt(n,r);try{await ht(n,r)}catch(t){e.error(t?.response?.data?.message??`逆地理编码失败`)}})),mt(n,r),J.lat!==void 0&&J.lng!==void 0?(pt(J.lat,J.lng),L.value={lat:J.lat,lng:J.lng,address:J.address||``}):(I&&=(I.setMap(null),null),L.value=null)}async function _t(){Se.value=!0,T.value=``,E.value=[],w.value=!0;try{await i(),setTimeout(async()=>{try{await gt()}catch(t){e.error(t?.message??`地图初始化失败`)}finally{w.value=!1}},250)}catch{w.value=!1}}async function vt(){if(!T.value.trim()){E.value=[];return}w.value=!0;try{let{data:e}=await b.get(`/map/search`,{params:{keyword:T.value,region:`苏州`}});E.value=e}catch(t){e.error(t?.response?.data?.message??`地图搜索失败`)}finally{w.value=!1}}async function yt(e){pt(e.lat,e.lng),L.value={lat:e.lat,lng:e.lng,address:e.address||``};try{await ht(e.lat,e.lng)}catch{}}function bt(){return L.value?(J.lat=L.value.lat,J.lng=L.value.lng,J.address=L.value.address||J.address,Se.value=!1,!0):(e.warning(`请先点击地图或选择搜索结果`),!1)}async function xt(){S.value=!0;try{if(!J.district.trim())return e.warning(`行政区为必填项`),!1;if(!J.address.trim())return e.warning(`场馆地址为必填项`),!1;if(typeof J.lat!=`number`||typeof J.lng!=`number`)return e.warning(`经纬度为必填项`),!1;let t={...J,sort:Y()?J.sort:void 0};return D.value?(await b.post(`/venues`,t),e.success(`创建场馆成功`)):O.value&&(await b.put(`/venues/${O.value}`,t),e.success(`更新场馆成功`)),await $(),!0}catch(t){return e.error(t?.response?.data?.message??`保存失败`),!1}finally{S.value=!1}}async function St(){return await xt()}async function Ct(){try{let e=(await b.get(`/venues/import/template`,{responseType:`blob`,timeout:6e4})).data,t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`场馆导入模板.xlsx`,n.click(),URL.revokeObjectURL(t)}catch(t){e.error(t?.response?.data?.message??`下载失败`)}}function wt(){W.value=null,U.value=!0}async function Tt(t){let n=t.target,r=n.files?.[0];if(n.value=``,r){Ae.value=!0;try{let e=new FormData;e.append(`file`,r);let{data:t}=await b.post(`/venues/import/preview`,e,{headers:{"Content-Type":`multipart/form-data`},timeout:12e4});W.value=t}catch(t){e.error(t?.response?.data?.message??`解析失败`)}finally{Ae.value=!1}}}function Et(e){return String(e.name??``)}function Dt(e,t){if(t==null||t===``)return`—`;let n=String(t);return e.find(e=>e.item_value===n)?.item_label??n}function Ot(e,t,n,r){let i=r[t];if(i!=null&&String(i).trim()!==``)return Dt(e,i);let a=r[n];return a!=null&&String(a).trim()!==``?String(a):`—`}function kt(e){let t=e.venue_types;if(!Array.isArray(t)||t.length===0)return`—`;let n=t.map(e=>Dt(A.value,e)).filter(e=>e!==`—`);return n.length?n.join(`,`):`—`}function At(e){return e===!0?`是`:e===!1?`否`:`—`}function jt(e,t){if(e==null)return`—`;let n=String(e).trim();if(!n)return`—`;let r=n.replace(/<[^>]+>/g,` `).replace(/\s+/g,` `).trim();return r?r.length>t?`${r.slice(0,t)}…`:r:`(富文本)`}async function Mt(){let t=W.value?.rows?.filter(e=>e.ok).map(e=>e.payload)??[];if(!t.length){e.warning(`没有可导入的有效行`);return}je.value=!0;try{await b.post(`/venues/import/confirm`,{rows:t}),e.success(`导入成功`),U.value=!1,W.value=null,await $()}catch(t){e.error(t?.response?.data?.message??`导入失败`)}finally{je.value=!1}}return r(async()=>{await $e(),await Promise.all([$(),Je(),Ye(),Xe(),Ze(),Qe()])}),(e,r)=>{let i=a(`a-input`),d=a(`a-option`),p=a(`a-select`),v=a(`a-button`),b=a(`a-space`),O=a(`a-alert`),N=a(`a-table-column`),F=a(`a-tag`),I=a(`a-tooltip`),R=a(`a-table`),B=a(`a-card`),G=a(`a-typography-text`),Me=a(`a-spin`),K=a(`a-modal`),q=a(`a-textarea`),X=a(`a-form-item`),Z=a(`a-input-number`),We=a(`a-switch`),Q=a(`a-upload`),Ge=a(`a-form`),qe=a(`a-typography-paragraph`),Je=a(`a-list-item`),Ye=a(`a-list`);return n(),m(u,null,[_(B,{title:`场馆管理 / 场馆列表`},{extra:o(()=>[_(b,{wrap:``},{default:o(()=>[_(i,{modelValue:z.keyword,"onUpdate:modelValue":r[0]||=e=>z.keyword=e,placeholder:`搜索名称/地址/开放时间/预约须知等`,style:{width:`260px`}},null,8,[`modelValue`]),_(p,{modelValue:z.venue_type,"onUpdate:modelValue":r[1]||=e=>z.venue_type=e,"allow-clear":``,placeholder:`筛选主题`,style:{width:`180px`}},{default:o(()=>[(n(!0),m(u,null,y(A.value,e=>(n(),c(d,{key:e.id,value:e.item_value},{default:o(()=>[s(f(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),_(p,{modelValue:z.ticket_type,"onUpdate:modelValue":r[2]||=e=>z.ticket_type=e,"allow-clear":``,placeholder:`筛选门票类型`,style:{width:`180px`}},{default:o(()=>[(n(!0),m(u,null,y(M.value,e=>(n(),c(d,{key:e.id,value:e.item_value},{default:o(()=>[s(f(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),_(p,{modelValue:z.open_mode,"onUpdate:modelValue":r[3]||=e=>z.open_mode=e,"allow-clear":``,placeholder:`筛选开放模式`,style:{width:`180px`}},{default:o(()=>[(n(!0),m(u,null,y(j.value,e=>(n(),c(d,{key:e.id,value:e.item_value},{default:o(()=>[s(f(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),_(p,{modelValue:z.district,"onUpdate:modelValue":r[4]||=e=>z.district=e,"allow-clear":``,placeholder:`筛选行政区`,style:{width:`180px`}},{default:o(()=>[(n(!0),m(u,null,y(k.value,e=>(n(),c(d,{key:e.id,value:e.item_value},{default:o(()=>[s(f(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),_(p,{modelValue:z.is_active,"onUpdate:modelValue":r[5]||=e=>z.is_active=e,style:{width:`120px`}},{default:o(()=>[_(d,{value:`all`},{default:o(()=>[...r[36]||=[s(`全部状态`,-1)]]),_:1}),_(d,{value:`1`},{default:o(()=>[...r[37]||=[s(`启用`,-1)]]),_:1}),_(d,{value:`0`},{default:o(()=>[...r[38]||=[s(`禁用`,-1)]]),_:1})]),_:1},8,[`modelValue`]),_(p,{modelValue:z.audit_status,"onUpdate:modelValue":r[6]||=e=>z.audit_status=e,style:{width:`130px`},placeholder:`审核状态`},{default:o(()=>[_(d,{value:`all`},{default:o(()=>[...r[39]||=[s(`全部审核`,-1)]]),_:1}),_(d,{value:`approved`},{default:o(()=>[...r[40]||=[s(`已通过`,-1)]]),_:1}),_(d,{value:`pending`},{default:o(()=>[...r[41]||=[s(`待审核`,-1)]]),_:1}),_(d,{value:`rejected`},{default:o(()=>[...r[42]||=[s(`已退回`,-1)]]),_:1})]),_:1},8,[`modelValue`]),_(v,{type:`primary`,onClick:lt},{default:o(()=>[...r[43]||=[s(`查询`,-1)]]),_:1}),_(v,{onClick:$},{default:o(()=>[...r[44]||=[s(`刷新`,-1)]]),_:1}),_(v,{type:`primary`,onClick:et},{default:o(()=>[...r[45]||=[s(`新增场馆`,-1)]]),_:1}),Y()?(n(),c(v,{key:0,onClick:wt},{default:o(()=>[...r[46]||=[s(`导入场馆`,-1)]]),_:1})):l(``,!0)]),_:1})]),default:o(()=>[_(O,{style:{"margin-bottom":`12px`}},{default:o(()=>[...r[47]||=[s(` 场馆管理员账号仅能看到和编辑自己绑定的场馆;超级管理员可管理全部场馆。 `,-1)]]),_:1}),_(R,{class:`list-data-table`,scroll:{x:g(ne)},data:Ce.value,loading:ee.value,"row-key":`id`,pagination:{pageSize:10}},{columns:o(()=>[_(N,{title:`ID`,"data-index":`id`,width:80,ellipsis:!0,tooltip:!0}),_(N,{title:`场馆名称`,"data-index":`name`,width:180,"min-width":140,ellipsis:!0,tooltip:!0}),_(N,{title:`主题`,width:200},{cell:o(({record:e})=>[Ue(e).length?(n(),c(b,{key:0,wrap:``,size:4},{default:o(()=>[(n(!0),m(u,null,y(Ue(e),(t,r)=>(n(),c(F,{key:e.id+`-vt-`+r,color:He(A.value,t,`arcoblue`)},{default:o(()=>[s(f(Ve(A.value,t)),1)]),_:2},1032,[`color`]))),128))]),_:2},1024)):(n(),m(`span`,re,`-`))]),_:1}),_(N,{title:`所属单位名称`,"data-index":`unit_name`,width:180,"min-width":140,ellipsis:!0,tooltip:!0}),_(N,{title:`行政区`,"data-index":`district`,width:120,ellipsis:!0,tooltip:!0}),_(N,{title:`门票类型`,width:120},{cell:o(({record:e})=>[_(F,{color:He(M.value,e.ticket_type,`green`)},{default:o(()=>[s(f(Ve(M.value,e.ticket_type)),1)]),_:2},1032,[`color`])]),_:1}),_(N,{title:`开放模式`,width:150},{cell:o(({record:e})=>[h(`span`,null,f(Ve(j.value,e.open_mode)),1)]),_:1}),_(N,{title:`开放时间`,width:180,"min-width":140,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(Be(e.open_time)),1)]),_:1}),_(N,{title:`预约须知`,width:200,"min-width":160,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(Be(e.reservation_notice)),1)]),_:1}),_(N,{title:`门票`,width:200,"min-width":160,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(Be(e.ticket_content)),1)]),_:1}),_(N,{title:`地址`,"data-index":`address`,width:220,"min-width":160,ellipsis:!0,tooltip:!0}),_(N,{title:`排序`,"data-index":`sort`,width:90,ellipsis:!0,tooltip:!0}),_(N,{title:`状态`,width:100},{cell:o(({record:e})=>[_(F,{color:e.is_active?`green`:`gray`},{default:o(()=>[s(f(e.is_active?`启用`:`禁用`),1)]),_:2},1032,[`color`])]),_:1}),_(N,{title:`审核状态`,width:120},{cell:o(({record:e})=>[e.audit_status===`rejected`&&e.audit_remark?(n(),c(I,{key:0,content:e.audit_remark},{default:o(()=>[_(F,{color:Ie(e.audit_status)},{default:o(()=>[s(f(Fe(e.audit_status)),1)]),_:2},1032,[`color`])]),_:2},1032,[`content`])):(n(),c(F,{key:1,color:Ie(e.audit_status)},{default:o(()=>[s(f(Fe(e.audit_status)),1)]),_:2},1032,[`color`]))]),_:1}),_(N,{title:`操作`,width:280,fixed:`right`,align:`center`},{cell:o(({record:e})=>[_(b,{wrap:``},{default:o(()=>[_(v,{type:`text`,onClick:t=>tt(e)},{default:o(()=>[...r[48]||=[s(`编辑`,-1)]]),_:1},8,[`onClick`]),_(v,{type:`text`,onClick:t=>dt(e)},{default:o(()=>[...r[49]||=[s(`打开位置`,-1)]]),_:1},8,[`onClick`]),Y()&&(e.audit_status===`pending`||e.audit_status===`rejected`)?(n(),m(u,{key:0},[_(v,{type:`text`,status:`success`,onClick:t=>Le(e)},{default:o(()=>[...r[50]||=[s(`通过`,-1)]]),_:1},8,[`onClick`]),_(v,{type:`text`,status:`danger`,onClick:t=>Re(e)},{default:o(()=>[...r[51]||=[s(`退回`,-1)]]),_:1},8,[`onClick`])],64)):l(``,!0)]),_:2},1024)]),_:1})]),_:1},8,[`scroll`,`data`,`loading`])]),_:1}),_(K,{visible:U.value,"onUpdate:visible":r[8]||=e=>U.value=e,title:`导入场馆`,width:`80%`,footer:!1,"body-style":ke},{default:o(()=>[_(b,{direction:`vertical`,fill:``,style:{width:`100%`}},{default:o(()=>[_(O,{type:`info`},{default:o(()=>[...r[52]||=[s(` 请先下载模板,按「选项」工作表中的下拉值填写;多个主题用英文逗号分隔。封面与轮播图不在导入范围内,请在列表中编辑上传。经纬度可留空,导入后请在列表编辑中通过「地图选点」填写;经度与纬度须成对填写或同时留空。 `,-1)]]),_:1}),_(b,{wrap:``},{default:o(()=>[_(v,{type:`primary`,onClick:Ct},{default:o(()=>[...r[53]||=[s(`下载导入模板`,-1)]]),_:1}),h(`label`,ie,[r[54]||=h(`span`,{class:`import-file-btn`},`选择 Excel 并预览`,-1),h(`input`,{class:`import-file-input`,type:`file`,accept:`.xlsx,.xls`,onChange:Tt},null,32)])]),_:1}),_(Me,{loading:Ae.value,style:{width:`100%`}},{default:o(()=>[W.value?(n(),m(u,{key:0},[_(G,{type:`secondary`},{default:o(()=>[s(` 共 `+f(W.value.summary.total)+` 行,有效 `+f(W.value.summary.valid)+`,无效 `+f(W.value.summary.invalid),1)]),_:1}),_(R,{data:W.value.rows,pagination:!1,size:`small`,scroll:{x:xe},class:`venue-import-preview-table`,style:{"margin-top":`12px`}},{columns:o(()=>[_(N,{title:`行号`,width:64,fixed:`left`},{cell:o(({record:e})=>[s(f(e.row_index),1)]),_:1}),_(N,{title:`结果`,width:76,fixed:`left`},{cell:o(({record:e})=>[_(F,{color:e.ok?`green`:`red`},{default:o(()=>[s(f(e.ok?`OK`:`错误`),1)]),_:2},1032,[`color`])]),_:1}),_(N,{title:`校验说明`,width:220,fixed:`left`},{cell:o(({record:e})=>[e.ok?(n(),m(`span`,ae,`—`)):(n(),c(G,{key:0,type:`danger`,ellipsis:{rows:3,showTooltip:!0}},{default:o(()=>[s(f(e.errors.join(`;`)),1)]),_:2},1024))]),_:1}),_(N,{title:`场馆名称`,width:140,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(Et(e.payload)),1)]),_:1}),_(N,{title:`主题`,width:180,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(kt(e.payload)),1)]),_:1}),_(N,{title:`行政区`,width:100,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(String(e.payload.district??``)||`—`),1)]),_:1}),_(N,{title:`预约类型`,width:120},{cell:o(({record:e})=>[s(f(Ot(we.value,`appointment_type`,`_raw_appointment_label`,e.payload)),1)]),_:1}),_(N,{title:`门票类型`,width:100},{cell:o(({record:e})=>[s(f(Ot(M.value,`ticket_type`,`_raw_ticket_type_label`,e.payload)),1)]),_:1}),_(N,{title:`开放模式`,width:130},{cell:o(({record:e})=>[s(f(Ot(j.value,`open_mode`,`_raw_open_mode_label`,e.payload)),1)]),_:1}),_(N,{title:`所属单位`,width:120,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(String(e.payload.unit_name??``)||`—`),1)]),_:1}),_(N,{title:`预约方式`,width:120,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(String(e.payload.booking_method??``)||`—`),1)]),_:1}),_(N,{title:`参观形式`,width:120,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(String(e.payload.visit_form??``)||`—`),1)]),_:1}),_(N,{title:`开放时间`,width:130,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(String(e.payload.open_time??``)||`—`),1)]),_:1}),_(N,{title:`咨询预约时间`,width:130,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(String(e.payload.consultation_hours??``)||`—`),1)]),_:1}),_(N,{title:`咨询预约联系电话`,width:120,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(String(e.payload.contact_phone??``)||`—`),1)]),_:1}),_(N,{title:`排序`,width:64},{cell:o(({record:e})=>[s(f(e.payload.sort===0||e.payload.sort?String(e.payload.sort):`—`),1)]),_:1}),_(N,{title:`启用`,width:64},{cell:o(({record:e})=>[s(f(At(e.payload.is_active)),1)]),_:1}),_(N,{title:`场馆地址`,width:160,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[s(f(String(e.payload.address??``)||`—`),1)]),_:1}),_(N,{title:`经度`,width:100},{cell:o(({record:e})=>[s(f(e.payload.lng!=null&&e.payload.lng!==``?String(e.payload.lng):`—`),1)]),_:1}),_(N,{title:`纬度`,width:100},{cell:o(({record:e})=>[s(f(e.payload.lat!=null&&e.payload.lat!==``?String(e.payload.lat):`—`),1)]),_:1}),_(N,{title:`门票说明`,width:180,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[_(I,{content:String(e.payload.ticket_content??``)},{default:o(()=>[h(`span`,null,f(jt(e.payload.ticket_content,48)),1)]),_:2},1032,[`content`])]),_:1}),_(N,{title:`场馆详情`,width:200},{cell:o(({record:e})=>[_(I,{content:String(e.payload.detail_html??``)},{default:o(()=>[h(`span`,null,f(jt(e.payload.detail_html,40)),1)]),_:2},1032,[`content`])]),_:1}),_(N,{title:`预约须知`,width:200,ellipsis:!0,tooltip:!0},{cell:o(({record:e})=>[_(I,{content:String(e.payload.reservation_notice??``)},{default:o(()=>[h(`span`,null,f(jt(e.payload.reservation_notice,48)),1)]),_:2},1032,[`content`])]),_:1})]),_:1},8,[`data`,`scroll`]),h(`div`,oe,[_(b,null,{default:o(()=>[_(v,{onClick:r[7]||=e=>U.value=!1},{default:o(()=>[...r[55]||=[s(`取消`,-1)]]),_:1}),_(v,{type:`primary`,loading:je.value,disabled:W.value.summary.valid===0,onClick:Mt},{default:o(()=>[...r[56]||=[s(` 确认导入 `,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1})])],64)):l(``,!0)]),_:1},8,[`loading`])]),_:1})]),_:1},8,[`visible`]),_(K,{visible:H.value,"onUpdate:visible":r[10]||=e=>H.value=e,title:`退回场馆`,"on-before-ok":ze},{default:o(()=>[_(q,{modelValue:V.value,"onUpdate:modelValue":r[9]||=e=>V.value=e,placeholder:`退回说明(选填)`,"auto-size":{minRows:3,maxRows:8}},null,8,[`modelValue`])]),_:1},8,[`visible`]),_(K,{visible:C.value,"onUpdate:visible":r[32]||=e=>C.value=e,title:D.value?`新增场馆`:`编辑场馆`,width:`70%`,"body-style":ke,"confirm-loading":S.value,"on-before-ok":St},{default:o(()=>[_(Ge,{model:J,layout:`vertical`,class:`admin-modal-form`},{default:o(()=>[_(X,{label:`场馆名称`,required:``},{default:o(()=>[_(i,{modelValue:J.name,"onUpdate:modelValue":r[11]||=e=>J.name=e},null,8,[`modelValue`])]),_:1}),_(X,{label:`主题(可多选)`},{default:o(()=>[_(p,{modelValue:J.venue_types,"onUpdate:modelValue":r[12]||=e=>J.venue_types=e,multiple:``,"allow-clear":``,placeholder:`请选择主题`},{default:o(()=>[(n(!0),m(u,null,y(A.value,e=>(n(),c(d,{key:e.id,value:e.item_value},{default:o(()=>[s(f(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),_(X,{label:`行政区`,required:``},{default:o(()=>[_(p,{modelValue:J.district,"onUpdate:modelValue":r[13]||=e=>J.district=e,"allow-clear":``,placeholder:`请选择行政区`},{default:o(()=>[(n(!0),m(u,null,y(k.value,e=>(n(),c(d,{key:e.id,value:e.item_value},{default:o(()=>[s(f(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),_(X,{label:`预约类型`},{default:o(()=>[_(p,{modelValue:J.appointment_type,"onUpdate:modelValue":r[14]||=e=>J.appointment_type=e,"allow-clear":``,placeholder:`不选则不限;可选仅团队或个人团队均可`},{default:o(()=>[(n(!0),m(u,null,y(we.value,e=>(n(),c(d,{key:e.id,value:e.item_value},{default:o(()=>[s(f(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),_(X,{label:`门票类型`},{default:o(()=>[_(p,{modelValue:J.ticket_type,"onUpdate:modelValue":r[15]||=e=>J.ticket_type=e,"allow-clear":``,placeholder:`请选择门票类型`},{default:o(()=>[(n(!0),m(u,null,y(M.value,e=>(n(),c(d,{key:e.id,value:e.item_value},{default:o(()=>[s(f(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),_(X,{label:`开放模式`},{default:o(()=>[_(p,{modelValue:J.open_mode,"onUpdate:modelValue":r[16]||=e=>J.open_mode=e,"allow-clear":``,placeholder:`请选择开放模式`},{default:o(()=>[(n(!0),m(u,null,y(j.value,e=>(n(),c(d,{key:e.id,value:e.item_value},{default:o(()=>[s(f(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),_(X,{label:`所属单位`},{default:o(()=>[_(i,{modelValue:J.unit_name,"onUpdate:modelValue":r[17]||=e=>J.unit_name=e,placeholder:`所属单位名称`},null,8,[`modelValue`])]),_:1}),_(X,{label:`预约方式`},{default:o(()=>[_(i,{modelValue:J.booking_method,"onUpdate:modelValue":r[18]||=e=>J.booking_method=e,placeholder:`预约方式说明`},null,8,[`modelValue`])]),_:1}),_(X,{label:`参观形式`},{default:o(()=>[_(i,{modelValue:J.visit_form,"onUpdate:modelValue":r[19]||=e=>J.visit_form=e,placeholder:`参观形式说明`},null,8,[`modelValue`])]),_:1}),_(X,{label:`开放时间`},{default:o(()=>[_(i,{modelValue:J.open_time,"onUpdate:modelValue":r[20]||=e=>J.open_time=e,placeholder:`如:周一至周五 09:00-17:00,周末 09:00-18:00`},null,8,[`modelValue`])]),_:1}),_(X,{label:`咨询预约时间`},{default:o(()=>[_(i,{modelValue:J.consultation_hours,"onUpdate:modelValue":r[21]||=e=>J.consultation_hours=e,placeholder:`咨询预约时间说明`},null,8,[`modelValue`])]),_:1}),_(X,{label:`咨询预约联系电话`},{default:o(()=>[_(i,{modelValue:J.contact_phone,"onUpdate:modelValue":r[22]||=e=>J.contact_phone=e,placeholder:`选填,前台可点击拨打`},null,8,[`modelValue`])]),_:1}),_(X,{label:`排序`},{default:o(()=>[_(Z,{modelValue:J.sort,"onUpdate:modelValue":r[23]||=e=>J.sort=e,min:0,disabled:!Y()},null,8,[`modelValue`,`disabled`])]),_:1}),_(X,{label:`状态`},{default:o(()=>[_(We,{modelValue:J.is_active,"onUpdate:modelValue":r[24]||=e=>J.is_active=e},null,8,[`modelValue`])]),_:1}),_(X,{label:`场馆地址与经纬度`,required:``,class:`admin-modal-form__full`},{default:o(()=>[h(`div`,se,[_(i,{modelValue:J.address,"onUpdate:modelValue":r[25]||=e=>J.address=e,class:`venue-address-coord-row__address`,placeholder:`场馆地址`,"allow-clear":``},null,8,[`modelValue`]),_(Z,{modelValue:J.lng,"onUpdate:modelValue":r[26]||=e=>J.lng=e,class:`venue-address-coord-row__lng`,precision:7,placeholder:`经度`,"hide-button":``},null,8,[`modelValue`]),_(Z,{modelValue:J.lat,"onUpdate:modelValue":r[27]||=e=>J.lat=e,class:`venue-address-coord-row__lat`,precision:7,placeholder:`纬度`,"hide-button":``},null,8,[`modelValue`]),_(v,{type:`primary`,class:`venue-address-coord-row__map`,onClick:_t},{default:o(()=>[...r[57]||=[s(`地图选点`,-1)]]),_:1})])]),_:1}),_(X,{label:`门票说明`,class:`admin-modal-form__full`},{default:o(()=>[_(q,{modelValue:J.ticket_content,"onUpdate:modelValue":r[28]||=e=>J.ticket_content=e,"auto-size":{minRows:3,maxRows:12},placeholder:`门票说明`},null,8,[`modelValue`])]),_:1}),_(X,{label:`封面与轮播`,class:`admin-modal-form__full`},{default:o(()=>[h(`div`,ce,[h(`div`,le,[r[61]||=h(`div`,{class:`venue-cover-carousel-row__sub`},`封面图(单张)`,-1),_(b,{direction:`vertical`,fill:``,style:{width:`100%`}},{default:o(()=>[_(Q,{"auto-upload":!1,"show-file-list":!1,accept:`image/*`,"before-upload":nt,onChange:it},{"upload-button":o(()=>[_(v,null,{default:o(()=>[...r[58]||=[s(`上传封面`,-1)]]),_:1})]),_:1}),_(G,{type:`secondary`},{default:o(()=>[...r[59]||=[s(`图片尺寸推荐 1200×600`,-1)]]),_:1}),J.cover_image?(n(),c(b,{key:0,direction:`vertical`,align:`start`},{default:o(()=>[h(`img`,{src:g(x)(J.cover_image),style:{width:`80px`,border:`1px solid #e5e6eb`,"border-radius":`4px`,cursor:`zoom-in`},onError:ct,onClick:r[29]||=e=>Ke(`image`,J.cover_image)},null,40,ue),_(v,{size:`mini`,status:`danger`,onClick:st},{default:o(()=>[...r[60]||=[s(`删除封面`,-1)]]),_:1})]),_:1})):l(``,!0)]),_:1})]),h(`div`,de,[r[65]||=h(`div`,{class:`venue-cover-carousel-row__sub`},`轮播图/视频`,-1),h(`div`,fe,[h(`div`,pe,[_(Q,{"auto-upload":!1,"show-file-list":!1,multiple:``,accept:`image/*,video/*`,"before-upload":rt,onChange:at},{"upload-button":o(()=>[_(v,{type:`primary`},{default:o(()=>[...r[62]||=[s(`新增轮播资源`,-1)]]),_:1})]),_:1}),_(G,{type:`secondary`,style:{"margin-top":`12px`,display:`block`}},{default:o(()=>[...r[63]||=[s(`图片尺寸推荐 1200×600`,-1)]]),_:1})]),h(`div`,me,[(n(!0),m(u,null,y(J.gallery_media,(e,i)=>(n(),c(B,{key:e.url+i,size:`small`,style:{width:`90px`}},{title:o(()=>[s(f(e.type===`video`?`视频`:`图片`),1)]),extra:o(()=>[_(v,{size:`mini`,status:`danger`,onClick:e=>ot(i)},{default:o(()=>[...r[64]||=[s(`删除`,-1)]]),_:1},8,[`onClick`])]),default:o(()=>[e.type===`image`?(n(),m(`img`,{key:0,src:g(x)(e.url),style:{width:`70px`,height:`45px`,"object-fit":`cover`,border:`1px solid #e5e6eb`,"border-radius":`4px`,cursor:`zoom-in`},onError:ct,onClick:t=>Ke(`image`,e.url)},null,40,he)):(n(),m(`video`,{key:1,src:g(x)(e.url),controls:``,style:{width:`70px`,height:`45px`,"object-fit":`cover`,cursor:`zoom-in`},onClick:t(t=>Ke(`video`,e.url),[`stop`])},null,8,ge))]),_:2},1024))),128))])])])])]),_:1}),_(X,{label:`预约须知`,class:`admin-modal-form__full`},{default:o(()=>[(n(),c(te,{modelValue:J.reservation_notice,"onUpdate:modelValue":r[30]||=e=>J.reservation_notice=e,"editor-options":Pe,"field-key":`venue-reservation`,key:`venue-reservation-${Ee.value}`},null,8,[`modelValue`]))]),_:1}),_(X,{label:`场馆详情`,class:`admin-modal-form__full`},{default:o(()=>[(n(),c(te,{modelValue:J.detail_html,"onUpdate:modelValue":r[31]||=e=>J.detail_html=e,"editor-options":Ne,"field-key":`venue-detail`,"min-height":260,key:`venue-detail-${Ee.value}`},null,8,[`modelValue`]))]),_:1})]),_:1},8,[`model`])]),_:1},8,[`visible`,`title`,`confirm-loading`]),_(K,{visible:De.value,"onUpdate:visible":r[33]||=e=>De.value=e,title:`媒体预览`,width:`72%`,footer:!1},{default:o(()=>[Oe.value===`image`&&P.value?(n(),m(`img`,{key:0,src:P.value,style:{display:`block`,"max-width":`100%`,"max-height":`72vh`,margin:`0 auto`},onError:ct},null,40,_e)):Oe.value===`video`&&P.value?(n(),m(`video`,{key:1,src:P.value,controls:``,autoplay:``,style:{display:`block`,width:`100%`,"max-height":`72vh`}},null,8,ve)):l(``,!0)]),_:1},8,[`visible`]),_(K,{visible:Se.value,"onUpdate:visible":r[35]||=e=>Se.value=e,title:`地图选点(腾讯地图)`,width:`70%`,"body-style":ke,"on-before-ok":bt},{default:o(()=>[_(b,{style:{"margin-bottom":`12px`,width:`100%`}},{default:o(()=>[_(i,{modelValue:T.value,"onUpdate:modelValue":r[34]||=e=>T.value=e,placeholder:`输入关键词搜索,如:苏州博物馆`,style:{width:`420px`}},null,8,[`modelValue`]),_(v,{type:`primary`,loading:w.value,onClick:vt},{default:o(()=>[...r[66]||=[s(`搜索`,-1)]]),_:1},8,[`loading`])]),_:1}),h(`div`,ye,[h(`div`,{ref_key:`mapContainerRef`,ref:Te,style:{height:`520px`,flex:`1`,border:`1px solid #e5e6eb`}},null,512),h(`div`,be,[r[67]||=h(`div`,{style:{"margin-bottom":`8px`,color:`#86909c`}},`搜索结果`,-1),_(Ye,{size:`small`},{default:o(()=>[(n(!0),m(u,null,y(E.value,(e,t)=>(n(),c(Je,{key:t,onClick:t=>yt(e)},{default:o(()=>[_(qe,{ellipsis:{rows:1}},{default:o(()=>[s(f(e.title),1)]),_:2},1024),_(G,{type:`secondary`},{default:o(()=>[s(f(e.address),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128))]),_:1})])]),L.value?(n(),c(O,{key:0,type:`info`,style:{"margin-top":`12px`}},{default:o(()=>[s(` 已选坐标:`+f(L.value.lng)+`, `+f(L.value.lat),1),r[68]||=h(`br`,null,null,-1),s(` 地址:`+f(L.value.address||`-`),1)]),_:1})):l(``,!0)]),_:1},8,[`visible`])],64)}}}),[[`__scopeId`,`data-v-6069076d`]]);export{S as default}; |