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 lines
18 KiB
1 lines
18 KiB
var Ge=Object.defineProperty,Qe=Object.defineProperties;var Xe=Object.getOwnPropertyDescriptors;var ie=Object.getOwnPropertySymbols;var Ze=Object.prototype.hasOwnProperty,ea=Object.prototype.propertyIsEnumerable;var ue=(n,u,o)=>u in n?Ge(n,u,{enumerable:!0,configurable:!0,writable:!0,value:o}):n[u]=o,S=(n,u)=>{for(var o in u||(u={}))Ze.call(u,o)&&ue(n,o,u[o]);if(ie)for(var o of ie(u))ea.call(u,o)&&ue(n,o,u[o]);return n},H=(n,u)=>Qe(n,Xe(u));var B=(n,u,o)=>new Promise((w,$)=>{var m=_=>{try{C(o.next(_))}catch(p){$(p)}},W=_=>{try{C(o.throw(_))}catch(p){$(p)}},C=_=>_.done?w(_.value):Promise.resolve(_.value).then(m,W);C((o=o.apply(n,u)).next())});import{_ as oe}from"./index-fe70e5de-1784132466083.js";import{r as aa,n as na}from"./index-ed255eef-1784132466083.js";import{a as ce,n as la,d as ta,f as ee,c as F,s as sa,p as ve}from"./data-5c83c66b-1784132466083.js";import{g as c,q as ra,h as ia,w as de,o as f,c as g,a as e,b as ye,x as fe,F as z,y as I,n as N,t as i,J as T,u as K,d as M}from"./index-1784132466083.js";import"./index-e9f36657-1784132466083.js";const ae=ca("/jsyApi"),ua="/openApi";function oa(n,u){return/^https?:\/\//.test(u)?u:`${n}${u.startsWith("/")?u:`/${u}`}`}function ca(n){const u=String(n||"/jsyApi").replace(/\/+$/,"");return u.endsWith("/api")?u:`${u}/api`}function va(n){if((n==null?void 0:n.success)===!1||(n==null?void 0:n.code)!==void 0&&![0,200,"0","200"].includes(n.code)){const o=new Error((n==null?void 0:n.msg)||(n==null?void 0:n.message)||"接口请求失败");throw o.code=n==null?void 0:n.code,o}return na(n)}function J(n,u,o,w={}){return aa(oa(n,u),{params:o,timeout:w.timeout||16e3}).then(va)}function da(n){return Array.isArray(n)?n:Array.isArray(n==null?void 0:n.rows)?n.rows:Array.isArray(n==null?void 0:n.list)?n.list:Array.isArray(n==null?void 0:n.data)?n.data:[]}function ya(n){return Array.isArray(n)?n.length>0:!n||typeof n!="object"?n!=null&&n!=="":["areaRange","area_range","acreage","grasslandArea","grassland_area","arearange","area","yakNumber","yak_number","yaknumber","number","yakCount","yak_count","livestockCount","livestock_count","bearingCapacity","bearing_capacity","bearingcapacity","capacity","theoryCapacity","livestockCapacity","livestock_capacity","livestockcapacity","carryingCapacity","actualCapacity","overloadRate","overload_rate","overloadrate","rate","level","conclusion","advice","balanceAdvice","balance_advice"].some(o=>n[o]!==void 0&&n[o]!==null&&n[o]!=="")}function ge(){return B(this,arguments,function*({areaCode:n}={}){const u={areaCode:n},o=[()=>J(ae,"/ai/livestockBalance",u,{timeout:18e3}),()=>J(ua,"/ai/balance/advice",u,{timeout:18e3})];let w;for(const $ of o)try{const m=yield $();if(ya(m))return m}catch(m){w=m}throw w||new Error("草畜平衡接口不可用")})}function fa(n){return B(this,null,function*(){const u=[()=>J(ae,"/area/children",{areaCode:n},{timeout:12e3}),()=>J(ae,"/map/areaCode",{areaCode:n},{timeout:12e3})];let o,w=!1;for(const $ of u)try{const m=da(yield $());if(m.length)return m;w=!0}catch(m){o=m}if(w)return[];throw o||new Error("区划接口不可用")})}const ga={class:"grass-livestock-balance"},ma={class:"balance-selector"},ba={class:"balance-scope-tabs"},pa=["onClick"],ka={class:"balance-target-list"},ha=["title","onClick"],wa={class:"balance-action-box"},_a=["disabled"],Ra={key:0,class:"balance-running"},Aa={class:"balance-running-head"},Ca={class:"balance-core-inner"},xa={class:"balance-running-title"},Sa={class:"balance-progress-line"},$a={class:"balance-live-process"},Ba={key:1,class:"balance-waiting"},Na={class:"balance-wait-core"},Ma={class:"balance-core-ring is-empty"},Ea={class:"balance-core-inner"},Pa={class:"balance-preflight"},za={key:2,class:"balance-analysis"},Ia={class:"balance-dashboard"},Ta={class:"balance-object-block"},qa={class:"balance-core"},Va={class:"balance-core-inner"},ja={class:"balance-compare"},Da={class:"balance-bar-row"},Ha={class:"balance-bar-row is-livestock"},Ka={class:"balance-detail"},La={class:"balance-process"},Oa={class:"balance-section-title"},Fa={class:"balance-process-track"},Ja={class:"balance-decision"},Wa={class:"balance-section-title"},Ua={class:"balance-conclusion"},Ya={class:"balance-advice-list"},Ga={class:"balance-overload-ranking"},Qa={class:"balance-rank-list"},Xa=326,Za=1310,en=128,an=8,nn=6200,cn={__name:"index",props:{active:{type:Boolean,default:!0}},emits:["loading-progress","map-ready"],setup(n,{emit:u}){const o=n,w=u,$=M(typeof window=="undefined"?1080:window.innerHeight),m=c(()=>{const a=Math.max(1080,Number($.value)||1080);return Math.max(944,a-en-an)}),W=c(()=>m.value),C=M("county"),_=M(""),p=M("idle"),R=M(0),x=M(0),A=M(""),E=M({}),U=M([]);let P=!1,Y=0,L=null,G=0,j=0,q=null;const O=c(()=>[...ce,...U.value].map(a=>la(E.value[a.key],a))),me=c(()=>O.value.filter(a=>a.type==="county")),Q=c(()=>O.value.filter(a=>a.type==="town")),be=c(()=>O.value.filter(a=>a.type==="village")),pe=c(()=>C.value==="town"?Q.value:C.value==="village"?be.value:me.value),d=c(()=>O.value.find(a=>a.key===_.value)||null),h=c(()=>!!d.value),k=c(()=>p.value==="running"),b=c(()=>h.value&&p.value==="done"),v=c(()=>ta(d.value||{})),ne=c(()=>[{key:"county",name:"县"},{key:"town",name:"镇"},{key:"village",name:"村"}]),ke=c(()=>{var a;return((a=ne.value.find(l=>l.key===C.value))==null?void 0:a.name)||"县"}),he=c(()=>d.value?d.value.areaCode?`行政区划 ${d.value.areaCode}`:d.value.township||"核算对象":"等待选择核算对象"),we=c(()=>A.value?A.value:h.value?b.value?"分析已完成":k.value?"正在执行核算":"已选择,待开始分析":"请先选择具体对象"),_e=c(()=>b.value?"草畜平衡分析舱":"草畜平衡分析"),Re=c(()=>h.value?k.value?"分析中":"待开始":"待选择"),Ae=c(()=>h.value?k.value?`${d.value.name} 正在分析`:`${d.value.name} 待开始分析`:"先选择一个核算对象"),Ce=c(()=>A.value?A.value:h.value?k.value?"正在读取草畜平衡结果,核对承载力、载畜量和超载率。":"点击左侧开始分析后,再展示结果、分析过程、结论和建议。":"选择县、镇或村后,系统才会进入草地承载力核算。"),xe=c(()=>{const a=v.value;return a.delta===null?"根据草畜平衡结果表返回的承载力、载畜量和超载率生成判定。":`${a.delta>0?"超载量":"承载余量"} ${ee(Math.abs(a.delta))},承载利用率 ${F(a.usageRate)}。`}),Se=c(()=>v.value.risk.key==="healthy"?"保持监测":v.value.risk.key==="watch"?"基本平衡":v.value.risk.key==="light"?"关注调控":v.value.delta===null?"按结果表判定":v.value.delta>0?"需调控载畜量":"承载能力可覆盖"),$e=c(()=>v.value.risk.key==="healthy"||v.value.risk.key==="watch"?"保持监测":v.value.risk.key==="light"?"关注调控":v.value.delta===null?"结果表口径":v.value.delta>0?"需要调控":"保持监测"),Be=c(()=>{const a=Math.max(0,Math.min(130,Number(v.value.usageRate)||0));return`${Math.round(a/130*360)}deg`}),Ne=c(()=>[{key:"productivity",index:"01",name:"草地生产力核算",desc:"核定草地范围、面积和产草量等级,形成生产力基础口径。"},{key:"forage",index:"02",name:"可利用草量折算",desc:"扣除不可食草量、生态保留量和利用限制,折算可供放牧利用草量。"},{key:"livestock",index:"03",name:"载畜量折算",desc:"依据实际存栏和草畜平衡标准,统一形成载畜压力口径。"},{key:"balance",index:"04",name:"平衡判定",desc:"对比草地承载能力与载畜压力,输出平衡状态和调控方案。"}]),V=c(()=>{const a=v.value;return[{key:"productivity",index:"01",name:"草地生产力核算",desc:"核算草地面积与产草能力",pending:"等待草地参数",plan:"核定草地范围、面积和产草量等级"},{key:"forage",index:"02",name:"可利用草量折算",desc:"折算可供放牧利用草量",pending:"等待草量折算",plan:"扣除不可食草量、生态保留量和利用限制"},{key:"livestock",index:"03",name:"载畜量折算",desc:"形成实际载畜压力口径",pending:"等待载畜折算",plan:"依据实际存栏和草畜平衡标准进行折算"},{key:"balance",index:"04",name:"平衡判定",desc:"生成结论与调控方向",pending:"等待平衡判定",plan:["healthy","watch"].includes(a.risk.key)?"判定平衡状态并生成监测方案":"判定超载风险并生成调控方案"}]}),X=c(()=>V.value[Math.min(x.value,V.value.length-1)]||V.value[0]),Me=c(()=>[{key:"productivity",index:"01",name:"生产力核算",desc:b.value?"草地生产力核算":h.value?"等待核算":"等待选择",state:h.value?"done":"active"},{key:"forage",index:"02",name:"草量折算",desc:b.value?"可利用草量折算":"分析后折算",state:k.value?"active":b.value?"done":h.value?"pending":"disabled"},{key:"livestock",index:"03",name:"载畜折算",desc:b.value?"载畜压力折算":"等待折算",state:k.value?"active":b.value?"done":"disabled"},{key:"balance",index:"04",name:"平衡判定",desc:b.value?v.value.risk.label:"等待判定",state:b.value?"done":"disabled"}]),Ee=c(()=>b.value?sa(d.value,v.value.risk):[]),le=c(()=>Q.value.filter(a=>Number.isFinite(Number(a.overloadRate))).slice().sort((a,l)=>Number(l.overloadRate)-Number(a.overloadRate)).slice(0,10)),Pe=c(()=>Math.max(1,...le.value.map(a=>Math.max(0,Number(a.overloadRate)||0)))),ze=c(()=>le.value.map((a,l)=>H(S({},a),{rank:l+1})));function Ie(a){const l=Math.max(0,Number(a==null?void 0:a.overloadRate)||0);return Math.max(6,Math.min(100,l/Pe.value*100))}function Te(a){const l=Number(a==null?void 0:a.overloadRate);return Number.isFinite(l)?l>=2.5?"is-alert":l>=2?"is-warning":"is-stable":"is-empty"}function Z(){$.value=typeof window=="undefined"?1080:window.innerHeight}ra(()=>{Z(),window.addEventListener("resize",Z),w("loading-progress",{progress:100}),w("map-ready"),He(),Ke()}),ia(()=>{P=!0,window.removeEventListener("resize",Z),Y+=1,G+=1,j+=1,D()}),de(()=>{var a;return(a=d.value)==null?void 0:a.key},()=>{p.value="idle",R.value=0,x.value=0,A.value="",q=null,D()}),de(()=>o.active,a=>{a||!k.value||(p.value="idle",R.value=0,x.value=0,A.value="",q=null,D())});function qe(a){C.value=a,_.value="",p.value="idle",A.value=""}function Ve(a){a&&(C.value=["county","town","village"].includes(a.type)?a.type:"county",_.value=a.key,p.value="idle",A.value="")}function je(){if(!o.active||!d.value||k.value)return;p.value="running",R.value=0,x.value=0,A.value="",D();const a=Date.now();let l=!1;const t=De().catch(s=>(l=!0,console.warn("[grassLivestockBalance] fallback balance row used",s),A.value="接口暂不可用,已使用本地兜底口径",d.value));q=t,L=window.setInterval(()=>{if(P)return;const s=q===t?92:100;R.value=Math.min(s,R.value+2),x.value=Math.min(V.value.length-1,Math.floor(R.value/25))},140),t.finally(()=>B(this,null,function*(){var r;const s=nn-(Date.now()-a);if(s>0&&(yield new Promise(y=>window.setTimeout(y,s))),!(P||p.value!=="running"||q!==t)){if(q=null,D(),!d.value){R.value=0,x.value=0,p.value="idle";return}!l&&!E.value[(r=d.value)==null?void 0:r.key]&&(A.value="未查询到接口结果,已使用本地兜底口径"),R.value=100,x.value=V.value.length-1,p.value="done"}}))}function De(){return B(this,null,function*(){const a=d.value;if(!a)throw new Error("请先选择具体核算对象");if(E.value[a.key])return E.value[a.key];const l=++Y,t=yield ge({areaCode:a.areaCode});if(P||l!==Y)return null;if(!t||typeof t!="object"||!Object.keys(t).length)throw new Error("未查询到该对象的草畜平衡结果");return E.value=H(S({},E.value),{[a.key]:t}),t})}function He(){return B(this,null,function*(){const a=++G,l=ce.filter(r=>["county","town"].includes(r==null?void 0:r.type)&&(r==null?void 0:r.areaCode)).map(r=>S({},r));if(!l.length)return;const t=yield Promise.all(l.map(r=>B(this,null,function*(){try{const y=yield ge({areaCode:r.areaCode});return y&&typeof y=="object"&&Object.keys(y).length?{key:r.key,result:y}:null}catch(y){return null}})));if(P||a!==G)return;const s=S({},E.value);t.forEach(r=>{r!=null&&r.key&&(s[r.key]=r.result)}),E.value=s})}function Ke(){return B(this,null,function*(){const a=++j,l=Q.value.filter(t=>t==null?void 0:t.areaCode).map(t=>S({},t));if(l.length)try{const t=yield Promise.all(l.map(s=>B(this,null,function*(){try{const r=yield fa(s.areaCode);return P||a!==j?[]:Le(r,s)}catch(r){return[]}})));if(P||a!==j)return;U.value=t.flat()}catch(t){if(P||a!==j)return;U.value=[]}})}function Le(a=[],l={}){const s=(Array.isArray(a)?a:[]).filter(r=>{const y=te(r),re=se(r);return!!(y||re)}).map((r,y)=>Je(r,y,l)).filter(Boolean);return Oe(s,l)}function Oe(a=[],l={}){const t=new Map;return a.forEach(s=>{const r=Fe(s,l),y=t.get(r);if(!y){t.set(r,H(S({},s),{duplicateSources:[s.source].filter(Boolean)}));return}const Ye=!y.areaCode&&s.areaCode?S(S({},y),s):y;t.set(r,H(S({},Ye),{duplicateSources:[...y.duplicateSources||[],s.source].filter(Boolean)}))}),[...t.values()]}function Fe(a={},l={}){const t=String(a.name||"").replace(/\s+/g,"").trim();return`${String(a.township||l.name||"").replace(/\s+/g,"").trim()||"unknown-town"}-${t||a.areaCode||"unknown-village"}`}function Je(a={},l=0,t={}){const s=te(a),r=se(a)||(s?`村级区划${s}`:"");return!s&&!r?null:{key:`village-${s||`${t.key||t.name}-${r}-${l}`}`,type:"village",name:r,areaCode:s,township:t.name,source:a,year:"2026"}}function te(a={}){return String(ve(a,["areaCode","area_code","areacode","code","value","id","areaId","area_id"],"")||"").trim()}function se(a={}){return String(ve(a,["areaName","area_name","areaname","name","label","zoneName","villageName","village_name"],"")||"").trim()}function D(){L&&(window.clearInterval(L),L=null)}function We(a){return b.value||k.value&&a<=x.value}function Ue(a){return a<x.value||b.value?"done":a===x.value&&k.value?"active":"pending"}return(a,l)=>(f(),g("div",ga,[l[15]||(l[15]=e("div",{class:"balance-backdrop","aria-hidden":"true"},[e("div",{class:"balance-orbit is-left"}),e("div",{class:"balance-orbit is-right"}),e("div",{class:"balance-energy-band"})],-1)),e("div",{class:"balance-screen",style:T({"--balance-card-height":`${m.value}px`})},[ye(oe,{class:"balance-card balance-target-card",title:"核算对象",width:Xa,height:W.value},{default:fe(()=>{var t;return[e("div",ma,[e("div",ba,[(f(!0),g(z,null,I(ne.value,s=>(f(),g("button",{key:s.key,type:"button",class:N({active:C.value===s.key}),onClick:r=>qe(s.key)},i(s.name),11,pa))),128))]),e("div",ka,[(f(!0),g(z,null,I(pe.value,s=>{var r;return f(),g("button",{key:s.key,type:"button",class:N({active:s.key===((r=d.value)==null?void 0:r.key)}),title:s.name,onClick:y=>Ve(s)},[e("span",null,i(s.name),1)],10,ha)}),128))]),e("div",wa,[l[0]||(l[0]=e("span",null,"当前对象",-1)),e("strong",null,i(((t=d.value)==null?void 0:t.name)||"未选择"),1),e("small",null,i(we.value),1),e("button",{type:"button",disabled:!h.value||k.value,onClick:je},i(k.value?"分析中...":b.value?"重新分析":"开始分析"),9,_a)])])]}),_:1},8,["height"]),ye(oe,{class:"balance-card balance-sheet-card",title:_e.value,width:Za,height:m.value},{default:fe(()=>[e("div",{class:N(["balance-sheet",{"is-ready":b.value,"is-running":k.value}])},[l[14]||(l[14]=e("div",{class:"balance-field-lines","aria-hidden":"true"},[e("i"),e("i"),e("i")],-1)),k.value?(f(),g("section",Ra,[e("div",Aa,[e("div",{class:"balance-core-ring is-running",style:T({"--usage-angle":`${R.value*3.6}deg`})},[e("div",Ca,[l[1]||(l[1]=e("span",null,"分析进度",-1)),e("strong",null,i(R.value)+"%",1),e("small",null,i(X.value.name),1)])],4),e("div",xa,[e("span",null,i(d.value.name),1),e("strong",null,i(X.value.desc),1),e("small",null,i(X.value.plan),1),e("div",Sa,[e("i",{style:T({width:`${R.value}%`})},null,4)])])]),e("div",$a,[(f(!0),g(z,null,I(V.value,(t,s)=>(f(),g("div",{key:t.key,class:N(["balance-live-step",`is-${Ue(s)}`])},[e("span",null,i(t.index),1),e("div",null,[e("strong",null,i(t.name),1),e("p",null,i(We(s)?t.plan:t.pending),1)])],2))),128))])])):b.value?(f(),g("section",za,[e("div",Ia,[e("div",Ta,[e("span",null,i(ke.value)+"核算对象",1),e("strong",null,i(d.value.name),1),e("small",null,i(he.value),1)]),e("div",qa,[e("div",{class:"balance-core-ring",style:T({"--usage-angle":Be.value})},[e("div",Va,[l[5]||(l[5]=e("span",null,"承载利用率",-1)),e("strong",null,i(K(F)(v.value.usageRate)),1),e("small",null,"超载率 "+i(K(F)(v.value.overloadRate)),1)])],4),l[6]||(l[6]=e("div",{class:"balance-core-caption"},"草地承载力模型",-1))]),e("div",{class:N(["balance-verdict-card",`is-${v.value.risk.key}`])},[l[7]||(l[7]=e("span",null,"分析结论",-1)),e("strong",null,i(v.value.risk.label),1),e("small",null,i(Se.value),1)],2)]),e("div",ja,[e("div",Da,[l[8]||(l[8]=e("span",null,"理论承载力",-1)),e("div",null,[e("i",{style:T({width:`${v.value.bearingPercent}%`})},null,4)]),e("strong",null,i(K(ee)(v.value.bearing)),1)]),e("div",Ha,[l[9]||(l[9]=e("span",null,"实际载畜量",-1)),e("div",null,[e("i",{style:T({width:`${v.value.livestockPercent}%`})},null,4)]),e("strong",null,i(K(ee)(v.value.livestock)),1)])]),e("div",Ka,[e("div",La,[e("div",Oa,[l[10]||(l[10]=e("span",null,"分析过程",-1)),e("small",null,i(d.value.year||"当前年度"),1)]),e("div",Fa,[(f(!0),g(z,null,I(Me.value,t=>(f(),g("span",{key:`track-${t.key}`,class:N(`is-${t.state}`)},i(t.name),3))),128))]),(f(!0),g(z,null,I(Ne.value,t=>(f(),g("div",{key:t.key,class:"balance-formula-row"},[e("span",null,i(t.index),1),e("div",null,[e("strong",null,i(t.name),1),e("p",null,i(t.desc),1)])]))),128))]),e("div",Ja,[e("div",Wa,[l[11]||(l[11]=e("span",null,"结论与建议",-1)),e("small",null,i($e.value),1)]),e("div",Ua,[e("strong",null,i(v.value.risk.description),1),e("p",null,i(xe.value),1)]),e("div",Ya,[(f(!0),g(z,null,I(Ee.value,(t,s)=>(f(),g("div",{key:`${t}-${s}`,class:"balance-advice-item"},[e("span",null,i(s+1),1),e("p",null,i(t),1)]))),128))])]),e("div",Ga,[l[13]||(l[13]=e("div",{class:"balance-section-title"},[e("span",null,"超载率排行"),e("small",null,"乡镇 Top10")],-1)),e("div",Qa,[(f(!0),g(z,null,I(ze.value,t=>(f(),g("div",{key:`overload-${t.key||t.name}`,class:N(["balance-rank-row",Te(t)]),style:T({"--rank-progress":`${Ie(t)}%`})},[e("span",null,i(t.rank),1),e("strong",null,i(t.name),1),l[12]||(l[12]=e("div",null,[e("i")],-1)),e("em",null,i(K(F)(t.overloadRate)),1)],6))),128))])])])])):(f(),g("section",Ba,[e("div",Na,[e("div",Ma,[e("div",Ea,[e("span",null,i(Re.value),1),e("strong",null,i(h.value?d.value.name:"草畜平衡"),1),e("small",null,i(h.value?"待执行模型分析":"等待核算对象"),1)])]),e("h2",null,i(Ae.value),1),e("p",null,i(Ce.value),1)]),e("div",Pa,[e("span",{class:N({active:h.value})},"对象锁定",2),l[2]||(l[2]=e("i",null,null,-1)),e("span",{class:N({active:h.value})},"等待启动分析",2),l[3]||(l[3]=e("i",null,null,-1)),l[4]||(l[4]=e("span",null,"生成过程与结论",-1))])]))],2)]),_:1},8,["title","height"])],4)]))}};export{cn as default};
|
|
|