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