feat: add pasture yak overlay layer support

V2.0
M先生 1 month ago
parent 1e5dd1da27
commit 84b7816743
  1. 0
      docs/assets/AlibabaPuHuiTi-14435b65-balabala-1783352479097.woff2
  2. 0
      docs/assets/AlimamaShuHeiTi-Bold-6401fd0d-balabala-1783352479097.ttf
  3. 0
      docs/assets/AlimamaShuHeiTi-Bold-a95023f2-balabala-1783352479097.woff
  4. 0
      docs/assets/AlimamaShuHeiTi-Bold-fa4a258d-balabala-1783352479097.woff2
  5. 2
      docs/assets/SmartChartRenderer-5bbea40e-1783352479097.js
  6. 0
      docs/assets/SmartChartRenderer-8fd37aa6-balabala-1783352479097.css
  7. 0
      docs/assets/area-b57940eb-balabala-1783352479097.png
  8. 0
      docs/assets/bg-3acb94e3-balabala-1783352479097.png
  9. 0
      docs/assets/bottom-menu-arrow-big-180b7071-balabala-1783352479097.svg
  10. 0
      docs/assets/bottom-menu-arrow-small-19304179-balabala-1783352479097.svg
  11. 0
      docs/assets/bottom-menu-bg-b465793d-balabala-1783352479097.png
  12. 0
      docs/assets/bottom-menu-btn-ee5c8064-balabala-1783352479097.png
  13. 0
      docs/assets/bottom-menu-btn-hover-df33e514-balabala-1783352479097.png
  14. 0
      docs/assets/chartTheme-812dab15-balabala-1783352479097.css
  15. 6
      docs/assets/chartTheme-89e05b98-1783352479097.js
  16. 0
      docs/assets/chinaBlurLine-1a2cbc0f-balabala-1783352479097.png
  17. 0
      docs/assets/content-bottom-left-arrow-3a8a61f3-balabala-1783352479097.svg
  18. 0
      docs/assets/content-bottom-right-arrow-a3c5270d-balabala-1783352479097.svg
  19. 0
      docs/assets/content-middle-line-162bc0d5-balabala-1783352479097.svg
  20. 0
      docs/assets/focus_bg-b6803e2d-balabala-1783352479097.png
  21. 0
      docs/assets/focus_move_bg-cf41417a-balabala-1783352479097.png
  22. 0
      docs/assets/header-bg-65b38012-balabala-1783352479097.png
  23. 0
      docs/assets/huiguang-3c5dfda5-balabala-1783352479097.png
  24. 0
      docs/assets/icon1-6f7c222f-balabala-1783352479097.png
  25. 0
      docs/assets/icon2-4f77ccec-balabala-1783352479097.png
  26. 2
      docs/assets/index-1783352479097.js
  27. 2
      docs/assets/index-27f87b21-balabala-1783352479097.css
  28. 2
      docs/assets/index-43d0223e-1783352479097.js
  29. 0
      docs/assets/index-47d6f37a-balabala-1783352479097.css
  30. 292
      docs/assets/index-48103117-1783352479097.js
  31. 2
      docs/assets/index-5bb06177-balabala-1783352479097.css
  32. 0
      docs/assets/index-8d752fbe-balabala-1783352479097.css
  33. 2
      docs/assets/index-ffb7793d-1783352479097.js
  34. 0
      docs/assets/leaf-7be9efef-balabala-1783352479097.png
  35. 0
      docs/assets/left-kuang-5d6bd1ae-balabala-1783352479097.svg
  36. 0
      docs/assets/live-scene-1-786cdd0a-balabala-1783352479097.png
  37. 0
      docs/assets/menu-btn-91a961cf-balabala-1783352479097.png
  38. 0
      docs/assets/menu-btn-hover-62eba0bb-balabala-1783352479097.png
  39. 0
      docs/assets/ocean-bg-8c848b8f-balabala-1783352479097.png
  40. 0
      docs/assets/park-ee0533e0-balabala-1783352479097.png
  41. 0
      docs/assets/pathLine2-d4134d4b-balabala-1783352479097.png
  42. 0
      docs/assets/right-kuang-b1937caf-balabala-1783352479097.svg
  43. 0
      docs/assets/ring2-a1b91808-balabala-1783352479097.png
  44. 0
      docs/assets/ring3-fe0f60d7-balabala-1783352479097.png
  45. 0
      docs/assets/ring4-f2e324d6-balabala-1783352479097.png
  46. 0
      docs/assets/rotationBorder1-2ce8e0ef-balabala-1783352479097.png
  47. 0
      docs/assets/rotationBorder2-7496b968-balabala-1783352479097.png
  48. 0
      docs/assets/saoguang-ccf84a88-balabala-1783352479097.svg
  49. 0
      docs/assets/stack-7a426057-balabala-1783352479097.png
  50. 0
      docs/assets/title-zs1-c15a5ee8-balabala-1783352479097.svg
  51. 0
      docs/assets/town-f8c0c9cc-balabala-1783352479097.png
  52. 0
      docs/assets/yield-66e9af79-balabala-1783352479097.png
  53. 4
      docs/index.html
  54. 12
      src/views/pastureManagement/index.vue
  55. 67
      src/views/yakManagement/YakOlMap.vue

