Files
ogame-vue-ts/docs/assets/DiplomacyView-Bz3CIKaK.js
谦君 9b9fda0400 feat: 新增NPC与外交逻辑,优化UI组件结构
重构并精简了部分UI组件,移除冗余弹窗与详情组件,新增NPC相关逻辑(npcBehaviorLogic、npcGrowthLogic、npcStore等)及外交逻辑(diplomaticLogic、DiplomacyView)。完善分页、标签、复选框等通用UI组件。优化战报弹窗,调整README下载链接为相对路径,修复部分国际化内容。
2025-12-15 08:23:45 +08:00

1 line
16 KiB
JavaScript

import{$t as e,En as t,Gn as n,Gt as r,Jn as i,Jt as a,Ln as o,Qt as s,Xn as c,Xt as l,Yn as u,Yt as d,Zt as f,_n as p,en as m,gn as h,ln as g,mn as _,qn as ee,rn as v,tn as y,vn as b}from"./game-logic-Bi1l7y4K.js";import"./vendor-pinia-DqhKuBjp.js";import{o as x}from"./vendor-vue-router-1sDnnIWZ.js";import"./vendor-crypto-CQM8pryk.js";import"./game-i18n-Dr0JspcV.js";import{c as S}from"./vendor-others-DTUzJ7S-.js";import{$ as C,D as w,E as T,O as E,T as D,et as O,k}from"./vendor-reka-ui-BEHIKScj.js";import"./vendor-utils-BlvnUqQX.js";import"./vendor-vueuse-CJcfYqoW.js";import{G as A,L as j,N as te,P as M,W as N,c as ne,s as re}from"./vendor-icons-z9V6Jdbh.js";import{t as ie}from"./CardDescription-BSLS07AU.js";import{g as P,p as F}from"./game-config-CG6z6nnH.js";import{G as I,H as L,K as ae,U as R,W as z,_ as oe,b as se,p as ce,q as le,t as ue,v as B,y as V}from"./index-BT5w6et-.js";import{i as de,n as fe,r as H,t as U}from"./TabsTrigger-DrosU7aN.js";var W=y({__name:`Pagination`,props:{page:{},defaultPage:{},itemsPerPage:{},total:{},siblingCount:{},disabled:{type:Boolean},showEdges:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},emits:[`update:page`],setup(e,{emit:r}){let a=e,o=r,s=C(S(a,`class`),o);return(e,r)=>(_(),l(n(k),g({"data-slot":`pagination`},n(s),{class:n(I)(`mx-auto flex w-full justify-center`,a.class)}),{default:t(t=>[p(e.$slots,`default`,i(v(t)))]),_:3},16,[`class`]))}}),G=y({__name:`PaginationContent`,props:{asChild:{type:Boolean},as:{},class:{}},setup(e){let r=e,a=S(r,`class`);return(e,o)=>(_(),l(n(E),g({"data-slot":`pagination-content`},n(a),{class:n(I)(`flex flex-row items-center gap-1`,r.class)}),{default:t(t=>[p(e.$slots,`default`,i(v(t)))]),_:3},16,[`class`]))}}),K=y({__name:`PaginationItem`,props:{value:{},asChild:{type:Boolean},as:{},size:{default:`icon`},class:{},isActive:{type:Boolean}},setup(e){let r=e,i=S(r,`class`,`size`,`isActive`);return(a,o)=>(_(),l(n(w),g({"data-slot":`pagination-item`},n(i),{class:n(I)(n(R)({variant:e.isActive?`outline`:`ghost`,size:e.size}),r.class)}),{default:t(()=>[p(a.$slots,`default`)]),_:3},16,[`class`]))}}),q=y({__name:`PaginationNext`,props:{asChild:{type:Boolean},as:{},size:{default:`default`},class:{}},setup(e){let r=e,i=O(S(r,`class`,`size`));return(a,o)=>(_(),l(n(T),g({"data-slot":`pagination-next`,class:n(I)(n(R)({variant:`ghost`,size:e.size}),`gap-1 px-2.5 sm:pr-2.5`,r.class)},n(i)),{default:t(()=>[p(a.$slots,`default`,{},()=>[o[0]||=d(`span`,{class:`hidden sm:block`},`Next`,-1),m(n(N))])]),_:3},16,[`class`]))}}),J=y({__name:`PaginationPrevious`,props:{asChild:{type:Boolean},as:{},size:{default:`default`},class:{}},setup(e){let r=e,i=O(S(r,`class`,`size`));return(a,o)=>(_(),l(n(D),g({"data-slot":`pagination-previous`,class:n(I)(n(R)({variant:`ghost`,size:e.size}),`gap-1 px-2.5 sm:pr-2.5`,r.class)},n(i)),{default:t(()=>[p(a.$slots,`default`,{},()=>[m(n(A)),o[0]||=d(`span`,{class:`hidden sm:block`},`Previous`,-1)])]),_:3},16,[`class`]))}}),Y={class:`flex items-start justify-between`},pe={class:`flex-1`},me={key:0,class:`ml-2`},he={class:`space-y-2`},ge={class:`flex items-center justify-between text-sm`},X={class:`text-muted-foreground`},_e={class:`relative`},ve={class:`h-2 bg-muted rounded-full overflow-hidden`},ye={key:0,class:`pt-2 border-t`},Z={class:`text-sm text-muted-foreground mb-2`},be={class:`flex flex-wrap gap-1`},xe={class:`flex gap-2 pt-2`},Se={key:1,class:`pt-2 border-t`},Ce={class:`text-xs text-muted-foreground mb-1`},we={class:`flex items-center gap-2 text-xs`},Te={class:`text-muted-foreground`},Q=y({__name:`NpcRelationCard`,props:{npc:{},relation:{}},setup(i){let o=i,p=x(),g=ue(),{t:v}=ae(),y=a(()=>o.relation?.reputation||0),S=a(()=>o.relation?.status||P.Neutral),C=a(()=>{switch(S.value){case P.Friendly:return v(`diplomacy.status.friendly`);case P.Hostile:return v(`diplomacy.status.hostile`);default:return v(`diplomacy.status.neutral`)}}),w=a(()=>{switch(S.value){case P.Friendly:return`default`;case P.Hostile:return`destructive`;default:return`secondary`}}),T=a(()=>y.value>=20?`text-green-600 dark:text-green-400`:y.value<=-20?`text-red-600 dark:text-red-400`:`text-muted-foreground`),E=a(()=>!o.relation?.history||o.relation.history.length===0?null:o.relation.history[o.relation.history.length-1]),D=e=>g.npcs.find(t=>t.id===e)?.name||e.substring(0,8),O=e=>{switch(e){case F.GiftResources:return M;case F.Attack:case F.AllyAttacked:return ne;case F.Spy:return j;case F.StealDebris:return re;default:return M}},k=e=>{switch(e){case F.GiftResources:return v(`diplomacy.events.gift`);case F.Attack:return v(`diplomacy.events.attack`);case F.AllyAttacked:return v(`diplomacy.events.allyAttacked`);case F.Spy:return v(`diplomacy.events.spy`);case F.StealDebris:return v(`diplomacy.events.stealDebris`);default:return e}},A=()=>{if(o.npc.planets.length>0){let e=o.npc.planets[0];if(!e)return;p.push({path:`/fleet`,query:{galaxy:e.position.galaxy,system:e.position.system,position:e.position.position,gift:`1`}})}},N=()=>{if(o.npc.planets.length>0){let e=o.npc.planets[0];if(!e)return;p.push({path:`/galaxy`,query:{galaxy:e.position.galaxy,system:e.position.system,highlightNpc:o.npc.id}})}};return(a,o)=>(_(),l(n(se),null,{default:t(()=>[m(n(B),null,{default:t(()=>[d(`div`,Y,[d(`div`,pe,[m(n(oe),{class:`flex items-center gap-2`},{default:t(()=>[e(c(i.npc.name)+` `,1),m(n(L),{variant:w.value},{default:t(()=>[e(c(C.value),1)]),_:1},8,[`variant`])]),_:1}),m(n(ie),{class:`mt-1`},{default:t(()=>[e(c(i.npc.planets.length)+` `+c(n(v)(`diplomacy.planets`))+` `,1),i.npc.allies&&i.npc.allies.length>0?(_(),s(`span`,me,`· `+c(i.npc.allies.length)+` `+c(n(v)(`diplomacy.allies`)),1)):f(``,!0)]),_:1})])])]),_:1}),m(n(V),{class:`space-y-4`},{default:t(()=>[d(`div`,he,[d(`div`,ge,[d(`span`,X,c(n(v)(`diplomacy.reputation`)),1),d(`span`,{class:ee([`font-semibold`,T.value])},c(y.value>0?`+`:``)+c(y.value),3)]),d(`div`,_e,[d(`div`,ve,[y.value<0?(_(),s(`div`,{key:0,class:`h-full bg-red-500 dark:bg-red-600 absolute right-1/2`,style:u({width:`${Math.abs(y.value)/2}%`})},null,4)):f(``,!0),y.value>0?(_(),s(`div`,{key:1,class:`h-full bg-green-500 dark:bg-green-600 absolute left-1/2`,style:u({width:`${y.value/2}%`})},null,4)):f(``,!0)]),o[0]||=d(`div`,{class:`absolute left-1/2 top-0 bottom-0 w-px bg-border`},null,-1)]),o[1]||=d(`div`,{class:`flex justify-between text-xs text-muted-foreground`},[d(`span`,null,`-100`),d(`span`,null,`0`),d(`span`,null,`+100`)],-1)]),i.npc.allies&&i.npc.allies.length>0?(_(),s(`div`,ye,[d(`p`,Z,c(n(v)(`diplomacy.alliedWith`))+`:`,1),d(`div`,be,[(_(!0),s(r,null,h(i.npc.allies.slice(0,3),r=>(_(),l(n(L),{key:r,variant:`outline`,class:`text-xs`},{default:t(()=>[e(c(D(r)),1)]),_:2},1024))),128)),i.npc.allies.length>3?(_(),l(n(L),{key:0,variant:`outline`,class:`text-xs`},{default:t(()=>[e(` +`+c(i.npc.allies.length-3)+` `+c(n(v)(`diplomacy.more`)),1)]),_:1})):f(``,!0)])])):f(``,!0),d(`div`,xe,[m(n(z),{size:`sm`,variant:`outline`,class:`flex-1`,onClick:A},{default:t(()=>[m(n(M),{class:`h-4 w-4 mr-2`}),e(` `+c(n(v)(`diplomacy.actions.gift`)),1)]),_:1}),m(n(z),{size:`sm`,variant:`outline`,class:`flex-1`,onClick:N},{default:t(()=>[m(n(te),{class:`h-4 w-4 mr-2`}),e(` `+c(n(v)(`diplomacy.actions.viewPlanets`)),1)]),_:1})]),E.value?(_(),s(`div`,Se,[d(`p`,Ce,c(n(v)(`diplomacy.lastEvent`))+`:`,1),d(`div`,we,[(_(),l(b(O(E.value.reason)),{class:`h-3 w-3`})),d(`span`,null,c(k(E.value.reason)),1),d(`span`,Te,c(n(ce)(Date.now()-E.value.timestamp))+` `+c(n(v)(`diplomacy.ago`)),1)])])):f(``,!0)]),_:1})]),_:1}))}}),Ee={class:`container mx-auto p-4 sm:p-6 space-y-6`},De={class:`flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4`},Oe={class:`text-2xl sm:text-3xl font-bold`},ke={class:`text-sm text-muted-foreground mt-1`},Ae={key:0,class:`text-center py-12 text-muted-foreground`},je={class:`grid grid-cols-1 md:grid-cols-2 gap-4`},Me={key:1,class:`px-2 text-muted-foreground`},Ne={key:0,class:`text-center py-12 text-muted-foreground`},Pe={class:`grid grid-cols-1 md:grid-cols-2 gap-4`},Fe={key:1,class:`px-2 text-muted-foreground`},Ie={key:0,class:`text-center py-12 text-muted-foreground`},Le={class:`grid grid-cols-1 md:grid-cols-2 gap-4`},Re={key:1,class:`px-2 text-muted-foreground`},ze={key:0,class:`text-center py-12 text-muted-foreground`},Be={class:`grid grid-cols-1 md:grid-cols-2 gap-4`},Ve={key:1,class:`px-2 text-muted-foreground`},He={class:`space-y-2 max-h-96 overflow-y-auto`},Ue={class:`flex-shrink-0 mt-0.5`},We={class:`flex-1 min-w-0`},Ge={class:`flex items-center gap-2 mb-1`},Ke={class:`font-medium`},qe={class:`text-sm text-muted-foreground`},Je={class:`text-xs text-muted-foreground mt-1`},$=20,Ye=y({__name:`DiplomacyView`,setup(i){let u=le(),p=ue(),{t:g}=ae(),v=o(`all`),y=o({all:1,friendly:1,neutral:1,hostile:1}),x=e=>u.player.diplomaticRelations?.[e],S=a(()=>p.npcs),C=a(()=>p.npcs.filter(e=>x(e.id)?.status===P.Friendly)),w=a(()=>p.npcs.filter(e=>{let t=x(e.id);return!t||t.status===P.Neutral})),T=a(()=>p.npcs.filter(e=>x(e.id)?.status===P.Hostile)),E=(e,t)=>{let n=((y.value[t]||1)-1)*$,r=n+$;return e.slice(n,r)},D=e=>Math.ceil(e.length/$),O=a(()=>E(S.value,`all`)),k=a(()=>E(C.value,`friendly`)),A=a(()=>E(w.value,`neutral`)),te=a(()=>E(T.value,`hostile`)),N=a(()=>D(S.value)),I=a(()=>D(C.value)),R=a(()=>D(w.value)),z=a(()=>D(T.value)),Y=(e,t)=>{let n=[];if(t<=5)for(let e=1;e<=t;e++)n.push(e);else{n.push(1),e>3&&n.push(`...`);let r=Math.max(2,e-1),i=Math.min(t-1,e+1);for(let e=r;e<=i;e++)n.push(e);e<t-2&&n.push(`...`),n.push(t)}return n},pe=a(()=>Y(y.value.all||1,N.value)),me=a(()=>Y(y.value.friendly||1,I.value)),he=a(()=>Y(y.value.neutral||1,R.value)),ge=a(()=>Y(y.value.hostile||1,z.value)),X=a(()=>[...u.player.diplomaticReports||[]].sort((e,t)=>t.timestamp-e.timestamp).slice(0,20)),_e=e=>{switch(e){case F.GiftResources:return M;case F.Attack:case F.AllyAttacked:return ne;case F.Spy:return j;case F.StealDebris:return re;default:return M}},ve=e=>e>0?`text-green-600 dark:text-green-400`:e<0?`text-red-600 dark:text-red-400`:`text-muted-foreground`,ye=e=>e>0?`default`:e<0?`destructive`:`secondary`,Z=e=>{switch(e){case P.Friendly:return`default`;case P.Hostile:return`destructive`;default:return`secondary`}},be=e=>{switch(e){case P.Friendly:return g(`diplomacy.status.friendly`);case P.Hostile:return g(`diplomacy.status.hostile`);default:return g(`diplomacy.status.neutral`)}};return(i,a)=>(_(),s(`div`,Ee,[d(`div`,De,[d(`div`,null,[d(`h1`,Oe,c(n(g)(`diplomacy.title`)),1),d(`p`,ke,c(n(g)(`diplomacy.description`)),1)])]),m(n(de),{modelValue:v.value,"onUpdate:modelValue":a[4]||=e=>v.value=e,class:`w-full`},{default:t(()=>[m(n(fe),{class:`grid w-full grid-cols-4`},{default:t(()=>[m(n(U),{value:`all`},{default:t(()=>[e(c(n(g)(`diplomacy.tabs.all`))+` `,1),m(n(L),{variant:`secondary`,class:`ml-2`},{default:t(()=>[e(c(S.value.length),1)]),_:1})]),_:1}),m(n(U),{value:`friendly`},{default:t(()=>[e(c(n(g)(`diplomacy.tabs.friendly`))+` `,1),m(n(L),{variant:`secondary`,class:`ml-2`},{default:t(()=>[e(c(C.value.length),1)]),_:1})]),_:1}),m(n(U),{value:`neutral`},{default:t(()=>[e(c(n(g)(`diplomacy.tabs.neutral`))+` `,1),m(n(L),{variant:`secondary`,class:`ml-2`},{default:t(()=>[e(c(w.value.length),1)]),_:1})]),_:1}),m(n(U),{value:`hostile`},{default:t(()=>[e(c(n(g)(`diplomacy.tabs.hostile`))+` `,1),m(n(L),{variant:`secondary`,class:`ml-2`},{default:t(()=>[e(c(T.value.length),1)]),_:1})]),_:1})]),_:1}),m(n(H),{value:`all`,class:`space-y-4 mt-6`},{default:t(()=>[S.value.length===0?(_(),s(`div`,Ae,c(n(g)(`diplomacy.noNpcs`)),1)):(_(),s(r,{key:1},[d(`div`,je,[(_(!0),s(r,null,h(O.value,e=>(_(),l(Q,{key:e.id,npc:e,relation:x(e.id)},null,8,[`npc`,`relation`]))),128))]),N.value>1?(_(),l(n(W),{key:0,page:y.value.all,"onUpdate:page":a[0]||=e=>y.value.all=e,total:S.value.length,"items-per-page":$,"sibling-count":1,"show-edges":``,class:`mt-6`},{default:t(()=>[m(n(G),null,{default:t(()=>[m(n(J),null,{default:t(()=>[e(c(n(g)(`pagination.previous`)),1)]),_:1}),(_(!0),s(r,null,h(pe.value,(i,a)=>(_(),s(r,{key:a},[typeof i==`number`?(_(),l(n(K),{key:0,value:i,"is-active":i===y.value.all},{default:t(()=>[e(c(i),1)]),_:2},1032,[`value`,`is-active`])):(_(),s(`span`,Me,c(i),1))],64))),128)),m(n(q),null,{default:t(()=>[e(c(n(g)(`pagination.next`)),1)]),_:1})]),_:1})]),_:1},8,[`page`,`total`])):f(``,!0)],64))]),_:1}),m(n(H),{value:`friendly`,class:`space-y-4 mt-6`},{default:t(()=>[C.value.length===0?(_(),s(`div`,Ne,c(n(g)(`diplomacy.noFriendlyNpcs`)),1)):(_(),s(r,{key:1},[d(`div`,Pe,[(_(!0),s(r,null,h(k.value,e=>(_(),l(Q,{key:e.id,npc:e,relation:x(e.id)},null,8,[`npc`,`relation`]))),128))]),I.value>1?(_(),l(n(W),{key:0,page:y.value.friendly,"onUpdate:page":a[1]||=e=>y.value.friendly=e,total:C.value.length,"items-per-page":$,"sibling-count":1,"show-edges":``,class:`mt-6`},{default:t(()=>[m(n(G),null,{default:t(()=>[m(n(J),null,{default:t(()=>[e(c(n(g)(`pagination.previous`)),1)]),_:1}),(_(!0),s(r,null,h(me.value,(i,a)=>(_(),s(r,{key:a},[typeof i==`number`?(_(),l(n(K),{key:0,value:i,"is-active":i===y.value.friendly},{default:t(()=>[e(c(i),1)]),_:2},1032,[`value`,`is-active`])):(_(),s(`span`,Fe,c(i),1))],64))),128)),m(n(q),null,{default:t(()=>[e(c(n(g)(`pagination.next`)),1)]),_:1})]),_:1})]),_:1},8,[`page`,`total`])):f(``,!0)],64))]),_:1}),m(n(H),{value:`neutral`,class:`space-y-4 mt-6`},{default:t(()=>[w.value.length===0?(_(),s(`div`,Ie,c(n(g)(`diplomacy.noNeutralNpcs`)),1)):(_(),s(r,{key:1},[d(`div`,Le,[(_(!0),s(r,null,h(A.value,e=>(_(),l(Q,{key:e.id,npc:e,relation:x(e.id)},null,8,[`npc`,`relation`]))),128))]),R.value>1?(_(),l(n(W),{key:0,page:y.value.neutral,"onUpdate:page":a[2]||=e=>y.value.neutral=e,total:w.value.length,"items-per-page":$,"sibling-count":1,"show-edges":``,class:`mt-6`},{default:t(()=>[m(n(G),null,{default:t(()=>[m(n(J),null,{default:t(()=>[e(c(n(g)(`pagination.previous`)),1)]),_:1}),(_(!0),s(r,null,h(he.value,(i,a)=>(_(),s(r,{key:a},[typeof i==`number`?(_(),l(n(K),{key:0,value:i,"is-active":i===y.value.neutral},{default:t(()=>[e(c(i),1)]),_:2},1032,[`value`,`is-active`])):(_(),s(`span`,Re,c(i),1))],64))),128)),m(n(q),null,{default:t(()=>[e(c(n(g)(`pagination.next`)),1)]),_:1})]),_:1})]),_:1},8,[`page`,`total`])):f(``,!0)],64))]),_:1}),m(n(H),{value:`hostile`,class:`space-y-4 mt-6`},{default:t(()=>[T.value.length===0?(_(),s(`div`,ze,c(n(g)(`diplomacy.noHostileNpcs`)),1)):(_(),s(r,{key:1},[d(`div`,Be,[(_(!0),s(r,null,h(te.value,e=>(_(),l(Q,{key:e.id,npc:e,relation:x(e.id)},null,8,[`npc`,`relation`]))),128))]),z.value>1?(_(),l(n(W),{key:0,page:y.value.hostile,"onUpdate:page":a[3]||=e=>y.value.hostile=e,total:T.value.length,"items-per-page":$,"sibling-count":1,"show-edges":``,class:`mt-6`},{default:t(()=>[m(n(G),null,{default:t(()=>[m(n(J),null,{default:t(()=>[e(c(n(g)(`pagination.previous`)),1)]),_:1}),(_(!0),s(r,null,h(ge.value,(i,a)=>(_(),s(r,{key:a},[typeof i==`number`?(_(),l(n(K),{key:0,value:i,"is-active":i===y.value.hostile},{default:t(()=>[e(c(i),1)]),_:2},1032,[`value`,`is-active`])):(_(),s(`span`,Ve,c(i),1))],64))),128)),m(n(q),null,{default:t(()=>[e(c(n(g)(`pagination.next`)),1)]),_:1})]),_:1})]),_:1},8,[`page`,`total`])):f(``,!0)],64))]),_:1})]),_:1},8,[`modelValue`]),X.value.length>0?(_(),l(n(se),{key:0},{default:t(()=>[m(n(B),null,{default:t(()=>[m(n(oe),null,{default:t(()=>[e(c(n(g)(`diplomacy.recentEvents`)),1)]),_:1}),m(n(ie),null,{default:t(()=>[e(c(n(g)(`diplomacy.recentEventsDescription`)),1)]),_:1})]),_:1}),m(n(V),null,{default:t(()=>[d(`div`,He,[(_(!0),s(r,null,h(X.value,r=>(_(),s(`div`,{key:r.id,class:`flex items-start gap-3 p-3 rounded-lg border bg-card hover:bg-accent/50 transition-colors`},[d(`div`,Ue,[(_(),l(b(_e(r.eventType)),{class:ee([`h-5 w-5`,ve(r.reputationChange)])},null,8,[`class`]))]),d(`div`,We,[d(`div`,Ge,[d(`span`,Ke,c(r.npcName),1),m(n(L),{variant:ye(r.reputationChange),class:`text-xs`},{default:t(()=>[e(c(r.reputationChange>0?`+`:``)+c(r.reputationChange),1)]),_:2},1032,[`variant`]),m(n(L),{variant:Z(r.newStatus),class:`text-xs`},{default:t(()=>[e(c(be(r.newStatus)),1)]),_:2},1032,[`variant`])]),d(`p`,qe,c(r.message),1),d(`p`,Je,c(n(ce)(Date.now()-r.timestamp))+` `+c(n(g)(`diplomacy.ago`)),1)])]))),128))])]),_:1})]),_:1})):f(``,!0)]))}});export{Ye as default};