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
31 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}from"./axios-CiYFffbI.js";import{I as t,N as n,O as r,V as i,Y as a,_ as o,d as s,f as c,i as l,it as u,kt as d,l 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}from"./http-LCi9aT1G.js";import{u as x}from"./index-CjvhnPjB.js";import{t as ee}from"./RichEditorField-CZW1UsZx.js";import{t as S}from"./useModalDirtyGuard-Cg6oNoR1.js";import{r as C,t as te}from"./adminMediaLimits-BMNnjSzY.js";import{t as ne}from"./listTableRowIndex-PNK2HoFW.js";import{t as w}from"./mediaUrl-CZi-l8UA.js";var re=[`src`,`onClick`],ie={key:1,style:{color:`#86909c`}},ae=[`src`],oe=[`src`],se={class:`study-tour-modal-shell`},ce={class:`study-tour-tab-pane`},le={class:`study-tour-tags-field`},ue={class:`study-tour-tags-input-row`},de={class:`study-tour-tags-list`},fe={key:0,style:{color:`#86909c`}},pe={class:`venue-add-row venue-add-row--system`},me={class:`venue-add-row`},he={class:`venue-items-box`},ge={key:0,class:`venue-item-addr`},_e={key:0,class:`cover-preview-wrap`},ve=[`src`],ye={class:`study-tour-tab-pane`},be={class:`study-tour-tab-pane`},xe={class:`route-group-head`},Se={class:`study-tour-tab-pane`},Ce={class:`course-sort`},we={class:`study-tour-tab-pane`},Te={class:`study-tour-tab-pane`},Ee=1280,T=50,De=`72vh`,E=x(v({__name:`StudyTourList`,setup(v){let x=u(!1),E=u(!1),D=u(!1),O=u(!0),k=u(null),A=u([]),j=u([]),M=u([]),N=u(null),Oe=u(``),P=u(void 0),F=u(void 0),I=u(void 0),ke=u(``),Ae=u(``),L=p({current:1,pageSize:10}),je={height:De,overflow:`hidden`,padding:`12px 20px 16px`},R=u(0),z=u(`basic`),B=u(!1),Me=u(`image`),Ne=u(``),V=u(``),H=u(void 0),U=u(``),W=u(``),Pe=u(``),Fe=u(null),Ie=u(!1),G=u(!1),K=u([]),q=u(!1),J=p({name:``,tags:[],venue_items:[],org_name:``,seasons:[],suitable_count:``,suitable_audience:``,duration:``,contact_person:``,contact_phones:``,cover_image:``,intro_html:``,route_plans:[],courses:[],fee_html:``,implementation_html:``,sort:0,is_on_shelf:!0}),Le=f(()=>new Map(M.value.map(e=>[e.item_value,e.item_label]))),Re=f(()=>O.value?G.value?`新增线路(已从申报表导入)`:`新增线路`:`编辑线路`);function Y(){return JSON.stringify({name:J.name,tags:J.tags,venue_items:J.venue_items,org_name:J.org_name,seasons:J.seasons,suitable_count:J.suitable_count,suitable_audience:J.suitable_audience,duration:J.duration,contact_person:J.contact_person,contact_phones:J.contact_phones,cover_image:J.cover_image,intro_html:J.intro_html,route_plans:J.route_plans,courses:J.courses,fee_html:J.fee_html,implementation_html:J.implementation_html,sort:J.sort,is_on_shelf:J.is_on_shelf,tagInput:V.value,customVenueName:U.value,customVenueAddress:W.value})}function X(){Pe.value=Y()}function ze(){return D.value&&Y()!==Pe.value}let Be=S(ze,`研学线路有未保存改动,确认关闭吗?`);function Ve(e){return Array.isArray(e.venue_items)&&e.venue_items.length?e.venue_items.map(e=>e.type===`custom`?{type:`custom`,name:e.name||``,address:e.address||``}:{type:`system`,venue_id:Number(e.venue_id)||0}).filter(e=>e.type===`system`?e.venue_id>0:!!e.name.trim()):(e.venue_ids||[]).map(e=>({type:`system`,venue_id:e}))}function He(e,t){if(e.type===`system`){let n=j.value.find(t=>t.id===e.venue_id);return n?`${t+1}. ${n.name}`:`${t+1}. 场馆#${e.venue_id}`}return`${t+1}. ${e.name}(自定义)`}function Ue(e,t){let n=(e||[]).map(e=>t.get(e)||e).filter(Boolean);return n.length?n.join(``):`-`}function Z(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{data:n}=await b.post(`/upload`,t);return Z(n?.url,n?.path)}function We(){R.value+=1}function Ge(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}function Ke(){let t=this.quill,n=document.createElement(`input`);n.type=`file`,n.accept=`image/*`,n.onchange=async()=>{let r=n.files?.[0];if(!r)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??t?.message??`图片上传失败`)}},n.click()}function qe(){let t=this.quill,n=document.createElement(`input`);n.type=`file`,n.accept=`video/*`,n.onchange=async()=>{let r=n.files?.[0];if(r)try{let 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??t?.message??`视频上传失败`)}},n.click()}function Je(e){return{modules:{toolbar:{container:[[{header:[1,2,3,!1]}],[`bold`,`italic`,`underline`,`strike`],[{color:[]},{background:[]}],[{list:`ordered`},{list:`bullet`}],[{align:[]}],[`link`,`image`,`video`],[`clean`]],handlers:{image:Ke,video:qe}}},placeholder:e}}let Ye=Je(`请输入线路简介`),Xe=Je(`请输入线路收费标准`),Ze=Je(`请输入研学时间、报名方式、活动提示等内容`);function Qe(e){let t=String(e.suitable_audience||``).trim();if(t)return t;let n=e.grade_levels;return Array.isArray(n)&&n.length?n.join(``):``}function $e(){J.name=``,J.tags=[],J.venue_items=[],J.org_name=``,J.seasons=[],J.suitable_count=``,J.suitable_audience=``,J.duration=``,J.contact_person=``,J.contact_phones=``,J.cover_image=``,J.intro_html=``,J.route_plans=[],J.courses=[],J.fee_html=``,J.implementation_html=``,J.sort=0,J.is_on_shelf=!0,V.value=``,H.value=void 0,U.value=``,W.value=``,z.value=`basic`}function et(e){J.name=e.name,J.tags=Array.isArray(e.tags)?[...e.tags]:[],J.venue_items=Ve(e),J.org_name=e.org_name||``,J.seasons=Array.isArray(e.seasons)?[...e.seasons]:[],J.suitable_count=e.suitable_count||``,J.suitable_audience=Qe(e),J.duration=e.duration||``,J.contact_person=e.contact_person||``,J.contact_phones=e.contact_phones||``,J.cover_image=e.cover_image||``,J.intro_html=e.intro_html||``,J.route_plans=Array.isArray(e.route_plans)?e.route_plans.map(e=>({date_label:e.date_label||``,items:(e.items||[]).map(e=>({time:e.time||``,activity:e.activity||``,location:e.location||``}))})):[],J.courses=Array.isArray(e.courses)?e.courses.map((e,t)=>({sort:e.sort??t+1,name:e.name||``,content:e.content||``})):[],J.fee_html=e.fee_html||``,J.implementation_html=e.implementation_html||``,J.sort=e.sort??0,J.is_on_shelf=e.is_on_shelf!==!1}function tt(){let t=H.value;if(!t){e.warning(`请选择系统场馆`);return}if(J.venue_items.some(e=>e.type===`system`&&e.venue_id===t)){e.warning(`该场馆已添加`);return}J.venue_items.push({type:`system`,venue_id:t}),H.value=void 0}function nt(){let t=U.value.trim();if(!t){e.warning(`请填写自定义场馆名称`);return}let n={type:`custom`,name:t},r=W.value.trim();r&&(n.address=r),J.venue_items.push(n),U.value=``,W.value=``}function rt(e){if(e<=0)return;let t=[...J.venue_items];[t[e-1],t[e]]=[t[e],t[e-1]],J.venue_items=t}function it(e){if(e>=J.venue_items.length-1)return;let t=[...J.venue_items];[t[e+1],t[e]]=[t[e],t[e+1]],J.venue_items=t}function at(e){J.venue_items.splice(e,1)}function ot(){J.route_plans.push({date_label:``,items:[{time:``,activity:``,location:``}]})}function st(e){J.route_plans.splice(e,1)}function ct(e){let t=J.route_plans[e];t&&J.route_plans.splice(e+1,0,{date_label:t.date_label,items:t.items.map(e=>({time:e.time,activity:e.activity,location:e.location}))})}function lt(e){J.route_plans[e]?.items.push({time:``,activity:``,location:``})}function ut(e,t){J.route_plans[e]?.items.splice(t,1)}function dt(e){if(e<=0)return;let t=[...J.route_plans];[t[e-1],t[e]]=[t[e],t[e-1]],J.route_plans=t}function ft(e){if(e>=J.route_plans.length-1)return;let t=[...J.route_plans];[t[e+1],t[e]]=[t[e],t[e+1]],J.route_plans=t}function pt(e,t){let n=J.route_plans[e]?.items;!n||t<=0||([n[t-1],n[t]]=[n[t],n[t-1]])}function mt(e,t){let n=J.route_plans[e]?.items;!n||t>=n.length-1||([n[t+1],n[t]]=[n[t],n[t+1]])}function ht(e){return!e.time.trim()&&!e.activity.trim()&&!e.location.trim()}function gt(){for(let e=0;e<J.route_plans.length;e++){let t=J.route_plans[e];if(!t.date_label.trim())return`线路规划第 ${e+1} 个日期分组未填写日期/分组名称`;for(let n=0;n<t.items.length;n++)if(ht(t.items[n]))return`线路规划「${t.date_label.trim()||`${e+1}`}」第 ${n+1} 行行程的时间、行程安排、地点均未填写`}return null}function _t(){for(let e=0;e<J.courses.length;e++){let t=J.courses[e];if(!t.name.trim()&&!t.content.trim())return`研学课程第 ${e+1} 项未填写课程名称与课程内容`}return null}function vt(){J.courses.push({sort:J.courses.length+1,name:``,content:``})}function yt(e){J.courses.splice(e,1),J.courses.forEach((e,t)=>{e.sort=t+1})}function bt(e){if(e<=0)return;let t=[...J.courses];[t[e-1],t[e]]=[t[e],t[e-1]],t.forEach((e,t)=>{e.sort=t+1}),J.courses=t}function xt(e){if(e>=J.courses.length-1)return;let t=[...J.courses];[t[e+1],t[e]]=[t[e],t[e+1]],t.forEach((e,t)=>{e.sort=t+1}),J.courses=t}function St(){let t=V.value.trim();if(!t){e.warning(`请输入标签内容`);return}if(J.tags.includes(t)){e.warning(`标签已存在`);return}J.tags=[...J.tags,t],V.value=``}function Ct(e){let t=[...J.tags];t.splice(e,1),J.tags=t}function wt(){return N.value?.role===`venue_admin`}async function Tt(){M.value=(await b.get(`/dict-items`,{params:{dict_type:`study_tour_season`,active_only:1}})).data||[]}async function Et(){let{data:e}=await b.get(`/me`);N.value=e}async function $(t=!1){x.value=!0;try{let e={},n=Oe.value.trim();n&&(e.keyword=n),P.value!=null&&P.value>0&&(e.venue_id=P.value),(F.value===`0`||F.value===`1`)&&(e.is_on_shelf=F.value),I.value&&(e.season=I.value);let r=ke.value.trim();r&&(e.suitable_audience=r);let i=Ae.value.trim();i&&(e.org_name=i);let[a,o]=await Promise.all([b.get(`/study-tours`,{params:e}),b.get(`/venues`)]);A.value=a.data,j.value=o.data;let s=new Set(A.value.map(e=>e.id));K.value=K.value.filter(e=>s.has(e)),t||(L.current=1)}catch(t){e.error(t?.response?.data?.message??`加载研学线路失败`)}finally{x.value=!1}}function Dt(e){L.current=e}function Ot(e){K.value=e.map(e=>Number(e)).filter(e=>Number.isFinite(e)&&e>0)}function kt(e,t){if(!e)return t;let n=/filename\*=(?:UTF-8'')?([^;]+)/i.exec(e);if(n?.[1])try{let e=decodeURIComponent(n[1].trim().replace(/^"+|"+$/g,``));if(e)return e}catch{}return(/filename="?([^";]+)/i.exec(e)?.[1]||``).trim().replace(/^"+|"+$/g,``)||t}async function At(e){let t=e?.response?.data;if(t instanceof Blob)try{let e=await t.text(),n=JSON.parse(e);if(n?.message)return n.message}catch{}return e?.response?.data?.message??e?.message??`导出失败`}async function jt(t){let n=[...new Set(t.filter(e=>Number.isFinite(e)&&e>0))];if(!n.length){e.warning(`请先勾选要导出的线路`);return}if(n.length>T){e.warning(`单次最多导出 ${T} 条线路`);return}if(!q.value){q.value=!0;try{let t=await b.post(`/study-tours/export`,{ids:n},{responseType:`blob`,timeout:12e4}),r=t.data;if(r.type&&(r.type.includes(`json`)||r.type.includes(`text/html`))){let t=await r.text(),n=`导出失败`;try{let e=JSON.parse(t);e?.message&&(n=e.message)}catch{}e.error(n);return}let i=n.length===1?`研学线路申报表.docx`:`研学线路申报表-${new Date().toISOString().slice(0,10)}.zip`,a=kt(t.headers[`content-disposition`],i),o=URL.createObjectURL(r),s=document.createElement(`a`);s.href=o,s.download=a,s.click(),URL.revokeObjectURL(o),e.success(n.length===1?`已导出 Word`:`已导出 ${n.length} 条线路`)}catch(t){e.error(await At(t))}finally{q.value=!1}}}function Mt(){jt(K.value)}function Nt(e){jt([e.id])}async function Pt(t){try{await b.put(`/study-tours/${t.id}`,{is_on_shelf:!t.is_on_shelf}),e.success(`状态已切换`),await $(!0)}catch(t){e.error(t?.response?.data?.message??`操作失败`)}}function Ft(){O.value=!0,k.value=null,G.value=!1,$e(),We(),X(),D.value=!0,r(()=>{X()})}function It(e){O.value=!1,k.value=e.id,G.value=!1,$e(),et(e),We(),X(),D.value=!0,r(()=>{X()})}function Lt(){Fe.value?.click()}async function Rt(t){let n=t.target,i=n.files?.[0];if(n.value=``,!i)return;let a=i.name.split(`.`).pop()?.toLowerCase();if(a!==`doc`&&a!==`docx`){e.warning(`请选择 .doc 或 .docx 申报表`);return}if(i.size>10*1024*1024){e.warning(`申报表文件不能超过 10MB`);return}Ie.value=!0;try{let t=new FormData;t.append(`file`,i);let{data:n}=await b.post(`/study-tours/parse-doc`,t,{timeout:12e4}),a=n?.parsed;if(!a||typeof a!=`object`){e.error(`申报表解析结果为空`);return}O.value=!0,k.value=null,G.value=!0,$e(),et(a),We(),z.value=`basic`,D.value=!0,X(),r(()=>{X()});let o=Array.isArray(n?.warnings)?n.warnings.filter(Boolean):[];o.length?e.warning(`已从申报表导入,请核对后保存。${o.join(``)}`):e.success(`已从申报表导入,请核对后保存`)}catch(t){e.error(t?.response?.data?.message??`申报表导入失败`)}finally{Ie.value=!1}}async function zt(t){try{let n=Ge(t);if(!n)return e.warning(`未识别到上传文件`),!1;let r=C(n);if(r)return e.warning(r),!1;J.cover_image=await Q(n),e.success(`封面上传成功`)}catch(t){e.error(t?.response?.data?.message??`封面上传失败`)}return!1}function Bt(...e){zt(e)}function Vt(){J.cover_image=``}function Ht(e,t){t&&(Me.value=e,Ne.value=w(t),B.value=!0)}function Ut(){e.error(`图片地址无法访问,请检查后端 storage 访问配置`)}function Wt(){return{name:J.name.trim(),tags:J.tags.map(e=>e.trim()).filter(Boolean),venue_items:J.venue_items.map(e=>{if(e.type===`system`)return{type:`system`,venue_id:e.venue_id};let t={type:`custom`,name:e.name.trim()};return e.address?.trim()&&(t.address=e.address.trim()),t}),org_name:J.org_name.trim(),seasons:[...J.seasons],suitable_count:J.suitable_count.trim(),suitable_audience:J.suitable_audience.trim(),duration:J.duration.trim(),contact_person:J.contact_person.trim(),contact_phones:J.contact_phones.trim(),cover_image:J.cover_image||``,intro_html:J.intro_html||``,route_plans:J.route_plans.map(e=>({date_label:e.date_label.trim(),items:e.items.map(e=>({time:e.time.trim(),activity:e.activity.trim(),location:e.location.trim()}))})),courses:J.courses.map((e,t)=>({sort:e.sort||t+1,name:e.name.trim(),content:e.content.trim()})),fee_html:J.fee_html||``,implementation_html:J.implementation_html||``,sort:J.sort??0,is_on_shelf:J.is_on_shelf}}async function Gt(){if(!J.name.trim())return e.warning(`请填写线路名称`),z.value=`basic`,!1;if(!J.venue_items.length)return e.warning(`请至少添加一个场馆(系统或自定义)`),z.value=`basic`,!1;let t=gt();if(t)return e.warning(t),z.value=`route`,!1;let n=_t();if(n)return e.warning(n),z.value=`courses`,!1;E.value=!0;try{let t=Wt();return O.value?(await b.post(`/study-tours`,t),e.success(`新增线路成功`)):k.value&&(await b.put(`/study-tours/${k.value}`,t),e.success(`更新线路成功`)),D.value=!1,X(),await $(),!0}catch(t){return e.error(t?.response?.data?.message??`保存失败`),!1}finally{E.value=!1}}async function Kt(t){try{await b.delete(`/study-tours/${t.id}`),e.success(`删除成功`),await $()}catch(t){e.error(t?.response?.data?.message??`删除失败`)}}function qt(e){return Array.isArray(e.venue_items)&&e.venue_items.length?e.venue_items.length:(e.venue_ids||[]).length}function Jt(e){let t=Number(e);return Number.isFinite(t)?String(t):`0`}function Yt(e){return`浏览 `+Jt(e.view_count)}return n(async()=>{await Et().catch(()=>void 0),await Tt().catch(()=>void 0),await $()}),(e,n)=>{let r=i(`a-input-search`),u=i(`a-input`),f=i(`a-option`),p=i(`a-select`),v=i(`a-button`),b=i(`a-space`),S=i(`a-table-column`),C=i(`a-tag`),T=i(`a-popconfirm`),De=i(`a-table`),O=i(`a-card`),k=i(`a-modal`),N=i(`a-form-item`),Pe=i(`a-input-number`),G=i(`a-switch`),Y=i(`a-empty`),X=i(`a-upload`),ze=i(`a-typography-text`),Ve=i(`a-form`),Z=i(`a-tab-pane`),Q=i(`a-tabs`);return t(),m(l,null,[_(O,{title:`研学线路管理 / 线路列表`},{default:a(()=>[_(b,{wrap:``,style:{"margin-bottom":`12px`}},{default:a(()=>[_(r,{modelValue:Oe.value,"onUpdate:modelValue":n[0]||=e=>Oe.value=e,placeholder:`关键词(线路名称 / 自定义场馆)`,style:{width:`260px`},"allow-clear":``,onSearch:$,onClear:$},null,8,[`modelValue`]),_(u,{modelValue:Ae.value,"onUpdate:modelValue":n[1]||=e=>Ae.value=e,placeholder:`组织单位`,style:{width:`160px`},"allow-clear":``,onPressEnter:$,onClear:$},null,8,[`modelValue`]),wt()?c(``,!0):(t(),s(p,{key:0,modelValue:P.value,"onUpdate:modelValue":n[2]||=e=>P.value=e,placeholder:`系统场馆`,"allow-clear":``,"allow-search":``,style:{width:`180px`},onChange:$},{default:a(()=>[(t(!0),m(l,null,y(j.value,e=>(t(),s(f,{key:e.id,value:e.id},{default:a(()=>[o(d(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])),_(p,{modelValue:I.value,"onUpdate:modelValue":n[3]||=e=>I.value=e,placeholder:`季节`,"allow-clear":``,style:{width:`120px`},onChange:$},{default:a(()=>[(t(!0),m(l,null,y(M.value,e=>(t(),s(f,{key:e.item_value,value:e.item_value},{default:a(()=>[o(d(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),_(u,{modelValue:ke.value,"onUpdate:modelValue":n[4]||=e=>ke.value=e,placeholder:`适配人群`,style:{width:`140px`},"allow-clear":``,onPressEnter:$,onClear:$},null,8,[`modelValue`]),_(p,{modelValue:F.value,"onUpdate:modelValue":n[5]||=e=>F.value=e,placeholder:`上架状态`,"allow-clear":``,style:{width:`120px`},onChange:$},{default:a(()=>[_(f,{value:`1`},{default:a(()=>[...n[27]||=[o(`上架`,-1)]]),_:1}),_(f,{value:`0`},{default:a(()=>[...n[28]||=[o(`下架`,-1)]]),_:1})]),_:1},8,[`modelValue`]),_(v,{type:`primary`,onClick:n[6]||=()=>$()},{default:a(()=>[...n[29]||=[o(`查询`,-1)]]),_:1}),h(`input`,{ref_key:`importDocInput`,ref:Fe,type:`file`,accept:`.doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document`,style:{display:`none`},onChange:Rt},null,544),_(v,{loading:Ie.value,onClick:Lt},{default:a(()=>[...n[30]||=[o(`从申报表导入`,-1)]]),_:1},8,[`loading`]),_(v,{loading:q.value,disabled:!K.value.length,onClick:Mt},{default:a(()=>[o(`导出选中`+d(K.value.length?`${K.value.length}`:``),1)]),_:1},8,[`loading`,`disabled`]),_(v,{type:`primary`,onClick:Ft},{default:a(()=>[...n[31]||=[o(`新建线路`,-1)]]),_:1})]),_:1}),_(De,{class:`list-data-table study-tour-table`,scroll:{x:Ee},data:A.value,loading:x.value,"row-key":`id`,"row-selection":{type:`checkbox`,selectedRowKeys:K.value,showCheckedAll:!0,onlyCurrent:!1},pagination:{current:L.current,pageSize:L.pageSize,total:A.value.length,showTotal:!0},onSelectionChange:Ot,onPageChange:Dt},{columns:a(()=>[_(S,{title:``,width:50},{cell:a(({rowIndex:e})=>[o(d(g(ne)(e,L.current,L.pageSize)),1)]),_:1}),_(S,{title:`线路名称`,"data-index":`name`,width:150,ellipsis:!0,tooltip:!0}),_(S,{title:`组织单位`,width:140,ellipsis:!0,tooltip:!0},{cell:a(({record:e})=>[o(d(e.org_name||`-`),1)]),_:1}),_(S,{title:`封面`,width:72,align:`center`},{cell:a(({record:e})=>[g(w)(e.cover_image)?(t(),m(`img`,{key:0,src:g(w)(e.cover_image),alt:``,style:{width:`44px`,height:`44px`,"object-fit":`cover`,"border-radius":`4px`,cursor:`pointer`},onClick:t=>Ht(`image`,e.cover_image),onError:Ut},null,40,re)):(t(),m(`span`,ie,`-`))]),_:1}),_(S,{title:`季节`,width:100,ellipsis:!0},{cell:a(({record:e})=>[o(d(Ue(e.seasons,Le.value)),1)]),_:1}),_(S,{title:`场馆数`,width:72},{cell:a(({record:e})=>[o(d(qt(e)),1)]),_:1}),_(S,{title:`浏览量`,width:88},{cell:a(({record:e})=>[o(d(Yt(e)),1)]),_:1}),_(S,{title:`排序`,"data-index":`sort`,width:64}),_(S,{title:`上架`,width:80},{cell:a(({record:e})=>[_(C,{color:e.is_on_shelf?`green`:`gray`},{default:a(()=>[o(d(e.is_on_shelf?`上架`:`下架`),1)]),_:2},1032,[`color`])]),_:1}),_(S,{title:`操作`,width:240,fixed:`right`,align:`center`},{cell:a(({record:e})=>[_(b,{wrap:``,size:4},{default:a(()=>[_(v,{type:`text`,onClick:t=>It(e)},{default:a(()=>[...n[32]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),_(v,{type:`text`,loading:q.value,onClick:t=>Nt(e)},{default:a(()=>[...n[33]||=[o(`导出`,-1)]]),_:1},8,[`loading`,`onClick`]),_(v,{type:`text`,status:`warning`,onClick:t=>Pt(e)},{default:a(()=>[o(d(e.is_on_shelf?`下架`:`上架`),1)]),_:2},1032,[`onClick`]),_(T,{content:`确定删除该线路?`,onOk:t=>Kt(e)},{default:a(()=>[_(v,{type:`text`,status:`danger`},{default:a(()=>[...n[34]||=[o(`删除`,-1)]]),_:1})]),_:1},8,[`onOk`])]),_:2},1024)]),_:1})]),_:1},8,[`scroll`,`data`,`loading`,`row-selection`,`pagination`])]),_:1}),_(k,{visible:B.value,"onUpdate:visible":n[7]||=e=>B.value=e,footer:!1,width:`auto`},{default:a(()=>[Me.value===`image`?(t(),m(`img`,{key:0,src:Ne.value,alt:`预览`,style:{"max-width":`100%`,"max-height":`75vh`,display:`block`,margin:`0 auto`}},null,8,ae)):(t(),m(`video`,{key:1,src:Ne.value,controls:``,style:{"max-width":`100%`,"max-height":`75vh`,display:`block`,margin:`0 auto`}},null,8,oe))]),_:1},8,[`visible`]),_(k,{visible:D.value,"onUpdate:visible":n[26]||=e=>D.value=e,title:Re.value,width:`82%`,"body-style":je,"confirm-loading":E.value,"on-before-ok":Gt,"on-before-cancel":g(Be),class:`study-tour-edit-modal`},{default:a(()=>[h(`div`,se,[_(Q,{"active-key":z.value,"onUpdate:activeKey":n[25]||=e=>z.value=e,type:`rounded`,class:`study-tour-edit-tabs`},{default:a(()=>[_(Z,{key:`basic`,title:`基本情况`},{default:a(()=>[h(`div`,ce,[_(Ve,{model:J,layout:`vertical`,class:`admin-modal-form study-tour-basic-form`},{default:a(()=>[_(N,{label:`线路名称`,required:``},{default:a(()=>[_(u,{modelValue:J.name,"onUpdate:modelValue":n[8]||=e=>J.name=e},null,8,[`modelValue`])]),_:1}),_(N,{label:`组织单位名称`},{default:a(()=>[_(u,{modelValue:J.org_name,"onUpdate:modelValue":n[9]||=e=>J.org_name=e},null,8,[`modelValue`])]),_:1}),_(N,{label:`排序`},{default:a(()=>[_(Pe,{modelValue:J.sort,"onUpdate:modelValue":n[10]||=e=>J.sort=e,min:0},null,8,[`modelValue`])]),_:1}),_(N,{label:`上架状态`},{default:a(()=>[_(G,{modelValue:J.is_on_shelf,"onUpdate:modelValue":n[11]||=e=>J.is_on_shelf=e},null,8,[`modelValue`])]),_:1}),_(N,{label:`适宜人数`},{default:a(()=>[_(u,{modelValue:J.suitable_count,"onUpdate:modelValue":n[12]||=e=>J.suitable_count=e,placeholder:`如 30人、10-30人`},null,8,[`modelValue`])]),_:1}),_(N,{label:`对应季节(多选)`},{default:a(()=>[_(p,{modelValue:J.seasons,"onUpdate:modelValue":n[13]||=e=>J.seasons=e,multiple:``,"allow-clear":``,placeholder:`请选择`},{default:a(()=>[(t(!0),m(l,null,y(M.value,e=>(t(),s(f,{key:e.item_value,value:e.item_value},{default:a(()=>[o(d(e.item_label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),_(N,{label:`适配人群`},{default:a(()=>[_(u,{modelValue:J.suitable_audience,"onUpdate:modelValue":n[14]||=e=>J.suitable_audience=e,placeholder:`如 小学,初中;多个以逗号分隔`},null,8,[`modelValue`])]),_:1}),_(N,{label:`研学时长`},{default:a(()=>[_(u,{modelValue:J.duration,"onUpdate:modelValue":n[15]||=e=>J.duration=e,placeholder:`如 3天2晚、单日6小时`},null,8,[`modelValue`])]),_:1}),_(N,{label:`线路联络人`},{default:a(()=>[_(u,{modelValue:J.contact_person,"onUpdate:modelValue":n[16]||=e=>J.contact_person=e},null,8,[`modelValue`])]),_:1}),_(N,{label:`咨询电话(多个以顿号、分隔)`},{default:a(()=>[_(u,{modelValue:J.contact_phones,"onUpdate:modelValue":n[17]||=e=>J.contact_phones=e,placeholder:`15800000000、0512-12345678`},null,8,[`modelValue`])]),_:1}),_(N,{label:`标签`},{default:a(()=>[h(`div`,le,[h(`div`,ue,[_(u,{modelValue:V.value,"onUpdate:modelValue":n[18]||=e=>V.value=e,placeholder:`请输入标签`,class:`study-tour-tags-input`},null,8,[`modelValue`]),_(v,{type:`primary`,onClick:St},{default:a(()=>[...n[35]||=[o(`添加`,-1)]]),_:1})]),h(`div`,de,[(t(!0),m(l,null,y(J.tags,(e,n)=>(t(),s(C,{key:`${e}-${n}`,closable:``,onClose:e=>Ct(n)},{default:a(()=>[o(d(e),1)]),_:2},1032,[`onClose`]))),128)),J.tags.length?c(``,!0):(t(),m(`span`,fe,`暂无标签`))])])]),_:1}),_(N,{label:`线路涉及的场馆、基地等研学点位(系统 + 自定义,可排序)`,required:``,class:`admin-modal-form__full`},{default:a(()=>[_(b,{direction:`vertical`,fill:``,style:{width:`100%`}},{default:a(()=>[h(`div`,pe,[_(p,{modelValue:H.value,"onUpdate:modelValue":n[19]||=e=>H.value=e,"allow-search":``,"allow-clear":``,placeholder:`选择系统场馆`,class:`venue-add-select`},{default:a(()=>[(t(!0),m(l,null,y(j.value,e=>(t(),s(f,{key:e.id,value:e.id},{default:a(()=>[o(d(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),_(v,{type:`outline`,class:`venue-add-btn`,onClick:tt},{default:a(()=>[...n[36]||=[o(`添加系统场馆`,-1)]]),_:1})]),h(`div`,me,[_(u,{modelValue:U.value,"onUpdate:modelValue":n[20]||=e=>U.value=e,placeholder:`自定义场馆名称`,class:`venue-add-input`},null,8,[`modelValue`]),_(u,{modelValue:W.value,"onUpdate:modelValue":n[21]||=e=>W.value=e,placeholder:`地址(可选,纯展示)`,class:`venue-add-input`},null,8,[`modelValue`]),_(v,{type:`outline`,onClick:nt},{default:a(()=>[...n[37]||=[o(`添加自定义场馆`,-1)]]),_:1})]),h(`div`,he,[(t(!0),m(l,null,y(J.venue_items,(e,r)=>(t(),m(`div`,{key:`vi-${r}-${e.type}`,class:`venue-item-row`},[h(`span`,null,d(He(e,r)),1),e.type===`custom`&&e.address?(t(),m(`span`,ge,d(e.address),1)):c(``,!0),_(b,null,{default:a(()=>[_(v,{size:`mini`,disabled:r===0,onClick:e=>rt(r)},{default:a(()=>[...n[38]||=[o(`上移`,-1)]]),_:1},8,[`disabled`,`onClick`]),_(v,{size:`mini`,disabled:r===J.venue_items.length-1,onClick:e=>it(r)},{default:a(()=>[...n[39]||=[o(`下移`,-1)]]),_:1},8,[`disabled`,`onClick`]),_(T,{content:`确定移除该场馆?`,onOk:e=>at(r)},{default:a(()=>[_(v,{size:`mini`,status:`danger`},{default:a(()=>[...n[40]||=[o(`移除`,-1)]]),_:1})]),_:1},8,[`onOk`])]),_:2},1024)]))),128)),J.venue_items.length?c(``,!0):(t(),s(Y,{key:0,description:`未添加场馆`}))])]),_:1})]),_:1}),_(N,{label:`封面图`,class:`admin-modal-form__full`},{default:a(()=>[_(b,{direction:`vertical`,fill:``,style:{width:`100%`}},{default:a(()=>[_(X,{"auto-upload":!1,"show-file-list":!1,accept:`image/*`,"before-upload":zt,onChange:Bt},{"upload-button":a(()=>[_(v,null,{default:a(()=>[...n[41]||=[o(`上传封面`,-1)]]),_:1})]),_:1}),_(ze,{type:`secondary`},{default:a(()=>[o(d(g(te)),1)]),_:1}),J.cover_image?(t(),m(`div`,_e,[h(`img`,{src:g(w)(J.cover_image),alt:`封面`,class:`study-tour-cover-thumb`,onError:Ut},null,40,ve),_(v,{size:`mini`,status:`danger`,onClick:Vt},{default:a(()=>[...n[42]||=[o(`删除封面`,-1)]]),_:1})])):c(``,!0)]),_:1})]),_:1})]),_:1},8,[`model`])])]),_:1}),_(Z,{key:`intro`,title:`线路简介`},{default:a(()=>[h(`div`,ye,[_(ee,{modelValue:J.intro_html,"onUpdate:modelValue":n[22]||=e=>J.intro_html=e,"field-key":`study-intro-${R.value}`,"editor-options":g(Ye),"min-height":420},null,8,[`modelValue`,`field-key`,`editor-options`])])]),_:1}),_(Z,{key:`route`,title:`线路规划`},{default:a(()=>[h(`div`,be,[_(b,{direction:`vertical`,fill:``,style:{width:`100%`}},{default:a(()=>[_(v,{type:`primary`,onClick:ot},{default:a(()=>[...n[43]||=[o(`新增日期分组`,-1)]]),_:1}),J.route_plans.length?c(``,!0):(t(),s(Y,{key:0,description:`暂无线路规划,可点击上方按钮添加`})),(t(!0),m(l,null,y(J.route_plans,(e,r)=>(t(),m(`div`,{key:`rp-${r}`,class:`route-group-card`},[h(`div`,xe,[_(u,{modelValue:e.date_label,"onUpdate:modelValue":t=>e.date_label=t,placeholder:`日期/分组,如 线路一、第一天、上午`,class:`route-date-input`},null,8,[`modelValue`,`onUpdate:modelValue`]),_(b,{wrap:``},{default:a(()=>[_(v,{size:`small`,disabled:r===0,onClick:e=>dt(r)},{default:a(()=>[...n[44]||=[o(`上移`,-1)]]),_:1},8,[`disabled`,`onClick`]),_(v,{size:`small`,disabled:r===J.route_plans.length-1,onClick:e=>ft(r)},{default:a(()=>[...n[45]||=[o(`下移`,-1)]]),_:1},8,[`disabled`,`onClick`]),_(T,{content:`确定删除该日期分组?`,onOk:e=>st(r)},{default:a(()=>[_(v,{size:`small`,status:`danger`},{default:a(()=>[...n[46]||=[o(`删除分组`,-1)]]),_:1})]),_:1},8,[`onOk`]),_(v,{size:`small`,type:`outline`,onClick:e=>ct(r)},{default:a(()=>[...n[47]||=[o(`复制分组`,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]),_(De,{data:e.items,pagination:!1,size:`small`,"row-key":(e,t)=>`rp-${r}-${t}`},{columns:a(()=>[_(S,{title:`时间`,width:140},{cell:a(({record:e})=>[_(u,{modelValue:e.time,"onUpdate:modelValue":t=>e.time=t,placeholder:`9:00-10:00`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),_(S,{title:`行程安排`},{cell:a(({record:e})=>[_(u,{modelValue:e.activity,"onUpdate:modelValue":t=>e.activity=t,placeholder:`行程安排`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),_(S,{title:`地点`,width:180},{cell:a(({record:e})=>[_(u,{modelValue:e.location,"onUpdate:modelValue":t=>e.location=t,placeholder:`地点`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),_(S,{title:`操作`,width:168,align:`center`},{cell:a(({rowIndex:t})=>[_(b,{size:4},{default:a(()=>[_(v,{type:`text`,size:`mini`,disabled:t===0,onClick:e=>pt(r,t)},{default:a(()=>[...n[48]||=[o(`上移`,-1)]]),_:1},8,[`disabled`,`onClick`]),_(v,{type:`text`,size:`mini`,disabled:t===e.items.length-1,onClick:e=>mt(r,t)},{default:a(()=>[...n[49]||=[o(`下移`,-1)]]),_:1},8,[`disabled`,`onClick`]),_(T,{content:`确定删除该行程?`,onOk:e=>ut(r,t)},{default:a(()=>[_(v,{type:`text`,status:`danger`,size:`mini`},{default:a(()=>[...n[50]||=[o(`删除`,-1)]]),_:1})]),_:1},8,[`onOk`])]),_:2},1024)]),_:2},1024)]),_:2},1032,[`data`,`row-key`]),_(v,{size:`small`,style:{"margin-top":`8px`},onClick:e=>lt(r)},{default:a(()=>[...n[51]||=[o(`添加行程行`,-1)]]),_:1},8,[`onClick`])]))),128))]),_:1})])]),_:1}),_(Z,{key:`courses`,title:`研学课程`},{default:a(()=>[h(`div`,Se,[_(b,{direction:`vertical`,fill:``,style:{width:`100%`}},{default:a(()=>[_(v,{type:`primary`,onClick:vt},{default:a(()=>[...n[52]||=[o(`新增课程`,-1)]]),_:1}),J.courses.length?c(``,!0):(t(),s(Y,{key:0,description:`暂无研学课程`})),(t(!0),m(l,null,y(J.courses,(e,r)=>(t(),m(`div`,{key:`course-${r}`,class:`course-row`},[h(`span`,Ce,d(r+1),1),_(u,{modelValue:e.name,"onUpdate:modelValue":t=>e.name=t,placeholder:`课程名称`,class:`course-name-input`},null,8,[`modelValue`,`onUpdate:modelValue`]),_(u,{modelValue:e.content,"onUpdate:modelValue":t=>e.content=t,placeholder:`课程内容`,class:`course-content-input`},null,8,[`modelValue`,`onUpdate:modelValue`]),_(b,null,{default:a(()=>[_(v,{size:`mini`,disabled:r===0,onClick:e=>bt(r)},{default:a(()=>[...n[53]||=[o(`上移`,-1)]]),_:1},8,[`disabled`,`onClick`]),_(v,{size:`mini`,disabled:r===J.courses.length-1,onClick:e=>xt(r)},{default:a(()=>[...n[54]||=[o(`下移`,-1)]]),_:1},8,[`disabled`,`onClick`]),_(T,{content:`确定删除该课程?`,onOk:e=>yt(r)},{default:a(()=>[_(v,{size:`mini`,status:`danger`},{default:a(()=>[...n[55]||=[o(`删除`,-1)]]),_:1})]),_:1},8,[`onOk`])]),_:2},1024)]))),128))]),_:1})])]),_:1}),_(Z,{key:`fee`,title:`收费标准`},{default:a(()=>[h(`div`,we,[_(ee,{modelValue:J.fee_html,"onUpdate:modelValue":n[23]||=e=>J.fee_html=e,"field-key":`study-fee-${R.value}`,"editor-options":g(Xe),"min-height":420},null,8,[`modelValue`,`field-key`,`editor-options`])])]),_:1}),_(Z,{key:`impl`,title:`计划实施`},{default:a(()=>[h(`div`,Te,[_(ee,{modelValue:J.implementation_html,"onUpdate:modelValue":n[24]||=e=>J.implementation_html=e,"field-key":`study-impl-${R.value}`,"editor-options":g(Ze),"min-height":420},null,8,[`modelValue`,`field-key`,`editor-options`])])]),_:1})]),_:1},8,[`active-key`])])]),_:1},8,[`visible`,`title`,`confirm-loading`,`on-before-cancel`])],64)}}}),[[`__scopeId`,`data-v-d095a016`]]);export{E as default};