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.
 
 
 
 
 
 
hy-screen-2.0/docs/assets/index-ee5660f2-178413279283...

1 lines
19 KiB

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