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
19 KiB
1 lines
19 KiB
var sa=Object.defineProperty,ia=Object.defineProperties;var ua=Object.getOwnPropertyDescriptors;var be=Object.getOwnPropertySymbols;var ra=Object.prototype.hasOwnProperty,oa=Object.prototype.propertyIsEnumerable;var ye=Math.pow,fe=(f,d,c)=>d in f?sa(f,d,{enumerable:!0,configurable:!0,writable:!0,value:c}):f[d]=c,te=(f,d)=>{for(var c in d||(d={}))ra.call(d,c)&&fe(f,c,d[c]);if(be)for(var c of be(d))oa.call(d,c)&&fe(f,c,d[c]);return f},se=(f,d)=>ia(f,ua(d));var Q=(f,d,c)=>new Promise((U,F)=>{var V=w=>{try{R(c.next(w))}catch(g){F(g)}},X=w=>{try{R(c.throw(w))}catch(g){F(g)}},R=w=>w.done?U(w.value):Promise.resolve(w.value).then(V,X);R((c=c.apply(f,d)).next())});import{_ as pe}from"./index-5fcd057f-1786515885761.js";import{a as ca,g as va}from"./balanceApi-3dae2500-1786515885761.js";import{n as da,d as ie,f as h,a as P,s as ga,p as ke}from"./data-efe99d44-1786515885761.js";import{g as i,q as ma,h as ba,w as he,o as r,c as o,a,b as _e,x as $e,F as L,y as z,n as B,t,K as H,j as fa,u as K,d as _}from"./index-1786515885761.js";import"./index-bb4d300c-1786515885761.js";import"./index-e9f36657-1786515885761.js";const ya={class:"grass-livestock-balance"},pa={class:"balance-selector"},ka={class:"balance-scope-tabs"},ha=["onClick"],_a={class:"balance-target-list"},$a=["title","onClick"],wa={class:"balance-action-box"},Ra={"aria-live":"polite"},Ca=["disabled"],Sa={key:0,class:"balance-running"},xa={class:"balance-running-head"},Na={class:"balance-core-inner"},Ba={class:"balance-running-title"},Ma={class:"balance-running-value"},Aa={class:"balance-progress-line"},Ta={class:"balance-live-process"},Pa={key:1,class:"balance-waiting"},La={class:"balance-wait-core"},za={class:"balance-core-ring is-empty"},Ha={class:"balance-core-inner"},Da=["disabled"],Ia={class:"balance-preflight"},Fa={key:2,class:"balance-analysis"},Va={class:"balance-dashboard"},Ea={class:"balance-object-block"},Oa={class:"balance-core"},ja={class:"balance-core-inner"},qa={class:"balance-compare"},Ka={class:"balance-bar-row"},Ua={class:"balance-bar-row is-livestock"},Wa={class:"balance-detail"},Ga={class:"balance-process"},Ya={class:"balance-section-title"},Ja={class:"balance-process-track"},Qa={class:"balance-decision"},Xa={class:"balance-section-title"},Za={class:"balance-conclusion"},en={class:"balance-advice-list"},an={class:"balance-overload-ranking"},nn={class:"balance-rank-list"},ln=["title"],tn=326,sn=1310,un=128,rn=8,on=11500,yn={__name:"index",props:{active:{type:Boolean,default:!0}},emits:["loading-progress","map-ready"],setup(f,{emit:d}){const c=f,U=d,F=_(typeof window=="undefined"?1080:window.innerHeight),V=i(()=>{const e=Math.max(1080,Number(F.value)||1080);return Math.max(944,e-un-rn)}),X=i(()=>V.value),R=_("county"),w=_(""),g=_("idle"),y=_(0),$=_(0),p=_(""),N=_(!1),T=_(!1),M=_(""),D=_(null),Z=_([]),ee=_([]);let C=!1,W=null,E=0,O=0,I=null;const G=i(()=>[...Z.value,...ee.value].map(e=>da(e))),we=i(()=>G.value.filter(e=>e.type==="county")),ue=i(()=>G.value.filter(e=>e.type==="town")),Re=i(()=>G.value.filter(e=>e.type==="village")),Ce=i(()=>R.value==="town"?ue.value:R.value==="village"?Re.value:we.value),u=i(()=>G.value.find(e=>e.key===w.value)||null),k=i(()=>!!u.value),ae=i(()=>!!(M.value||p.value)&&!N.value&&!T.value),Y=i(()=>{var e;return((e=D.value)==null?void 0:e.scenario)||{}}),J=i(()=>{var e;return((e=D.value)==null?void 0:e.riskRules)||[]}),re=i(()=>{var e;return!!((e=D.value)!=null&&e.scenario&&J.value.length===5)}),b=i(()=>g.value==="running"),m=i(()=>k.value&&g.value==="done"),v=i(()=>ie(u.value||{},J.value,Y.value)),oe=i(()=>[{key:"county",name:"县"},{key:"town",name:"镇"},{key:"village",name:"村"}]),Se=i(()=>{var e;return((e=oe.value.find(n=>n.key===R.value))==null?void 0:e.name)||"县"}),xe=i(()=>{if(!u.value)return"等待选择核算对象";if(u.value.areaCode){const e=u.value.scenarioVersion||"";return`行政区划 ${u.value.areaCode}${e?`|${e}`:""}`}return u.value.township||"核算对象"}),Ne=i(()=>T.value?"正在加载核算规则":M.value?M.value:N.value?"正在加载核算对象":p.value?p.value:k.value?m.value?"分析已完成":b.value?"正在执行核算":"已选择,待开始分析":"请先选择具体对象"),Be=i(()=>m.value?"草畜平衡分析舱":"草畜平衡分析"),Me=i(()=>N.value||T.value?"加载中":ae.value?"可重试":k.value?b.value?"分析中":"待开始":"待选择"),Ae=i(()=>T.value?"正在加载核算规则":M.value?"核算规则暂未加载":N.value?"正在加载核算对象":ae.value?"核算对象暂未加载":k.value?b.value?`${u.value.name} 正在分析`:`${u.value.name} 待开始分析`:"先选择一个核算对象"),Te=i(()=>T.value?"正在读取场景参数、风险分级与建议规则,请稍候。":M.value?M.value:N.value?"正在读取县、镇、村核算对象,请稍候。":p.value?p.value:k.value?b.value?"正在读取草畜平衡结果,核对承载力、载畜量和超载率。":"点击左侧开始分析后,再展示结果、分析过程、结论和建议。":"选择县、镇或村后,系统才会进入草地承载力核算。"),Pe=i(()=>{const e=v.value;return e.delta===null?"根据草畜平衡结果表返回的承载力、载畜量和超载率生成判定。":`${e.delta>0?"超载量":"承载余量"} ${h(Math.abs(e.delta))},承载利用率 ${P(e.usageRate)}。`}),Le=i(()=>{var e;return((e=v.value.risk)==null?void 0:e.verdictHint)||"按数据库规则判定"}),ze=i(()=>{var e;return((e=v.value.risk)==null?void 0:e.decisionHint)||"数据库规则"}),He=i(()=>{const e=Math.max(0,Math.min(130,Number(v.value.usageRate)||0));return`${Math.round(e/130*360)}deg`}),De=i(()=>{var s;const e=v.value,n=Number(e.overloadCount||0),l=n>=0?"超载量":"承载余量";return[{key:"productivity",index:"01",name:"草地承载核定",desc:`核算草地面积 ${h(e.areaRange)}亩|理论承载力 ${h(e.bearing)}头`},{key:"forage",index:"02",name:"载畜规模核定",desc:`牦牛存栏 ${h(e.yakNumber)}头|实际载畜量 ${h(e.livestock)}头`},{key:"livestock",index:"03",name:"承载状态对比",desc:`理论承载力 ${h(e.bearing)}头|实际载畜量 ${h(e.livestock)}头|${l} ${h(Math.abs(n))}头`},{key:"balance",index:"04",name:"平衡结果判定",desc:`超载率 ${P(e.overloadRate)}|承载利用率 ${P(e.usageRate)}|${((s=e.risk)==null?void 0:s.label)||"等待规则"}`}]}),A=i(()=>[{key:"area",index:"01",name:"草地面积统计",desc:"正在统计草地面积与范围",pending:"等待草地面积统计"},{key:"productivity",index:"02",name:"草地生产力核验",desc:"正在核验草地生产力指标",pending:"等待生产力数据"},{key:"capacity",index:"03",name:"理论承载核定",desc:"正在形成草地承载能力结果",pending:"等待承载力核定"},{key:"livestock",index:"04",name:"实际载畜汇总",desc:"正在汇总牦牛存栏与载畜规模",pending:"等待载畜数据"},{key:"comparison",index:"05",name:"承载状态对比",desc:"正在比对理论承载与实际载畜",pending:"等待承载状态对比"},{key:"balance",index:"06",name:"平衡结论生成",desc:"正在生成草畜平衡等级与建议",pending:"等待平衡结论"}]),ce=i(()=>A.value[Math.min($.value,A.value.length-1)]||A.value[0]),Ie=i(()=>{var e;return[{key:"productivity",index:"01",name:"生产力核算",desc:m.value?"草地生产力核算":k.value?"等待核算":"等待选择",state:k.value?"done":"active"},{key:"forage",index:"02",name:"草量折算",desc:m.value?"可利用草量折算":"分析后折算",state:b.value?"active":m.value?"done":k.value?"pending":"disabled"},{key:"livestock",index:"03",name:"载畜折算",desc:m.value?"载畜压力折算":"等待折算",state:b.value?"active":m.value?"done":"disabled"},{key:"balance",index:"04",name:"平衡判定",desc:m.value?(e=v.value.risk)==null?void 0:e.label:"等待判定",state:m.value?"done":"disabled"}]}),Fe=i(()=>m.value?ga(u.value,v.value.risk,Y.value):[]),ve=i(()=>ue.value.filter(e=>Number.isFinite(Number(e.overloadRate))).slice().sort((e,n)=>Number(n.overloadRate)-Number(e.overloadRate)).slice(0,10)),Ve=i(()=>Math.max(1,...ve.value.map(e=>Math.max(0,Number(e.overloadRate)||0)))),Ee=i(()=>ve.value.map((e,n)=>se(te({},e),{rank:n+1})));function Oe(e){const n=Math.max(0,Number(e==null?void 0:e.overloadRate)||0);return Math.max(6,Math.min(100,n/Ve.value*100))}function je(e){var l;const n=ie(e||{},J.value,Y.value);return(l=n.risk)!=null&&l.rankTone?`is-${n.risk.rankTone}`:"is-empty"}function qe(e){const n=ie(e||{},J.value,Y.value);return`${(e==null?void 0:e.name)||"乡镇"}:理论${h(n.bearing)}头,实际${h(n.livestock)}头,超载${aa(n.overloadCount)}头,超载率${P(n.overloadRate)}`}function ne(){F.value=typeof window=="undefined"?1080:window.innerHeight}ma(()=>{ne(),window.addEventListener("resize",ne),U("loading-progress",{progress:100}),U("map-ready"),de()}),ba(()=>{C=!0,window.removeEventListener("resize",ne),E+=1,O+=1,j()}),he(()=>{var e;return(e=u.value)==null?void 0:e.key},()=>{g.value="idle",y.value=0,$.value=0,p.value="",I=null,j()}),he(()=>c.active,e=>{e||!b.value||(g.value="idle",y.value=0,$.value=0,p.value="",I=null,j())});function Ke(e){R.value=e,w.value="",g.value="idle",p.value=""}function Ue(e){e&&(R.value=["county","town","village"].includes(e.type)?e.type:"county",w.value=e.key,g.value="idle",p.value="")}function We(){if(!c.active||!u.value||b.value||!re.value)return;g.value="running",y.value=0,$.value=0,p.value="",j();const e=Date.now(),n=Promise.resolve(u.value);I=n,W=window.setInterval(()=>{if(C)return;const l=I===n?94:100,s=100/A.value.length;y.value=Math.min(l,y.value+1),$.value=Math.min(A.value.length-1,Math.floor(y.value/s))},120),n.finally(()=>Q(this,null,function*(){const l=on-(Date.now()-e);if(l>0&&(yield new Promise(s=>window.setTimeout(s,l))),!(C||g.value!=="running"||I!==n)){if(I=null,j(),!u.value){y.value=0,$.value=0,g.value="idle";return}if(!Xe(u.value)||!v.value.risk){y.value=0,$.value=0,g.value="idle";return}y.value=100,$.value=A.value.length-1,yield new Promise(s=>window.setTimeout(s,900)),!(C||g.value!=="running")&&(g.value="done")}}))}function de(){return Promise.all([Ge(),Ye()])}function Ge(){return Q(this,null,function*(){const e=++O;T.value=!0,M.value="",D.value=null;try{const n=yield ca();if(C||e!==O)return;if(!(n!=null&&n.scenario)||!Array.isArray(n.riskRules)||n.riskRules.length!==5)throw new Error("草畜平衡规则配置不完整");D.value=n}catch(n){if(C||e!==O)return;console.warn("[grassLivestockBalance] balance config unavailable",n),D.value=null,M.value=ge(n,"草畜平衡规则接口暂不可用,请稍后重试。")}finally{!C&&e===O&&(T.value=!1)}})}function Ye(){return Q(this,null,function*(){const e=++E;N.value=!0,p.value="";try{const n=yield va();if(C||e!==E)return;const l=Je(n);Z.value=l.filter(s=>["county","town"].includes(s.type)),ee.value=l.filter(s=>s.type==="village"),p.value=l.length?"":"暂无草畜平衡数据"}catch(n){if(C||e!==E)return;console.warn("[grassLivestockBalance] area balance rows unavailable",n),Z.value=[],ee.value=[],p.value=ge(n,"草畜平衡接口暂不可用,请稍后重试。")}finally{!C&&e===E&&(N.value=!1)}})}function ge(e,n){const l=String((e==null?void 0:e.message)||"").trim();return/404|not found|暂无|未查询到/i.test(l)?"暂未查询到核算数据,请稍后重试。":/network|fetch|timeout|连接|服务|502|503|504/i.test(l)?"核算服务暂时无法连接,请稍后重试。":n}function Je(e=[]){return(Array.isArray(e)?e:[]).map((n,l)=>Qe(n,l)).filter(Boolean)}function Qe(e={},n=0){const l=Ze(e),s=ea(e)||(l?`核算对象${l}`:"");if(!l&&!s)return null;const x=String(e.type||e.areaType||e.area_type||"").trim(),q=l.length===6?"county":l.length===9?"town":l.length===12?"village":x||"area",le=["county","town","village"].includes(x)?x:q;return["county","town","village"].includes(le)?se(te({},e),{key:e.key||`${le}-${l||n}`,type:le,name:s,areaCode:l,year:e.year||""}):null}function Xe(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 Ze(e={}){return String(ke(e,["areaCode","area_code","areacode","code","value","id","areaId","area_id"],"")||"").trim()}function ea(e={}){return String(ke(e,["areaName","area_name","areaname","name","label","zoneName","villageName","village_name"],"")||"").trim()}function aa(e){const n=Number(e)||0;return`${n>0?"+":n<0?"-":""}${h(Math.abs(n))}`}function j(){W&&(window.clearInterval(W),W=null)}function na(e){return m.value||b.value&&e<=$.value}function me(e){var q;const n=v.value,l=la(e),s=Number(n.overloadCount||0),x=s>=0?"超载量":"承载余量";return e===0?`草地面积 ${S(n.areaRange,l,1)}亩|范围数据${l>=.96?"已汇总":"汇总中"}`:e===1?`生产力资料核验 ${S(100,l)}%|草地产能数据${l>=.96?"已校验":"校验中"}`:e===2?`理论承载力 ${S(n.bearing,l)}头|承载能力结果${l>=.96?"已核定":"核定中"}`:e===3?`牦牛存栏 ${S(n.yakNumber,l)}头|实际载畜量 ${S(n.livestock,l)}头`:e===4?`理论承载力 ${S(n.bearing,l)}头|实际载畜量 ${S(n.livestock,l)}头|${x} ${S(Math.abs(s),l)}头`:`超载率 ${S(n.overloadRate,l,2)}%|承载利用率 ${S(n.usageRate,l,2)}%|${l>=.96?((q=n.risk)==null?void 0:q.label)||"等待规则":"正在生成平衡结论"}`}function la(e){if(m.value)return 1;if(!b.value)return 0;const n=100/A.value.length,l=Math.max(0,Math.min(1,(y.value-e*n)/n));return 1-ye(1-l,3)}function S(e,n,l=0){return((Number(e)||0)*Math.max(0,Math.min(1,Number(n)||0))).toLocaleString("zh-CN",{minimumFractionDigits:l,maximumFractionDigits:l})}function ta(e){return e<$.value||m.value?"done":e===$.value&&b.value?"active":"pending"}return(e,n)=>(r(),o("div",ya,[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:H({"--balance-card-height":`${V.value}px`})},[_e(pe,{class:"balance-card balance-target-card",title:"核算对象",width:tn,height:X.value},{default:$e(()=>{var l;return[a("div",pa,[a("div",ka,[(r(!0),o(L,null,z(oe.value,s=>(r(),o("button",{key:s.key,type:"button",class:B({active:R.value===s.key}),onClick:x=>Ke(s.key)},t(s.name),11,ha))),128))]),a("div",_a,[(r(!0),o(L,null,z(Ce.value,s=>{var x;return r(),o("button",{key:s.key,type:"button",class:B({active:s.key===((x=u.value)==null?void 0:x.key)}),title:s.name,onClick:q=>Ue(s)},[a("span",null,t(s.name),1)],10,$a)}),128))]),a("div",wa,[n[0]||(n[0]=a("span",null,"当前对象",-1)),a("strong",null,t(((l=u.value)==null?void 0:l.name)||"未选择"),1),a("small",Ra,t(Ne.value),1),a("button",{type:"button",disabled:!k.value||b.value||!re.value,onClick:We},t(b.value?"分析中...":m.value?"重新分析":"开始分析"),9,Ca)])])]}),_:1},8,["height"]),_e(pe,{class:"balance-card balance-sheet-card",title:Be.value,width:sn,height:V.value},{default:$e(()=>[a("div",{class:B(["balance-sheet",{"is-ready":m.value,"is-running":b.value}])},[n[14]||(n[14]=a("div",{class:"balance-field-lines","aria-hidden":"true"},[a("i"),a("i"),a("i")],-1)),b.value?(r(),o("section",Sa,[a("div",xa,[a("div",{class:"balance-core-ring is-running",style:H({"--usage-angle":`${y.value*3.6}deg`})},[a("div",Na,[n[1]||(n[1]=a("span",null,"分析进度",-1)),a("strong",null,t(y.value)+"%",1),a("small",null,t(ce.value.name),1)])],4),a("div",Ba,[a("span",null,t(u.value.name),1),a("strong",null,t(ce.value.desc),1),a("small",Ma,t(me($.value)),1),a("div",Aa,[a("i",{style:H({width:`${y.value}%`})},null,4)])])]),a("div",Ta,[(r(!0),o(L,null,z(A.value,(l,s)=>(r(),o("div",{key:l.key,class:B(["balance-live-step",`is-${ta(s)}`])},[a("span",null,t(l.index),1),a("div",null,[a("strong",null,t(l.name),1),a("p",null,t(na(s)?me(s):l.pending),1)])],2))),128))])])):m.value?(r(),o("section",Fa,[a("div",Va,[a("div",Ea,[a("span",null,t(Se.value)+"核算对象",1),a("strong",null,t(u.value.name),1),a("small",null,t(xe.value),1)]),a("div",Oa,[a("div",{class:"balance-core-ring",style:H({"--usage-angle":He.value})},[a("div",ja,[n[5]||(n[5]=a("span",null,"承载利用率",-1)),a("strong",null,t(K(P)(v.value.usageRate)),1),a("small",null,"超载率 "+t(K(P)(v.value.overloadRate)),1)])],4),n[6]||(n[6]=a("div",{class:"balance-core-caption"},"草地承载力模型",-1))]),a("div",{class:B(["balance-verdict-card",`is-${v.value.risk.key}`])},[n[7]||(n[7]=a("span",null,"分析结论",-1)),a("strong",null,t(v.value.risk.label),1),a("small",null,t(Le.value),1)],2)]),a("div",qa,[a("div",Ka,[n[8]||(n[8]=a("span",null,"理论承载力",-1)),a("div",null,[a("i",{style:H({width:`${v.value.bearingPercent}%`})},null,4)]),a("strong",null,t(K(h)(v.value.bearing))+"头",1)]),a("div",Ua,[n[9]||(n[9]=a("span",null,"实际载畜量",-1)),a("div",null,[a("i",{style:H({width:`${v.value.livestockPercent}%`})},null,4)]),a("strong",null,t(K(h)(v.value.livestock))+"头",1)])]),a("div",Wa,[a("div",Ga,[a("div",Ya,[n[10]||(n[10]=a("span",null,"核算过程",-1)),a("small",null,t(u.value.year||"当前年度"),1)]),a("div",Ja,[(r(!0),o(L,null,z(Ie.value,l=>(r(),o("span",{key:`track-${l.key}`,class:B(`is-${l.state}`)},t(l.name),3))),128))]),(r(!0),o(L,null,z(De.value,l=>(r(),o("div",{key:l.key,class:"balance-formula-row"},[a("span",null,t(l.index),1),a("div",null,[a("strong",null,t(l.name),1),a("p",null,t(l.desc),1)])]))),128))]),a("div",Qa,[a("div",Xa,[n[11]||(n[11]=a("span",null,"结论与建议",-1)),a("small",null,t(ze.value),1)]),a("div",Za,[a("strong",null,t(v.value.risk.description),1),a("p",null,t(Pe.value),1)]),a("div",en,[(r(!0),o(L,null,z(Fe.value,(l,s)=>(r(),o("div",{key:`${l}-${s}`,class:"balance-advice-item"},[a("span",null,t(s+1),1),a("p",null,t(l),1)]))),128))])]),a("div",an,[n[13]||(n[13]=a("div",{class:"balance-section-title"},[a("span",null,"超载率排行"),a("small",null,"乡镇 Top10")],-1)),a("div",nn,[(r(!0),o(L,null,z(Ee.value,l=>(r(),o("div",{key:`overload-${l.key||l.name}`,class:B(["balance-rank-row",je(l)]),style:H({"--rank-progress":`${Oe(l)}%`}),title:qe(l)},[a("span",null,t(l.rank),1),a("strong",null,t(l.name),1),n[12]||(n[12]=a("div",null,[a("i")],-1)),a("em",null,t(K(P)(l.overloadRate)),1)],14,ln))),128))])])])])):(r(),o("section",Pa,[a("div",La,[a("div",za,[a("div",Ha,[a("span",null,t(Me.value),1),a("strong",null,t(k.value?u.value.name:"草畜平衡"),1),a("small",null,t(k.value?"待执行模型分析":"等待核算对象"),1)])]),a("h2",null,t(Ae.value),1),a("p",null,t(Te.value),1),ae.value?(r(),o("button",{key:0,class:"balance-retry-button",type:"button",disabled:N.value,onClick:de},t(N.value?"正在重新加载":"重新加载核算对象"),9,Da)):fa("",!0)]),a("div",Ia,[a("span",{class:B({active:k.value})},"对象锁定",2),n[2]||(n[2]=a("i",null,null,-1)),a("span",{class:B({active:k.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{yn as default};
|
|
|