2 lines
4.2 KiB
JavaScript
2 lines
4.2 KiB
JavaScript
import{_ as f,b as n,d as s,i as g,p as m,G as y,F as h,B as u,t as l,q as P,z as o}from"./index-DGJ6dnLh.js";const _={name:"TerrainList",data(){return{terrains:[],filteredTerrains:[],loading:!1,error:null,currentPage:1,itemsPerPage:100,apiBaseUrl:"https://api.zybdatasupport.online",categoryList:[],selectedCategory:"全部"}},computed:{filteredTerrainsByCategory(){return this.selectedCategory==="全部"?this.filteredTerrains:this.filteredTerrains.filter(r=>r.key.toLowerCase().startsWith(this.selectedCategory+"_"))},totalPages(){return Math.ceil(this.filteredTerrainsByCategory.length/this.itemsPerPage)},paginatedTerrains(){const r=(this.currentPage-1)*this.itemsPerPage,e=r+this.itemsPerPage;return this.filteredTerrainsByCategory.slice(r,e)}},created(){this.fetchTerrainList()},methods:{async fetchTerrainList(){this.loading=!0,this.error=null;try{const r=await fetch(`${this.apiBaseUrl}/terrain`);if(!r.ok)throw new Error("获取地形图列表失败");const e=await r.json();this.terrains=e,this.filteredTerrains=e.filter(d=>this.isImageFile(d.key)),this.extractCategories(),this.currentPage=1}catch(r){this.error=r.message,console.error("Error fetching terrain list:",r)}finally{this.loading=!1}},extractCategories(){const r=new Set;this.filteredTerrains.forEach(e=>{const d=e.key.split("_")[0].toLowerCase();r.add(d)}),this.categoryList=["全部",...Array.from(r).sort()]},getImageUrl(r){return`http://dataimg-1307694021.cos.ap-beijing.myqcloud.com/Terrain/jpg/${r}`},isImageFile(r){const e=[".jpg",".jpeg",".png",".gif",".bmp",".webp"],d=r.toLowerCase();return e.some(c=>d.endsWith(c))},nextPage(){this.currentPage<this.totalPages&&this.currentPage++},prevPage(){this.currentPage>1&&this.currentPage--}}},p={class:"map-detail"},v={class:"map-header"},b={class:"filter-controls"},k=["value"],C={class:"pagination-controls"},T=["disabled"],w={class:"page-info"},L=["disabled"],x={key:0,class:"loading"},B={key:1,class:"error"},V={class:"map-content"},I={key:0,class:"terrain-grid"},U={class:"map-image"},j=["src","alt"],E={class:"image-overlay"},H={class:"image-name"},F=["href"],M={key:1,class:"no-data"},N={class:"pagination-controls bottom"},S=["disabled"],q={class:"page-info"},z=["disabled"];function D(r,e,d,c,a,i){return o(),n("div",p,[s("div",v,[e[8]||(e[8]=s("h1",null,"地形图列表",-1)),s("div",b,[e[7]||(e[7]=s("label",{for:"category-select"},"分类:",-1)),m(s("select",{"onUpdate:modelValue":e[0]||(e[0]=t=>a.selectedCategory=t),id:"category-select",onChange:e[1]||(e[1]=t=>a.currentPage=1)},[(o(!0),n(h,null,u(a.categoryList,t=>(o(),n("option",{key:t,value:t},l(t),9,k))),128))],544),[[y,a.selectedCategory]])])]),s("div",C,[s("button",{class:"pagination-btn",onClick:e[2]||(e[2]=(...t)=>i.prevPage&&i.prevPage(...t)),disabled:a.currentPage===1}," < 上一页 ",8,T),s("span",w,"第 "+l(a.currentPage)+" 页 / 共 "+l(i.totalPages)+" 页",1),s("button",{class:"pagination-btn",onClick:e[3]||(e[3]=(...t)=>i.nextPage&&i.nextPage(...t)),disabled:a.currentPage===i.totalPages}," 下一页 > ",8,L)]),a.loading?(o(),n("div",x,"加载中...")):g("",!0),a.error?(o(),n("div",B,[P(" 加载失败: "+l(a.error)+" ",1),s("button",{onClick:e[4]||(e[4]=(...t)=>i.fetchTerrainList&&i.fetchTerrainList(...t)),class:"back-btn"},"重试")])):g("",!0),s("div",V,[i.filteredTerrainsByCategory.length>0?(o(),n("div",I,[(o(!0),n(h,null,u(i.paginatedTerrains,t=>(o(),n("div",{key:t.key,class:"terrain-item"},[s("div",U,[s("img",{src:i.getImageUrl(t.key),alt:"地形图 "+t.key},null,8,j),s("div",E,[s("span",H,l(t.key),1),s("a",{href:i.getImageUrl(t.key),class:"download-link",download:"",title:"下载"},e[9]||(e[9]=[s("svg",{viewBox:"0 0 24 24",width:"20",height:"20"},[s("path",{fill:"white",d:"M5,20H19V18H5M19,9H15V3H9V9H5L12,16L19,9Z"})],-1)]),8,F)])])]))),128))])):a.loading?g("",!0):(o(),n("div",M," 当前分类下没有可用的地形图数据 "))]),s("div",N,[s("button",{class:"pagination-btn",onClick:e[5]||(e[5]=(...t)=>i.prevPage&&i.prevPage(...t)),disabled:a.currentPage===1}," < 上一页 ",8,S),s("span",q,"第 "+l(a.currentPage)+" 页 / 共 "+l(i.totalPages)+" 页",1),s("button",{class:"pagination-btn",onClick:e[6]||(e[6]=(...t)=>i.nextPage&&i.nextPage(...t)),disabled:a.currentPage===i.totalPages}," 下一页 > ",8,z)])])}const A=f(_,[["render",D],["__scopeId","data-v-8143e8da"]]);export{A as default};
|