|
|
import{C as e,Ct as t,D as n,E as r,G as i,H as a,I as o,P as s,Qt as c,S as l,T as u,X as d,Y as f,at as p,b as m,d as ee,et as h,ht as g,m as _,ot as v,q as y,rt as b,tn as x,x as S,z as C}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{_ as w,c as T,l as E,s as D}from"./index-BRORdtBI.js";import{n as O,t as k}from"./usePageLoad-BXNEThzM.js";import{d as A,i as j,n as M,v as N}from"./assets-BFCbSZRl.js";import{c as P,d as F,f as I,h as L,i as R,l as te,o as z,p as B,t as V,u as H}from"./tiandituMap-BWmh1toR.js";var ne={class:`pick-map-wrap`},re={key:0,class:`pick-search-bar`},ie={key:1,class:`pick-search-results`},ae=[`onClick`],oe={key:2,class:`pick-map-error`},se={key:3,class:`pick-map-shell`},ce={key:0,class:`pick-map-loading`},U={key:4,class:`pick-hint`},W=D(n({__name:`TiandituPickMap`,props:s({height:{default:360},defaultKeyword:{default:``}},{longitude:{default:``},longitudeModifiers:{},latitude:{default:``},latitudeModifiers:{}}),emits:[`update:longitude`,`update:latitude`],setup(t){let n=t,s=h(t,`longitude`),d=h(t,`latitude`),v=`tianditu-pick-map-${Math.random().toString(36).slice(2)}`,S=g(null),w=g(``),T=g(!1),D=g(``),O=g(!1),k=g([]),A=null,j=null,M=null,N=null,W=null,G=!1;function K(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return Number.isFinite(t)?t:null}function q(){let e=K(s.value),t=K(d.value);return e!=null&&t!=null?{lng:e,lat:t,zoom:14}:{lng:V.lng,lat:V.lat,zoom:14}}function J(){if(W?.(),W=null,G=!1,A&&j)try{A.removeOverLay(j)}catch{}j=null,A?.destroy?.(),A=null,M=null,S.value&&(S.value.innerHTML=``)}function Y(e,t,n=16){s.value=e.toFixed(6),d.value=t.toFixed(6),A&&N&&(B(A,N,{lng:e,lat:t},n),X(N,e,t))}function X(e,t,n){A&&(j&&=(A.removeOverLay(j),null),j=new e.Marker(new e.LngLat(t,n)),A.addOverLay(j))}function le(e){!A||!e.LocalSearch||(M=new e.LocalSearch(A,{pageCapacity:10,onSearchComplete:e=>{if(O.value=!1,Number(e.getResultType())!==1){k.value=[],E.warning(`未找到相关地点,请换个关键词试试`);return}let t=F(e.getPois()).filter(e=>!!I(e));k.value=t,t.length||E.warning(`未找到有效坐标的地点,请换个关键词试试`)}}))}function Z(){let e=D.value.trim();if(!e){E.warning(`请输入搜索关键词`);return}if(!M){E.warning(`地图尚未就绪,请稍后再试`);return}O.value=!0,k.value=[],M.search(e)}function Q(e){let t=I(e);if(!t){E.warning(`该地点坐标无效,请换一条结果`);return}Y(t.lng,t.lat),k.value=[]}function ue(){G&&(G=!1,n.defaultKeyword.trim()&&(D.value=n.defaultKeyword.trim(),Z()))}function $(){if(!A||!N)return;let e=q();B(A,N,{lng:e.lng,lat:e.lat},e.zoom)}async function de(){await o();let e=S.value;if(e){if(w.value=``,!te()){w.value=`未配置天地图 Key(VITE_TIANDITU_TK)`;return}T.value=!0;try{if(J(),!await L(e)){w.value=`地图容器未就绪,请关闭后重试`;return}let t=await H();N=t,e.innerHTML=``,e.id=v,e.style.width=`100%`,e.style.height=`${n.height}px`,A=P(t,v),z(A);let r=q();A.centerAndZoom(new t.LngLat(r.lng,r.lat),r.zoom);let i=K(s.value),a=K(d.value);i!=null&&a!=null?X(t,i,a):X(t,r.lng,r.lat),le(t),A.addEventListener?.(`click`,e=>{let t=e?.lnglat?.lng,n=e?.lnglat?.lat;t==null||n==null||(Y(t,n),k.value=[])}),A.addEventListener?.(`load`,()=>{if(!A||!N)return;let e=q();B(A,N,{lng:e.lng,lat:e.lat},e.zoom),ue()}),W=R(e,()=>A),B(A,t,{lng:r.lng,lat:r.lat},r.zoom),window.setTimeout($,300),window.setTimeout($,800),window.setTimeout($,1500),n.defaultKeyword.trim()&&(G=!0)}catch(e){w.value=e instanceof Error?e.message:`地图加载失败`}finally{if(T.value=!1,A&&N){let e=q();B(A,N,{lng:e.lng,lat:e.lat},e.zoom)}}}}return b([s,d],async()=>{let e=K(s.value),t=K(d.value);!A||e==null||t==null||X(await H(),e,t)}),a(()=>{de()}),C(()=>{J(),N=null}),(t,a)=>{let o=f(`el-input`),s=f(`el-button`);return i(),e(`div`,ne,[w.value?l(``,!0):(i(),e(`div`,re,[r(o,{modelValue:D.value,"onUpdate:modelValue":a[0]||=e=>D.value=e,placeholder:`搜索地点,如:复旦大学`,clearable:``,onKeyup:ee(Z,[`enter`])},null,8,[`modelValue`]),r(s,{type:`primary`,loading:O.value,onClick:Z},{default:p(()=>[...a[1]||=[u(`搜索`,-1)]]),_:1},8,[`loading`])])),k.value.length?(i(),e(`ul`,ie,[(i(!0),e(_,null,y(k.value,(t,n)=>(i(),e(`li`,{key:`${t.name}-${n}`},[m(`button`,{type:`button`,class:`pick-search-item`,onClick:e=>Q(t)},[m(`strong`,null,x(t.name),1),m(`span`,null,x(t.address||`—`),1)],8,ae)]))),128))])):l(``,!0),w.value?(i(),e(`div`,oe,x(w.value),1)):(i(),e(`div`,se,[T.value?(i(),e(`div`,ce,`地图加载中…`)):l(``,!0),m(`div`,{ref_key:`containerRef`,ref:S,class:`pick-map`,style:c({height:`${n.height}px`})},null,4)])),w.value?l(``,!0):(i(),e(`p`,U,`可搜索地点或点击地图选点,确定后将填入经纬度`))])}}}),[[`__scopeId`,`data-v-0a469e9f`]]),G={class:`list-page`},K={class:`page-header`},q={class:`list-filter-bar`},J={class:`table-row-actions`},Y={key:0,class:`list-pager`},X={class:`coord-inline`},le={key:0,class:`pick-coord-preview`},Z=D(n({__name:`index`,setup(n){let a=g(!1),s=g([]),c=g({current_page:1,per_page:20,total:0}),h=g(1),b=g(``),C=g(``),D=g(!1),P=g(!1),F=g(!1),I=g(null),L=g({longitude:``,latitude:``}),R=g({name:``,longitude:``,latitude:``,city:``,province:``,sort_order:0}),te=[{label:`上海高校`,value:`上海`},{label:`苏州高校`,value:`苏州`},{label:`浙江高校`,value:`浙江`}];async function z(){a.value=!0;try{let e={page:h.value,page_size:c.value.per_page};b.value&&(e.keyword=b.value),C.value&&(e.region=C.value);let t=await A(e);s.value=t.items,c.value=t.meta}finally{a.value=!1}}function B(){b.value=``,C.value=``,h.value=1,z()}function V(){h.value=1,z()}function H(){I.value=null,R.value={name:``,longitude:``,latitude:``,city:``,province:``,sort_order:0},D.value=!0}function ne(e){I.value=e,R.value={name:e.name,longitude:e.longitude==null?``:String(e.longitude),latitude:e.latitude==null?``:String(e.latitude),city:e.city||``,province:e.province||``,sort_order:e.sort_order??0},D.value=!0}function re(){L.value={longitude:R.value.longitude,latitude:R.value.latitude},F.value=!1,P.value=!0}function ie(){F.value=!1,o(()=>{window.setTimeout(()=>{F.value=!0},800)})}function ae(){F.value=!1}function oe(){if(!L.value.longitude||!L.value.latitude){E.warning(`请先在地图上选点`);return}R.value.longitude=L.value.longitude,R.value.latitude=L.value.latitude,P.value=!1}async function se(){if(!R.value.name||!R.value.longitude||!R.value.latitude){E.warning(`请填写高校名称与经纬度`);return}let e={name:R.value.name.trim(),longitude:Number(R.value.longitude),latitude:Number(R.value.latitude),city:R.value.city||null,province:R.value.province||null,sort_order:Number(R.value.sort_order)||0};I.value?await N(I.value.id,e):await M(e),E.success(`已保存`),D.value=!1,await z()}async function ce(e){await T.confirm(`确定要删除高校「${e.name}」?`,`确认删除`,{type:`warning`}),await j(e.id),E.success(`已删除`),await z()}return k(z),(n,o)=>{let g=f(`el-button`),T=f(`el-input`),E=f(`el-option`),k=f(`el-select`),A=f(`el-table-column`),j=f(`el-table`),M=f(`el-pagination`),N=f(`el-card`),U=f(`el-form-item`),Z=f(`el-icon`),Q=f(`el-col`),ue=f(`el-row`),$=f(`el-input-number`),de=f(`el-form`),fe=f(`el-dialog`),pe=d(`loading`);return i(),e(_,null,[m(`div`,G,[m(`div`,K,[r(O),r(g,{type:`primary`,size:`small`,class:`btn-create`,onClick:H},{default:p(()=>[...o[15]||=[u(`新增高校`,-1)]]),_:1})]),r(N,{shadow:`never`,class:`admin-list-card`},{default:p(()=>[o[20]||=m(`p`,{class:`list-page-hint`},`长三角主要高校经纬度预置录入,供雷达地图映射使用。`,-1),m(`div`,q,[r(T,{modelValue:b.value,"onUpdate:modelValue":o[0]||=e=>b.value=e,placeholder:`搜索高校名称、经纬度…`,clearable:``,class:`filter-search`,onKeyup:ee(V,[`enter`])},null,8,[`modelValue`]),r(k,{modelValue:C.value,"onUpdate:modelValue":o[1]||=e=>C.value=e,placeholder:`地区`,clearable:``,class:`filter-select-wide`},{default:p(()=>[(i(),e(_,null,y(te,e=>r(E,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),r(g,{type:`primary`,onClick:V},{default:p(()=>[...o[16]||=[u(`搜索`,-1)]]),_:1}),r(g,{onClick:B},{default:p(()=>[...o[17]||=[u(`重置`,-1)]]),_:1})]),v((i(),S(j,{data:s.value,"row-key":`id`},{default:p(()=>[r(A,{prop:`sort_order`,label:`排序`,width:`80`,align:`center`}),r(A,{prop:`name`,label:`高校名称`,"min-width":`180`}),r(A,{label:`经度`,width:`120`},{default:p(({row:e})=>[u(x(e.longitude??`—`),1)]),_:1}),r(A,{label:`纬度`,width:`120`},{default:p(({row:e})=>[u(x(e.latitude??`—`),1)]),_:1}),r(A,{prop:`city`,label:`城市`,width:`100`}),r(A,{label:`操作`,width:`160`,fixed:`right`},{default:p(({row:e})=>[m(`div`,J,[r(g,{class:`btn-action-primary`,onClick:t=>ne(e)},{default:p(()=>[...o[18]||=[u(`编辑`,-1)]]),_:1},8,[`onClick`]),r(g,{class:`btn-action-brand`,onClick:t=>ce(e)},{default:p(()=>[...o[19]||=[u(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[pe,a.value]]),c.value.total>0?(i(),e(`div`,Y,[r(M,{layout:`total, prev, pager, next`,total:c.value.total,"page-size":c.value.per_page,"current-page":h.value,onCurrentChange:o[2]||=e=>{h.value=e,z()}},null,8,[`total`,`page-size`,`current-page`])])):l(``,!0)]),_:1})]),r(fe,{modelValue:D.value,"onUpdate:modelValue":o[10]||=e=>D.value=e,title:I.value?`编辑高校`:`新增高校`,width:`480px`,"destroy-on-close":``},{footer:p(()=>[r(g,{onClick:o[9]||=e=>D.value=!1},{default:p(()=>[...o[23]||=[u(`取消`,-1)]]),_:1}),r(g,{type:`primary`,onClick:se},{default:p(()=>[...o[24]||=[u(`保存`,-1)]]),_:1})]),default:p(()=>[r(de,{"label-position":`top`},{default:p(()=>[r(U,{label:`高校名称`,required:``},{default:p(()=>[r(T,{modelValue:R.value.name,"onUpdate:modelValue":o[3]||=e=>R.value.name=e,placeholder:`如:复旦大学`},null,8,[`modelValue`])]),_:1}),r(U,{label:`经纬度`,required:``},{default:p(()=>[m(`div`,X,[r(T,{modelValue:R.value.longitude,"onUpdate:modelValue":o[4]||=e=>R.value.longitude=e,placeholder:`经度`,class:`coord-input`},null,8,[`modelValue`]),r(T,{modelValue:R.value.latitude,"onUpdate:modelValue":o[5]||=e=>R.value.latitude=e,placeholder:`纬度`,class:`coord-input`},null,8,[`modelValue`]),r(g,{class:`pick-map-btn`,onClick:re},{default:p(()=>[r(Z,null,{default:p(()=>[r(t(w))]),_:1}),o[21]||=u(` 地图选点 `,-1)]),_:1})])]),_:1}),r(ue,{gutter:12},{default:p(()=>[r(Q,{span:12},{default:p(()=>[r(U,{label:`省份`},{default:p(()=>[r(T,{modelValue:R.value.province,"onUpdate:modelValue":o[6]||=e=>R.value.province=e,placeholder:`如:上海`},null,8,[`modelValue`])]),_:1})]),_:1}),r(Q,{span:12},{default:p(()=>[r(U,{label:`城市`},{default:p(()=>[r(T,{modelValue:R.value.city,"onUpdate:modelValue":o[7]||=e=>R.value.city=e,placeholder:`如:上海`},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1}),r(U,{label:`排序`},{default:p(()=>[r($,{modelValue:R.value.sort_order,"onUpdate:modelValue":o[8]||=e=>R.value.sort_order=e,min:0,max:99999},null,8,[`modelValue`]),o[22]||=m(`p`,{class:`list-page-hint`,style:{"margin-top":`8px`}},`数值越小越靠前,雷达地图与列表均按此排序`,-1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`]),r(fe,{modelValue:P.value,"onUpdate:modelValue":o[14]||=e=>P.value=e,class:`map-pick-dialog`,title:`地图选点`,width:`720px`,"destroy-on-close":``,"append-to-body":``,"align-center":``,onOpened:ie,onClosed:ae},{footer:p(()=>[r(g,{onClick:o[13]||=e=>P.value=!1},{default:p(()=>[...o[25]||=[u(`取消`,-1)]]),_:1}),r(g,{type:`primary`,onClick:oe},{default:p(()=>[...o[26]||=[u(`确定`,-1)]]),_:1})]),default:p(()=>[L.value.longitude&&L.value.latitude?(i(),e(`p`,le,` 当前选点:`+x(L.value.longitude)+`,`+x(L.value.latitude),1)):l(``,!0),P.value&&F.value?(i(),S(W,{key:1,longitude:L.value.longitude,"onUpdate:longitude":o[11]||=e=>L.value.longitude=e,latitude:L.value.latitude,"onUpdate:latitude":o[12]||=e=>L.value.latitude=e,"default-keyword":R.value.name,height:400},null,8,[`longitude`,`latitude`,`default-keyword`])):l(``,!0)]),_:1},8,[`modelValue`])],64)}}}),[[`__scopeId`,`data-v-6e0341aa`]]);export{Z as default}; |