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