@ -1,2 +1,2 @@
var W=Object.defineProperty,H=Object.defineProperties;var Z=Object.getOwnPropertyDescriptors;var A=Object.getOwnPropertySymbols;var j=Object.prototype.hasOwnProperty,F=Object.prototype.propertyIsEnumerable;var $=(o,i,n)=>i in o?W(o,i,{enumerable:!0,configurable:!0,writable:!0,value:n}):o[i]=n,g=(o,i)=>{for(var n in i||(i={}))j.call(i,n)&&$(o,n,i[n]);if(A)for(var n of A(i))F.call(i,n)&&$(o,n,i[n]);return o},y=(o,i)=>H(o,Z(i));import{e as m,j as V,k as E,L as S,o as p,c as b,a as x,t as h,g as v,b as q,u as G,n as M}from"./index-1783349984056.js";import{aS as I}from"./chartTheme-259740ff-1783349984056.js";const U={class:"smart-chart-header"},J={key:0},K={key:0},Q={key:0,class:"smart-chart-source"},N="口径",te={__name:"SmartChartRenderer",props:{chart:{type:Object,required:!0}},emits:["ready"],setup(o,{emit:i}){const n=i,a=o,c=["#30dcff","#27f0c0","#ffd76c","#7aa7ff","#ff8f6b","#a6f06d"],T=m(()=>{const e=(a.chart.rows||[]).filter(t=>Number.isFinite(Number(t.value)));return a.chart.type==="pie"?O(e):a.chart.type==="line"?P(e):C(e)}),w=m(()=>{const e=a.chart.rows||[];return a.chart.type==="bar"&&_(e)}),z=m(()=>{const e=R(a.chart.subtitle);if(e)return e;const t=a.chart.source||{},r=f(t.period||t.dataPeriod||a.chart.period),s=a.chart.unit?`单位:${a.chart.unit}`:"";return[r,s].filter(Boolean).join(" · ")}),L=m(()=>{const e=a.chart.source||{},t=D(e),r=f(e.period||e.dataPeriod||a.chart.period),s=f(e.generatedAt||e.updateTime||e.updatedAt,!0),l=[t,r,s?`更新 ${s}`:""].filter(Boolean);return l.length?`数据来源:${l.join(" · ")}`:"数据来源:业务统计库"});V(()=>{E(()=>{window.requestAnimationFrame(()=>n("ready"))})});function C(e){return _(e)?B(e):{animationDuration:700,grid:{left:52,right:26,top:28,bottom:54},tooltip:u(),xAxis:{type:"category",data:e.map(t=>t.name),axisTick:{show:!1},axisLine:{lineStyle:{color:"rgba(48, 220, 255, 0.28)"}},axisLabel:{color:"rgba(223, 250, 255, 0.76)",fontSize:11,interval:0,rotate:e.length>6?28:0}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},splitLine:{lineStyle:{color:"rgba(48, 220, 255, 0.1)",type:"dashed"}},axisLabel:{color:"rgba(223, 250, 255, 0.58)",fontSize:11}},series:[{name:a.chart.title,type:"bar",barWidth:e.length>7?16:22,data:e.map((t,r)=>({value:t.value,name:t.name,itemStyle:{borderRadius:[8,8,0,0],color:new S(0,0,0,1,[{offset:0,color:c[r%c.length]},{offset:1,color:"rgba(48, 220, 255, 0.08)"}])}})),label:{show:!0,position:"top",color:"#ffffff",fontSize:11,formatter:({value:t})=>d(t)}}]}}function B(e){return{animationDuration:700,grid:{left:78,right:72,top:22,bottom:20},tooltip:y(g({},u()),{trigger:"axis",axisPointer:{type:"shadow"}}),xAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},splitLine:{lineStyle:{color:"rgba(48, 220, 255, 0.1)",type:"dashed"}},axisLabel:{color:"rgba(223, 250, 255, 0.58)",fontSize:11}},yAxis:{type:"category",inverse:!0,data:e.map(t=>t.name),axisTick:{show:!1},axisLine:{lineStyle:{color:"rgba(48, 220, 255, 0.22)"}},axisLabel:{color:"rgba(223, 250, 255, 0.82)",fontSize:12}},series:[{name:a.chart.title,type:"bar",barWidth:13,data:e.map((t,r)=>({value:t.value,name:t.name,itemStyle:{borderRadius:[0,8,8,0],color:new S(0,0,1,0,[{offset:0,color:"rgba(48, 220, 255, 0.16)"},{offset:1,color:c[r%c.length]}])}})),label:{show:!0,position:"right",color:"#ffffff",fontSize:11,formatter:({value:t})=>d(t)}}]}}function O(e){return{animationDuration:700,tooltip:u(),legend:{orient:"vertical",right:10,top:"middle",itemWidth:10,itemHeight:10,textStyle:{color:"rgba(223, 250, 255, 0.78)",fontSize:11}},series:[{name:a.chart.title,type:"pie",radius:["48%","68%"],center:["35%","52%"],avoidLabelOverlap:!0,label:{color:"#fff",fontSize:11,formatter:`{b}
var W=Object.defineProperty,H=Object.defineProperties;var Z=Object.getOwnPropertyDescriptors;var A=Object.getOwnPropertySymbols;var j=Object.prototype.hasOwnProperty,F=Object.prototype.propertyIsEnumerable;var $=(o,i,n)=>i in o?W(o,i,{enumerable:!0,configurable:!0,writable:!0,value:n}):o[i]=n,g=(o,i)=>{for(var n in i||(i={}))j.call(i,n)&&$(o,n,i[n]);if(A)for(var n of A(i))F.call(i,n)&&$(o,n,i[n]);return o},y=(o,i)=>H(o,Z(i));import{e as m,j as V,k as E,L as S,o as p,c as b,a as x,t as h,g as v,b as q,u as G,n as M}from"./index-1783352479097.js";import{aS as I}from"./chartTheme-89e05b98-1783352479097.js";const U={class:"smart-chart-header"},J={key:0},K={key:0},Q={key:0,class:"smart-chart-source"},N="口径",te={__name:"SmartChartRenderer",props:{chart:{type:Object,required:!0}},emits:["ready"],setup(o,{emit:i}){const n=i,a=o,c=["#30dcff","#27f0c0","#ffd76c","#7aa7ff","#ff8f6b","#a6f06d"],T=m(()=>{const e=(a.chart.rows||[]).filter(t=>Number.isFinite(Number(t.value)));return a.chart.type==="pie"?O(e):a.chart.type==="line"?P(e):C(e)}),w=m(()=>{const e=a.chart.rows||[];return a.chart.type==="bar"&&_(e)}),z=m(()=>{const e=R(a.chart.subtitle);if(e)return e;const t=a.chart.source||{},r=f(t.period||t.dataPeriod||a.chart.period),s=a.chart.unit?`单位:${a.chart.unit}`:"";return[r,s].filter(Boolean).join(" · ")}),L=m(()=>{const e=a.chart.source||{},t=D(e),r=f(e.period||e.dataPeriod||a.chart.period),s=f(e.generatedAt||e.updateTime||e.updatedAt,!0),l=[t,r,s?`更新 ${s}`:""].filter(Boolean);return l.length?`数据来源:${l.join(" · ")}`:"数据来源:业务统计库"});V(()=>{E(()=>{window.requestAnimationFrame(()=>n("ready"))})});function C(e){return _(e)?B(e):{animationDuration:700,grid:{left:52,right:26,top:28,bottom:54},tooltip:u(),xAxis:{type:"category",data:e.map(t=>t.name),axisTick:{show:!1},axisLine:{lineStyle:{color:"rgba(48, 220, 255, 0.28)"}},axisLabel:{color:"rgba(223, 250, 255, 0.76)",fontSize:11,interval:0,rotate:e.length>6?28:0}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},splitLine:{lineStyle:{color:"rgba(48, 220, 255, 0.1)",type:"dashed"}},axisLabel:{color:"rgba(223, 250, 255, 0.58)",fontSize:11}},series:[{name:a.chart.title,type:"bar",barWidth:e.length>7?16:22,data:e.map((t,r)=>({value:t.value,name:t.name,itemStyle:{borderRadius:[8,8,0,0],color:new S(0,0,0,1,[{offset:0,color:c[r%c.length]},{offset:1,color:"rgba(48, 220, 255, 0.08)"}])}})),label:{show:!0,position:"top",color:"#ffffff",fontSize:11,formatter:({value:t})=>d(t)}}]}}function B(e){return{animationDuration:700,grid:{left:78,right:72,top:22,bottom:20},tooltip:y(g({},u()),{trigger:"axis",axisPointer:{type:"shadow"}}),xAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},splitLine:{lineStyle:{color:"rgba(48, 220, 255, 0.1)",type:"dashed"}},axisLabel:{color:"rgba(223, 250, 255, 0.58)",fontSize:11}},yAxis:{type:"category",inverse:!0,data:e.map(t=>t.name),axisTick:{show:!1},axisLine:{lineStyle:{color:"rgba(48, 220, 255, 0.22)"}},axisLabel:{color:"rgba(223, 250, 255, 0.82)",fontSize:12}},series:[{name:a.chart.title,type:"bar",barWidth:13,data:e.map((t,r)=>({value:t.value,name:t.name,itemStyle:{borderRadius:[0,8,8,0],color:new S(0,0,1,0,[{offset:0,color:"rgba(48, 220, 255, 0.16)"},{offset:1,color:c[r%c.length]}])}})),label:{show:!0,position:"right",color:"#ffffff",fontSize:11,formatter:({value:t})=>d(t)}}]}}function O(e){return{animationDuration:700,tooltip:u(),legend:{orient:"vertical",right:10,top:"middle",itemWidth:10,itemHeight:10,textStyle:{color:"rgba(223, 250, 255, 0.78)",fontSize:11}},series:[{name:a.chart.title,type:"pie",radius:["48%","68%"],center:["35%","52%"],avoidLabelOverlap:!0,label:{color:"#fff",fontSize:11,formatter:`{b}
{d}%`},labelLine:{lineStyle:{color:"rgba(223, 250, 255, 0.42)"}},itemStyle:{borderColor:"rgba(3, 18, 31, 0.92)",borderWidth:3},data:e.map((t,r)=>({name:t.name,value:t.value,itemStyle:{color:c[r%c.length]}}))}]}}function P(e){return{animationDuration:760,grid:{left:52,right:28,top:30,bottom:48},tooltip:y(g({},u()),{trigger:"axis",axisPointer:{type:"line",lineStyle:{color:"rgba(255, 215, 108, 0.52)"}}}),xAxis:{type:"category",boundaryGap:!1,data:e.map(t=>t.name),axisTick:{show:!1},axisLine:{lineStyle:{color:"rgba(48, 220, 255, 0.28)"}},axisLabel:{color:"rgba(223, 250, 255, 0.76)",fontSize:11,interval:0}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},splitLine:{lineStyle:{color:"rgba(48, 220, 255, 0.1)",type:"dashed"}},axisLabel:{color:"rgba(223, 250, 255, 0.58)",fontSize:11}},series:[{name:a.chart.title,type:"line",smooth:!0,symbol:"circle",symbolSize:8,lineStyle:{width:3,color:"#30dcff"},itemStyle:{color:"#ffd76c",borderColor:"#041522",borderWidth:2},areaStyle:{color:new S(0,0,0,1,[{offset:0,color:"rgba(48, 220, 255, 0.24)"},{offset:1,color:"rgba(48, 220, 255, 0.02)"}])},label:{show:!0,position:"top",color:"#ffffff",fontSize:11,formatter:({value:t})=>d(t)},data:e.map(t=>({value:t.value,name:t.name}))}]}}function u(){return{trigger:"item",backgroundColor:"rgba(2, 13, 22, 0.94)",borderColor:"rgba(48, 220, 255, 0.34)",borderWidth:1,textStyle:{color:"#fff",fontSize:12},formatter:e=>{const t=(a.chart.rows||[]).find(l=>l.name===e.name),r=(t==null?void 0:t.unit)||a.chart.unit||"",s=t!=null&&t.extra?`<br/><span style="color:rgba(223,250,255,.62)">${t.extra}</span>`:"";return`${e.marker}${e.name}: ${d(e.value)}${r}${s}`}}}function _(e=[]){return e.length>6||e.some(t=>String(t.name||"").length>4)}function D(e={}){const t=f(e.sourceName||e.name||e.label);if(t)return t;const r=String(e.mode||"").trim();return/openapi|api|stat/i.test(r)?"":/local|mock|fallback/i.test(r)?"":""}function f(e,t=!1){const r=String(e||"").trim();return r?t&&/^\d{4}-\d{2}-\d{2}/.test(r)?r.slice(0,10):k(r)?"":r:""}function R(e){const t=String(e||"").trim();if(!t)return"";const r=new RegExp(N,"g"),s=new RegExp(`${N}`,"g"),l=t.replace(s,"").replace(r,"").replace(/[:]\s*openApi\s*\s*[a-zA-Z0-9_./:-]*[,]?\s*/gi,"").replace(/openApi\s*\s*/gi,"").replace(/\b[a-zA-Z][a-zA-Z0-9]*(?:_[a-zA-Z0-9]+){2,}\b/g,"").replace(/[,]\s*[,]+/g,"").replace(/^[\s,:]+|[\s,]+$/g,"");return!l||/^[:]?$/.test(l)||k(l)?"":l}function k(e){return/^[a-zA-Z0-9_./:-]+$/.test(e)&&(e.includes("_")||e.length>24)}function d(e){const t=Number(e);return Number.isFinite(t)?Number.isInteger(t)?t.toLocaleString("zh-CN"):t.toLocaleString("zh-CN",{maximumFractionDigits:2}):"--"}return(e,t)=>(p(),b("div",{class:M(["smart-chart-card",{"is-horizontal":w.value}])},[x("div",U,[x("div",null,[x("strong",null,h(o.chart.title),1),z.value?(p(),b("span",J,h(z.value),1)):v("",!0)]),o.chart.unit?(p(),b("em",K,h(o.chart.unit),1)):v("",!0)]),q(G(I),{class:"smart-chart",option:T.value,autoresize:""},null,8,["option"]),L.value?(p(),b("div",Q,h(L.value),1)):v("",!0)],2))}};export{te as default};

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 93 KiB

File diff suppressed because one or more lines are too long

@ -1 +1 @@
var m=(v,d,n)=>new Promise((i,a)=>{var u=l=>{try{r(n.next(l))}catch(t){a(t)}},o=l=>{try{r(n.throw(l))}catch(t){a(t)}},r=l=>l.done?i(l.value):Promise.resolve(l.value).then(u,o);r((n=n.apply(v,d)).next())});import{_ as x,J as w,K as h,e as M,o as _,c as f,a as e,y as S,z as g,A as y,t as b,g as V,d as p,M as k}from"./index-1783349984056.js";const B={class:"login-screen"},D={class:"login-shell"},R={class:"login-field"},U={class:"login-field"},q={key:0,class:"login-error"},A=["disabled"],C={__name:"index",setup(v){const d=w(),n=h(),i=p(""),a=p(""),u=p(!1),o=p(""),r=M(()=>{const t=typeof d.query.redirect=="string"?decodeURIComponent(d.query.redirect):"/platform";return t.startsWith("/login")?"/platform":t||"/platform"});function l(){return m(this,null,function*(){if(o.value="",!i.value||!a.value){o.value="请输入账号和密码。";return}u.value=!0;try{yield k(i.value,a.value),n.replace(r.value)}catch(t){o.value=(t==null?void 0:t.message)||"登录失败,请稍后再试。"}finally{u.value=!1}})}return(t,s)=>(_(),f("div",B,[e("div",D,[s[5]||(s[5]=e("div",{class:"login-brand"},[e("span",null,"红原县数字畜牧业监管平台"),e("small",null,"Hongyuan Digital Animal Husbandry Supervision Platform")],-1)),e("form",{class:"login-panel",onSubmit:S(l,["prevent"])},[s[4]||(s[4]=e("div",{class:"login-panel-title"},"用户登录",-1)),e("label",R,[s[2]||(s[2]=e("span",null,"账号",-1)),g(e("input",{"onUpdate:modelValue":s[0]||(s[0]=c=>i.value=c),autocomplete:"username",autofocus:"",placeholder:"请输入账号"},null,512),[[y,i.value,void 0,{trim:!0}]])]),e("label",U,[s[3]||(s[3]=e("span",null,"密码",-1)),g(e("input",{"onUpdate:modelValue":s[1]||(s[1]=c=>a.value=c),autocomplete:"current-password",placeholder:"请输入密码",type:"password"},null,512),[[y,a.value]])]),o.value?(_(),f("div",q,b(o.value),1)):V("",!0),e("button",{class:"login-submit",disabled:u.value,type:"submit"},b(u.value?"登录中":"登录"),9,A)],32)])]))}},N=x(C,[["__scopeId","data-v-8ebd0d6e"]]);export{N as default};
var m=(v,d,n)=>new Promise((i,a)=>{var u=l=>{try{r(n.next(l))}catch(t){a(t)}},o=l=>{try{r(n.throw(l))}catch(t){a(t)}},r=l=>l.done?i(l.value):Promise.resolve(l.value).then(u,o);r((n=n.apply(v,d)).next())});import{_ as x,J as w,K as h,e as M,o as _,c as f,a as e,y as S,z as g,A as y,t as b,g as V,d as p,M as k}from"./index-1783352479097.js";const B={class:"login-screen"},D={class:"login-shell"},R={class:"login-field"},U={class:"login-field"},q={key:0,class:"login-error"},A=["disabled"],C={__name:"index",setup(v){const d=w(),n=h(),i=p(""),a=p(""),u=p(!1),o=p(""),r=M(()=>{const t=typeof d.query.redirect=="string"?decodeURIComponent(d.query.redirect):"/platform";return t.startsWith("/login")?"/platform":t||"/platform"});function l(){return m(this,null,function*(){if(o.value="",!i.value||!a.value){o.value="请输入账号和密码。";return}u.value=!0;try{yield k(i.value,a.value),n.replace(r.value)}catch(t){o.value=(t==null?void 0:t.message)||"登录失败,请稍后再试。"}finally{u.value=!1}})}return(t,s)=>(_(),f("div",B,[e("div",D,[s[5]||(s[5]=e("div",{class:"login-brand"},[e("span",null,"红原县数字畜牧业监管平台"),e("small",null,"Hongyuan Digital Animal Husbandry Supervision Platform")],-1)),e("form",{class:"login-panel",onSubmit:S(l,["prevent"])},[s[4]||(s[4]=e("div",{class:"login-panel-title"},"用户登录",-1)),e("label",R,[s[2]||(s[2]=e("span",null,"账号",-1)),g(e("input",{"onUpdate:modelValue":s[0]||(s[0]=c=>i.value=c),autocomplete:"username",autofocus:"",placeholder:"请输入账号"},null,512),[[y,i.value,void 0,{trim:!0}]])]),e("label",U,[s[3]||(s[3]=e("span",null,"密码",-1)),g(e("input",{"onUpdate:modelValue":s[1]||(s[1]=c=>a.value=c),autocomplete:"current-password",placeholder:"请输入密码",type:"password"},null,512),[[y,a.value]])]),o.value?(_(),f("div",q,b(o.value),1)):V("",!0),e("button",{class:"login-submit",disabled:u.value,type:"submit"},b(u.value?"登录中":"登录"),9,A)],32)])]))}},N=x(C,[["__scopeId","data-v-8ebd0d6e"]]);export{N as default};

@ -1 +1 @@
.login-screen[data-v-8ebd0d6e]{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;overflow:hidden;background:linear-gradient(180deg,rgba(4,16,38,.1),rgba(2,8,22,.62)),url(./bg-3acb94e3-balabala-1783349984056.png) center/cover no-repeat,#05142f;color:#fff}.login-screen[data-v-8ebd0d6e]:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,rgba(0,0,0,.46),transparent 42%,rgba(0,0,0,.35)),radial-gradient(circle at 52% 46%,rgba(48,220,255,.16),transparent 32%)}.login-shell[data-v-8ebd0d6e]{position:relative;z-index:1;width:min(980px,100vw - 48px);display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:56px;align-items:center}.login-brand[data-v-8ebd0d6e]{display:flex;flex-direction:column;gap:14px;min-width:0;text-shadow:0 0 20px rgba(48,220,255,.36)}.login-brand span[data-v-8ebd0d6e]{font-size:42px;line-height:1.2;font-weight:700}.login-brand small[data-v-8ebd0d6e]{color:#c4f3feb8;font-size:13px;letter-spacing:0}.login-panel[data-v-8ebd0d6e]{width:360px;padding:30px 28px 28px;border:1px solid rgba(48,220,255,.34);background:rgba(3,14,32,.82);box-shadow:0 24px 70px #00000057,inset 0 0 28px #30dcff14;box-sizing:border-box}.login-panel-title[data-v-8ebd0d6e]{margin-bottom:26px;color:#fff;font-size:22px;font-weight:700;text-align:center}.login-field[data-v-8ebd0d6e]{display:block;margin-bottom:18px}.login-field span[data-v-8ebd0d6e]{display:block;margin-bottom:8px;color:#c4f3fec7;font-size:13px}.login-field input[data-v-8ebd0d6e]{width:100%;height:42px;padding:0 12px;border:1px solid rgba(48,220,255,.26);outline:none;background:rgba(0,10,24,.62);color:#fff;font-size:15px;box-sizing:border-box}.login-field input[data-v-8ebd0d6e]:focus{border-color:#30dcffb8;box-shadow:0 0 0 2px #30dcff1f}.login-error[data-v-8ebd0d6e]{min-height:20px;margin:-4px 0 12px;color:#ffcf8a;font-size:13px;line-height:20px}.login-submit[data-v-8ebd0d6e]{width:100%;height:44px;border:1px solid rgba(48,220,255,.52);background:linear-gradient(90deg,rgba(24,140,196,.92),rgba(37,204,218,.92));color:#fff;cursor:pointer;font-size:16px;font-weight:700}.login-submit[data-v-8ebd0d6e]:disabled{cursor:not-allowed;opacity:.68}@media (max-width: 820px){.login-shell[data-v-8ebd0d6e]{grid-template-columns:1fr;gap:28px}.login-brand span[data-v-8ebd0d6e]{font-size:30px}.login-panel[data-v-8ebd0d6e]{width:100%}}
.login-screen[data-v-8ebd0d6e]{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;overflow:hidden;background:linear-gradient(180deg,rgba(4,16,38,.1),rgba(2,8,22,.62)),url(./bg-3acb94e3-balabala-1783352479097.png) center/cover no-repeat,#05142f;color:#fff}.login-screen[data-v-8ebd0d6e]:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,rgba(0,0,0,.46),transparent 42%,rgba(0,0,0,.35)),radial-gradient(circle at 52% 46%,rgba(48,220,255,.16),transparent 32%)}.login-shell[data-v-8ebd0d6e]{position:relative;z-index:1;width:min(980px,100vw - 48px);display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:56px;align-items:center}.login-brand[data-v-8ebd0d6e]{display:flex;flex-direction:column;gap:14px;min-width:0;text-shadow:0 0 20px rgba(48,220,255,.36)}.login-brand span[data-v-8ebd0d6e]{font-size:42px;line-height:1.2;font-weight:700}.login-brand small[data-v-8ebd0d6e]{color:#c4f3feb8;font-size:13px;letter-spacing:0}.login-panel[data-v-8ebd0d6e]{width:360px;padding:30px 28px 28px;border:1px solid rgba(48,220,255,.34);background:rgba(3,14,32,.82);box-shadow:0 24px 70px #00000057,inset 0 0 28px #30dcff14;box-sizing:border-box}.login-panel-title[data-v-8ebd0d6e]{margin-bottom:26px;color:#fff;font-size:22px;font-weight:700;text-align:center}.login-field[data-v-8ebd0d6e]{display:block;margin-bottom:18px}.login-field span[data-v-8ebd0d6e]{display:block;margin-bottom:8px;color:#c4f3fec7;font-size:13px}.login-field input[data-v-8ebd0d6e]{width:100%;height:42px;padding:0 12px;border:1px solid rgba(48,220,255,.26);outline:none;background:rgba(0,10,24,.62);color:#fff;font-size:15px;box-sizing:border-box}.login-field input[data-v-8ebd0d6e]:focus{border-color:#30dcffb8;box-shadow:0 0 0 2px #30dcff1f}.login-error[data-v-8ebd0d6e]{min-height:20px;margin:-4px 0 12px;color:#ffcf8a;font-size:13px;line-height:20px}.login-submit[data-v-8ebd0d6e]{width:100%;height:44px;border:1px solid rgba(48,220,255,.52);background:linear-gradient(90deg,rgba(24,140,196,.92),rgba(37,204,218,.92));color:#fff;cursor:pointer;font-size:16px;font-weight:700}.login-submit[data-v-8ebd0d6e]:disabled{cursor:not-allowed;opacity:.68}@media (max-width: 820px){.login-shell[data-v-8ebd0d6e]{grid-template-columns:1fr;gap:28px}.login-brand span[data-v-8ebd0d6e]{font-size:30px}.login-panel[data-v-8ebd0d6e]{width:100%}}

@ -6,8 +6,8 @@
<link rel="icon" type="image/svg+xml" href="./vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>红原县数字畜牧业监管平台</title>
<script type="module" crossorigin src="./assets/index-1783349984056.js"></script>
<link rel="stylesheet" href="./assets/index-47d6f37a-balabala-1783349984056.css">
<script type="module" crossorigin src="./assets/index-1783352479097.js"></script>
<link rel="stylesheet" href="./assets/index-47d6f37a-balabala-1783352479097.css">
</head>
<body>

@ -10,6 +10,7 @@
:initial-zoom="16"
:max-zoom="21"
:overlay-layer="pastureMapLayer"
:overlay-layers="pastureMapLayers"
@ready="handlePastureOlReady"
@map-click="handlePastureMapClick"
/>
@ -177,6 +178,16 @@ const pastureVideoLoadTimeoutMs = 12000
const pastureMapTileUrlTemplate = "https://qkl-map.oss-cn-chengdu.aliyuncs.com/hy-result/{z}/{x}/{y}.png"
const pastureOlCenter = [103.07984, 33.029058]
const pastureBoundarySldBody = `<?xml version="1.0" encoding="UTF-8"?><StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><NamedLayer><Name>t_grassland_result_caodi</Name><UserStyle><Title>pasture boundary</Title><FeatureTypeStyle><Rule><PolygonSymbolizer><Fill><CssParameter name="fill">#FFE35A</CssParameter><CssParameter name="fill-opacity">0</CssParameter></Fill><Stroke><CssParameter name="stroke">#FFE35A</CssParameter><CssParameter name="stroke-width">2.4</CssParameter><CssParameter name="stroke-opacity">0.98</CssParameter></Stroke></PolygonSymbolizer></Rule></FeatureTypeStyle></UserStyle></NamedLayer></StyledLayerDescriptor>`
const pastureYakRecognitionLayer = {
key: "pasture-yak-marks-layer",
sourceType: "wms",
layerName: "ne:daping_yak_marks",
styles: "yak_marks",
cqlFilter: "gov_show = true",
name: "牦牛识别标记",
opacity: 0.96,
zIndex: 46,
}
const emptyPastureVideo = {
key: "pasture-empty-video",
title: "暂无在线可播放摄像头",
@ -307,6 +318,7 @@ const pastureMapLayer = computed(() => {
name: selectedLegend.value.name || layer.name,
}
})
const pastureMapLayers = computed(() => [pastureMapLayer.value, pastureYakRecognitionLayer].filter(Boolean))
const grasslandFeaturePanelVisible = computed(() => Boolean(grasslandFeaturePoint.value))
const grasslandFeaturePanelHeight = computed(() => {
if (grasslandFeatureLoading.value || grasslandFeatureEmpty.value || !selectedGrasslandFeature.value) return 186

@ -86,6 +86,10 @@ const props = defineProps({
opacity: 0.96,
}),
},
overlayLayers: {
type: Array,
default: () => [],
},
})
const emit = defineEmits(["ready", "tile-status", "layer-status", "map-click"])
@ -129,7 +133,9 @@ const mapEl = ref(null)
let olMap = null
let baseSource = null
let overlaySource = null
let overlaySources = []
let overlayMapLayer = null
let overlayMapLayers = []
let pastureFocusSource = null
let pastureFocusLayer = null
let contextMenuHandler = null
@ -301,6 +307,23 @@ function normalizeOverlayLayer(layer = props.overlayLayer) {
}
}
function normalizeOverlayLayers() {
const layers = Array.isArray(props.overlayLayers) ? props.overlayLayers.filter(Boolean) : []
const sourceLayers = layers.length ? layers : [props.overlayLayer].filter(Boolean)
return sourceLayers.map((layer) => normalizeOverlayLayer(layer)).filter(Boolean)
}
function registerOverlaySource(source) {
if (!source) return source
overlaySource = source
overlaySources.push(source)
return source
}
function isActiveOverlaySource(source) {
return Boolean(source && overlaySources.includes(source))
}
function buildOverlayWmsParams(layer) {
const params = {
SERVICE: "WMS",
@ -403,7 +426,7 @@ function buildOverlayBboxVectorSource(layer) {
return response.json()
})
.then((geojson) => {
if (source !== overlaySource) return
if (!isActiveOverlaySource(source)) return
const features = format.readFeatures(geojson, {
dataProjection: "EPSG:4326",
featureProjection: projection,
@ -419,7 +442,7 @@ function buildOverlayBboxVectorSource(layer) {
emitLayerStatus(features.length ? "success" : "warning", features.length ? `${layer.name}已加载` : `${layer.name}暂无数据`)
})
.catch(() => {
if (source !== overlaySource) return
if (!isActiveOverlaySource(source)) return
source.removeLoadedExtent?.(extent)
failure?.()
emitLayerStatus("error", `${layer.name}加载失败`)
@ -439,7 +462,7 @@ function buildOverlayVectorSource(layer) {
return response.json()
})
.then((geojson) => {
if (source !== overlaySource) return
if (!isActiveOverlaySource(source)) return
const features = format.readFeatures(geojson, {
dataProjection: "EPSG:4326",
featureProjection: "EPSG:3857",
@ -449,7 +472,7 @@ function buildOverlayVectorSource(layer) {
emitLayerStatus(features.length ? "success" : "warning", features.length ? `${layer.name}已加载` : `${layer.name}暂无数据`)
})
.catch(() => {
if (source !== overlaySource) return
if (!isActiveOverlaySource(source)) return
emitLayerStatus("error", `${layer.name}加载失败`)
})
return source
@ -468,14 +491,14 @@ function createOverlayVectorStyle(layer) {
]
}
function createOverlayMapLayer() {
const layer = normalizeOverlayLayer()
function createOverlayMapLayer(layerConfig = props.overlayLayer) {
const layer = normalizeOverlayLayer(layerConfig)
if (!layer) return null
if (layer.sourceType === "wfs") {
overlaySource = buildOverlayVectorSource(layer)
const source = registerOverlaySource(buildOverlayVectorSource(layer))
const overlayVectorStyle = createOverlayVectorStyle(layer)
return new VectorLayer({
source: overlaySource,
source,
style: () => overlayVectorStyle,
zIndex: layer.zIndex,
renderBuffer: 160,
@ -484,16 +507,16 @@ function createOverlayMapLayer() {
})
}
if (layer.renderMode === "image") {
overlaySource = buildOverlayImageWmsSource(layer)
const source = registerOverlaySource(buildOverlayImageWmsSource(layer))
return new ImageLayer({
source: overlaySource,
source,
opacity: layer.opacity,
zIndex: layer.zIndex,
})
}
overlaySource = buildOverlayWmsSource(layer)
const source = registerOverlaySource(buildOverlayWmsSource(layer))
return new TileLayer({
source: overlaySource,
source,
opacity: layer.opacity,
zIndex: layer.zIndex,
})
@ -501,17 +524,19 @@ function createOverlayMapLayer() {
function refreshOverlayLayer() {
if (!olMap) return
if (overlayMapLayer) {
olMap.removeLayer(overlayMapLayer)
const staleLayers = new Set([...overlayMapLayers, overlayMapLayer].filter(Boolean))
staleLayers.forEach((layer) => olMap.removeLayer(layer))
overlayMapLayers = []
overlayMapLayer = null
}
if (wmsEventKeys.length) {
unByKey(wmsEventKeys)
wmsEventKeys = []
}
overlaySource = null
overlayMapLayer = createOverlayMapLayer()
if (overlayMapLayer) olMap.addLayer(overlayMapLayer)
overlaySources = []
overlayMapLayers = normalizeOverlayLayers().map((layer) => createOverlayMapLayer(layer)).filter(Boolean)
overlayMapLayer = overlayMapLayers[0] || null
overlayMapLayers.forEach((layer) => olMap.addLayer(layer))
}
function createBoundaryLayers() {
@ -949,6 +974,7 @@ function handleMapSingleClick(event) {
y: Number(sourceEvent.clientY),
},
overlayLayer: props.overlayLayer,
overlayLayers: normalizeOverlayLayers(),
})
}
@ -1053,7 +1079,9 @@ function disposeMap() {
pendingTiles.clear()
baseSource = null
overlaySource = null
overlaySources = []
overlayMapLayer = null
overlayMapLayers = []
pastureFocusSource = null
pastureFocusLayer = null
if (olMap) {
@ -1075,7 +1103,8 @@ function refreshTileSources() {
baseSource.refresh?.()
emitTileStatus("loading", `正在刷新 hy-result ${tileState.zoom}级影像底图`)
}
overlaySource?.refresh?.()
const sources = overlaySources.length ? overlaySources : [overlaySource].filter(Boolean)
sources.forEach((source) => source?.refresh?.())
}
function resetView() {
@ -1138,7 +1167,7 @@ watch(
)
watch(
() => props.overlayLayer,
() => [props.overlayLayer, props.overlayLayers],
() => {
refreshOverlayLayer()
},

Loading…
Cancel
Save