From 6d701f2b858bcf255b453cfa471b7edb66b2f2b8 Mon Sep 17 00:00:00 2001 From: duanhao Date: Wed, 13 Aug 2025 16:43:36 +0800 Subject: [PATCH] =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/anchorAvatar/boss.png | Bin 0 -> 13766 bytes src/store/groupEvolution/index.js | 177 ++++++++++++++---- src/store/keyNodeRecognition/index.js | 9 +- src/store/linkPrediction/index.js | 164 ++++++++-------- .../GroupEvolution/components/groupChart.vue | 6 +- .../GroupEvolution/components/groupShow.vue | 18 +- .../components/attentionTopic.vue | 12 +- .../components/detailNode.vue | 43 ++++- .../components/monitoring.vue | 7 + .../components/userChart.vue | 15 +- .../anchorRecommendation/index.vue | 2 +- .../components/GraphPanel.vue | 16 +- .../opinionLeader/components/GraphPanel.vue | 12 +- .../KeyNodeDiscern/opinionLeader/index.vue | 34 ++-- .../LinkPrediction/components/cloudWords.vue | 1 - .../socialGroups/components/cloudWords.vue | 1 - 16 files changed, 342 insertions(+), 175 deletions(-) create mode 100644 src/assets/anchorAvatar/boss.png diff --git a/src/assets/anchorAvatar/boss.png b/src/assets/anchorAvatar/boss.png new file mode 100644 index 0000000000000000000000000000000000000000..263ba2fd0f6ee7349757398d0bd5dacb6590f8c3 GIT binary patch literal 13766 zcmV;%H95+OP)%`0#-P;O{#bZ0u8#ki`W&=h9f2?-;9_U5KDlIGK|Jbn)RyDwmJqeY}fZVjez~Pt`HQP zDwX+T_86D4ZFPVRkR66DlG>ev=d@3ir$7|6yPniu2GX)+)<84>V;FNM=Doh}f_MVD z(QT7Axch;`OO!dU@HL0rI?D3zkeR_}5M{fE@LqAdQ2l46llxKy&z5%BPUwdY2C)5r zYYT2xaP@fDBP8XU_3D{_`j207*fxao?ZCbO000SaNLh0L01m_e01m_fl`9S#001BW zNklWR1iC|vk&?g(d0;8nIdYES zh#X8H7AKGsJTt_OeG(hP2?>4%;&2iZa}peq93YszvM~@I#()HRKX&!l-PxU)-I+Tx z_tlj@zTa1UtGa9Mz4PAP{{EOd-CbQ(U0waF?_G*gT9*#L=I4shQBc&R@3IOg^H0$_ zuQd@-$u6oMq5ubBP{uiHJz8KN&S9Tr^<(UxWC(CVN5#W+E!Hc1U-Dm{l#`Cq)WRoLEQ^Vso9W-p8wX>Ghwgz3Cfd_rp<)x z^of&KY9ghr>uxdanVEWopq4U$W>0jT`qFxpg^vInL6ho~~CSFV@sHgwl2`c|w787+(PtYTGK2U6E9WCdbkUI~y=}BE7 zDcO{{PCs<=eTuSeweM@r-;d^ruV#aQN>7$PzGu}_ncePykB;2=z>FsPG!Y%yk_va| zQ|x$xdhS#0^3WYmQ0shAYkmLFwYRH<=lAKz2U{+>e6BX9gCGX&IZ z_XT^4IpVH=g0{`Ac0`+=plu^)rxSGDeicWKyjIOW`>j2Lrh5iKkG|o(CyA)&4xsCV z5ho=D9ny(MVGMy<)Z6a)mu#9X7n=R?m;Uv(O8DD4K~Mbj zgT)X!&UAuy+P>%RJv2eNo$X!jw{3!+xcfsz3Y%Qy%)qpG@n-&cUZlg5`Yq|cEA35? zwx_L34ChYeQ@FYlM+b=)+U89=6w-n=U%3j}=l%k%rXK#%?6yqO?c+g1kN;*$R~&^( zpS
22Xj+jBbXkZyd-hfi*JDHGt)js=M9C0>^PD73+?e{+wf+Qd*VPgg0>t%F*$cc!b@o{kuKi!w?4Y%tLB#S zpf~-^UzyQv%n(TQpD}Hw8#3XXj~Txmazih6nqneTi~hPiqwDO^Zs?u++_6v-y*~D| zLQ*fH%ZlN-UlWyn^u>>CnKFONwAt%T&Q8cDgm}wuQt`ai)Y_wd{RwK$ci2um7HV_j zw$TZyh>nb%c#}H&*vTzf?ziOa-t@PBWd<2N;z*{Gk+WTL>oab1EeuUw+19B~>T&z$ zs$+zAbi;XL>Kt4T!sLEyM}1?Y{V3`V=RFT#ZbUzgNi*35>kZyB*WGH-f8PS&alVOv zVd2zYf8isWo}^pDgL+)%Qo4#s2V26AZW=*f`L@{^(rVg#a52Ob9?3p7K<3jZ<9cYM zcI$M6e7=>)gQ#wCueQ`hP)~Q=>q1_ew@{Mm+=`VAxKtKRmnW;FRHXFOiqW3h3*XjiKDrIu;s z8Q*TKW~T!XPem3Y2o2OUH+6SPHeoZDWk`;G_qhJ{X#(5AH}rNXJd{``kG zG)XtigRVC@Q%b3sw9agJu59RYdDY+jwHY0y+}%*)Xspplul4jy;ti5Rf+-~PJQ?DAM9wU@7!RWr6N%fm)1QKC3M{4j2oA8 zo}8nYFw@btF7f(IJuQxX_xZ|ibb`h=WiSPZh$s_RQ1X4T8v^IoE^l~t*N4H|L9)vE zgiX`BkJpWLUlCEJV|#r^Jm{ZWZ2q9(4Tt8zugn5P*S@5>5hN+@7kVAZO`OazvE+x-&)%u z3c`b9dQDS7OiXa@caTR(DPIck5y?ELH+h$-L<)+u=;${+Ny6e@ zH_{Ke?%~zUm+T;mhu3mVux@>=^`;)_xlLLpwg=bU)_jPrtn#tE0**8vzrPi6k3y0D z#p30xh~D;vA_c3QnIci#W|X9Wm1;g4MxwUENR}|Coq-XQ`%ExP4lo?z8qGklW`+c8F`OlR092p)o zo6TAtC~>`|AZVMKDL3bm@&63%>t27%^|v@QS^)RFX~$J?wn8{5=Sa7%zbUz=+eIY1 zJ?-RrcdN^^T0(q}AuFA$2Nh+AwiP#i#PuPl-zL~zHyu5wSRz%Em0w4;c{AH|%73P` z2g!UlZ+q~6+QxH-3%=} zw?4J>E;0s~z^XMu?)9}AKD_eg_w-a7m+t)H74sbxn%Wc%NVYx0$*+;Ux$*h z&%aL+empCe@3|sJP+QC5=Y^g3p={*zM-FHrt)_x|r~hw?o+<5F$_CjyL#gR~k2#1#{hnV*DB&&gn<2UYvIgNUm3r(+`)&_IdrZPIcr; z(a97;h8UvR4-n-ANanG%W1%5x_&T_L_q8CXkJ(M;jZG;N0pV-i_6PM^A_GmD=&nF3 z);Fb;(q5!&HlGFBxL<}NRlB=&7{u|4tBDP|NEff)F6UMoUH9>zOo2|kEk>cQfa|qo z3?0ei64Pq5SddI<#|CZ6nSFdjUu?H$?l;frz89xI9*RXK2mnfUJda+yC7Eep-sRrMVAhjZ;w3jKH%`pN--X(%0E(xz?+vMFZAZFNz@v_P1 zW8N=rCnr@e)aXeL`21u2Tf^DQ#PB+ z5hc!W{*5d}$zMXucJ2AJTW|VmTdYEdCysxy&Y>@dkkd+hAE6e!Zj5ZHGlsYZ;p`JW zZ!d35kcp~w`_%$MW8Jm2492e&xwLxt^;187dkTDgtqvX#5VpL=$17DwZyk%umG*4j z-sp2>#R|l~me2R(x!B#WK0ri7ciyz0+i&wRQ%Y%9D4WYcO6UQ zi7(%`QJfrixQ%usj0)Ezu}tfKVty(xpyDS~)HR!ZQPb!c1a0 z->%T!(QqtyE+TqwGm2q;&d5;6_a7eM-(&kT=)aV!5)o0Zz>t~^czn(;)`*DcdoS^Q zD|M548tq93Me2v2tYi99CbGhQ;@gkyBO;<(CcBA<=;Fd9?oW&7Oev+^Bc)2&Ts|Pu zPF!-LzAjl>cK5@H&d0FBqA+xj&4H$d=mU+7S?bF+{f#UYF+>KB(*tR?KU;4;P30;h zL`~bs*#Pfr;`fDTbIM5yeR0}&$G>?%<_dqf zbmmeWPayg;KI}uiU0LvgHSn6~$UuRAZ-CTzVW~_+L=`+|MKQ9j)KO1Pkd6z~8$den zSoJ#hTjv;Xy{SLY{xeMi_x> zRj%hYNcS>ckDXbS4sbK*SP$MyKX}_J&gTN=We@dn`SBh;F0Yi)e=fgPsWjnjN-6C@ z(po>1?aS03Qi_TbgZu?g3^24Tt@0=G*aiM_>e`k{BlTl44~&Kg~SHbLUuktN`(@A7rE%=`#?)<*NL}^^7s19N5SGt=0Ly(Lru61H^b?u|h;d zi)-Akv*#Jf8aaNxkshx9zyRO3irhsPpzpio=l~HBtt_t)5z(b3=H0G2#Cp0yfy-aI z$n~B(yU5Sm%Lo(zG5QX3|MPg9Cob^$;R2UCKE}UKm%d0uMBhLAD3ANlO?=79`5hK8yI0@Ve0?y>D@k9L`*(hxdE84tvOFw`GuEjge>-ye9?BgJg32MXrX72%@IF0lcCh>KX8qwVFuT z;LU(s7Z(|+&Rt~7#PB};a;xY-m7pJl#iX~3`+w*lm#abAe&)F|cn;X4%lv#jFlILz z+`%fe5p%GFTwGwJ>H=?72d}(bW~3J{p(@lRi%a}GB1PYN^DBvn=tvKb_aG3lS{Gie zj&bGl`+K=Rs~Fe*9v-hswSn_M(q2ZuN}b1d;Ud4Mg$2AXNc&w_@s3_|5bbo~c{S?e zel0^AA}i@xiS2@#VQm$%4B8W^MUY#xJ;LL!0!ag|RHb}qN_&k;B&=nSX_m(Mw;Kq0 zVjMi!fLJ#8%bHu{FQU8#iwt81*#SUJZ?l!G2~xStWVBI;8x)rUtI(U%q(>FUrD=Uc;y(S-r( z2M=GX0cjURD*#IqcvaD&KzLc9q`tv@Jl}e|3J;MWsMh)+ zN-3p1NLeDH{XIcR>jtL)$IRakOO9USFY~!2d}-i4Me6M?Faq_0M-|M>;FE8NlnLHW zfhXx-<=+M98|&c34i0jCL*4wvhxkGl&NFfZ0e^{N!O_M;ocr6*{DtSBpFB9q`c^@R z`XblUjYxv?=lS`#bkKXd09QENc@TEn)59~xz;eht#JL?rZqC(Xd7FZ$5YVb&K` zU<0pXTxvkvpFHv-?kA+`{llzhoj5p7L_|H^T;I^(i1qxr96x{NAlEOv-U^Vi44!ip zw^mvJgig_`56Qt`kv1Rkw z0`ytJs|xS2R<)%w1?enr(s=ThT3%wQTI0(c1+OJiZWr#)OUumrg+R_4 z^s9C8wvvp((625m@)tca!j=u;EgR4(RDncQJZB~Y+rO*`K#BtH%VOmaWD(wJ@e+7L zJkRJp9;a{o`8SA&XyVWW5fNQ~!!dr2OEuKT_doXNkNG(OF(V_4Xd}anP;0QnoO=-~ zNrv0s4`lA?X5?9gv%>O4M#7gaut`b0w({~qfKc@sBWyOq&nteQmtfh^0(szJ>yR1F z&U5{T4sieW5ApkZ@_9ze1+;%~jK_TxE29Py%gVYe$S(TPjE$Kof~K_RNNbvv|4rae zWA);!4uWE%3NM|8@OD6&D)fH%QZvTkkx9H!8bDMDDimq8r>936=VKss7kDC3yDq_` z6)N!tDxiM;;%hn4B9zgxctL@uy})1aMM#Uns|^k^(oBpGp*?QD9>UKN9Vh@{7U2h3 zS>@l1$*s<}z%KgIon`k?{j7UX{z=QGfo3KD5px@1MmLaz)%8`T>;o)t*Z&(B>T zBBJFLtX!J!AA`k6yu<|Y$A_VZt?)R!@FI_Q7Y1k_v@Vr3ZgBBD|1QI4p^EX+;6+87 zkkMgN^hS!HDeXb}==r;JNASCGdSF6A?hE4Cou8W1RhFIIRw@kAHtuncK41QKL{=(#LnX@s|hw7zSDwco-eF1FQ}lWEPzK2U^rPdw&9V^yZ=u3NgS=-Uy&%Ol(cu^G)C0eO)KZYjQyJ-<#Sq+R6 z!Qz$^KTo`;!V=#%u#clgMbG@bA3sAxL=(e<jW80MQ>`(=NM@8Ayn`f4QgZKCGtl3nKRF;r=hZUk*c-J-7Uk(hh<^uC{ednrZH zly;Kt`-OKU&bQjG@{1>7fyCP*n37?Ju# zIv1W(GCzxDNRV?0{ke!380nAb_bTv8szUE4u|@^(lHF)uLa@Ss`(Ho?lYa1M4e+*W ztKz?j=fn8q!P}jFj`emY|AKkS0MA(n#A`}&OlhmX`GT#7m6hk(Yp*40@;z9CtzA~C zYABgpWJO^_ine9upDMH;%itXg@OcnJ&DtuTzp%_wdISEjeaL*W0M-;!@3fvJ>7ILDn<8jRJ3>GE&VLXS zj)c4jN<=g=Ha5Foh11mJF)m-AAVIBeBd3_yGdc0thNpX@>5FMXG}(w?+Obz+mRg%Y<83z9^$g4Yv0 z<=Pq}_-8-+St26(%9lBQeR-LAE?Eh5T`XC4nmgmGAQrGd5S9CN>rb(bUSZ`J9uY4v zWYIHmYdH5y7^-Js(<@vZD79a6G%LWojffW(s zRISm*`Ks z`HSuA72XGWQ6Ra*P-&BH5A6W4bLd~*#Oh#$s43LTyy>TY_rDSm(dRz*$Nc>8a}{P< zc;+=oydw#Fn=y?@4k@?H}$%ziJpSAR|@+$yhD20$vmKAYML)_j3uh_%cjiJy6*0 zLvE(-o^B$oTN;I0dNb)ZDoH7&jnG@}xvS+0-4a1>z4>_Q(Z`=I)$1YeD=+#=@M;=! zTrylp@RHeY2Q5gh^AHfa2I;UOx!l1^^?`R8fYe!sf2hPXMYedGrxNK}yn1@U!*;>u zyL1WeRbs0Lgor*+5KY0)G7Fx&8;E@JB+HC{`h_p>eK}jtDke3tm=$2Nui&~MpO9P^ z-vFsk5Wfb0PVr&LgJ&Ovb|fo8yLfL&L;%`1xu#HW1qdpU&c;fzL)j|ycpBb9Rmn5zq-0)2v|t7C_XE9>*#bOK z)sFJ4Al}<#*Ap#*ctwGSYLsQaA3OI{&Uk|J@d~8Z0;K6aSa=?Jg!6QM@>9P{)D$Hu z7O4ty6ZLc>1G2L_NVm}k+p#zD{A+lQ!9lk4nAj~Rwo4GbCdh`T5w9(Yy^@tcNO;Ze zE<3AV=;&u9a-a-{tPX=kDpwqg{I+t}OHRZ3AB09`%!l z#!`tsr7fZBj~{J&F13ZALJQ@_RM-ekQq!&zB1LMcNj%i?A&X5rm$!5FRO_}yL3mQ} zeOUprRN#rde*j377asu8tD;#jq1l}9c3iH!BDQ$3p~FA3W=p4i{UU|(^YkDi$bb1` zmfD{_{T$y<5?{{cUwQM*L`3xPj~=%AYx0kZMae-ijub11 zO2|Jdt*?RiJ9C!3lfLskj#n3b!HQHd~Yn7oma>30s9j|seI2E0{o!Li|kE4_s1zb@pM z7mHE|M34+61!PH+eU}>W{#g?QLis!pRP=trD@mr2)e6U{FCcH|Dv(CpE z*OS>X4^lVk89+N(^sgc-750hh>&5$mR3G^eaIq@RYh<92j5B#4uB0!;rDXlk+QI zL{FEKngdi`vysMZTqoOtxVtFhQ1oy@SqWDMQ!M+G3v$Y%*NkVklw;c0$H;l@k)uRJ z^z<{&5)si;Pq7F67ryvqA|hIXw@}vbvf?)judcde6oCy}o=4in@3}e7%D1uxztg%z z%|h!Syd<<6kzLHzVl>Qt?2?ZF&(kfjMv?)BP!A*KCHR9%Mv`IZw|lTJRh0JtS`_Ra zB72w4!`GpLm8_u^z4FB7CMRtcL4|avr?#S=l&&1o>x6N1LYqcVBBC3QkC&c!=IksH zO~?0#7oN*L?;?qN-jt5*TW{0`_?vv)uC;leb*CTV2c@Dj)Fj=%|NZ}zh=_jp!ygh6 z(fmB;Uiz)y`b{Dty6!sGgATwSQ=&yzot#otlYv^s!^Vaj^oWMFluXfPr4YTa?bj;) znNr@YFS0K@9&d4lj|+J_-+@T+;>(bg-G(I=O%NO1F!^8656RdfyB{l-0%mWyar5X& zTbbSN_|dT$O07&+J#7Ww*-Tr4phCxw9+-Oa*>fj}bTJu6n-EcWRki*%qHMrSxFGc# z=GSeJk0e7f*%qrXu#q*=V{*B}$Sr@(HJnrEEG$efyufkiXU=hsrQ44)ulhVPJg-z) z$`wnGP~h-#@;fp-j9y4=mxJ^+keZ$P0>gvac~+y9L?RFPYIJf?$>_pqeMjX2Y>j7 zL`3xHqnsJ}h0`w*5z)iXpL2RGUQgJ2)XC{D(!KbLmdhN6Zan0Hq}tg5&}H$%*l8!H zmNPCow!$FeiR^W%Y-9~!S<=y#fm{w+4_S}4V{+1VWmrCXbi70=OeOoPghJZBckO;) zTS})-&lQzYCn+IIUX-QI<_XDzjLP9%J-}&5G8wz1oFwSliT5|>NwU_#mM;6eLrRz2 zQy+NnpA!+$Uw-48L`0N_Pk`Hh;XTFUT%JdE1-b7Xe~*ZWra$r#q9(5_1NkJ;oepG* zH&=q*B8l8_6YsFdr9!kCu+%x;V)9&~J!p`cI(~F~+gQ47%~3x&Ia*4iLa$uXq-VEt za?*D3pv^QnIXZLt^js+j*b_fuNo`~>dO>ANkwSrLF5S$-I?}qb&%0hm@in7i9}2?4 zHZ4-W#0W_&P6o)kyo4-n#-m*nhTLvHGIt0qVL$k~@wn&mhbJb`9+TN{ObZcg5t+Pj%Yt6DQ{b-B0Zo~<4EUD#W7?RGKeC%_+zFm zA|irQ6lG;M5P>{x@4~UTDEqj>TMHJan@*e{BBGa_xSoiJ`fy${h8W~ zIC*2^ClAT~RuZga#>H8pq~d1%r=n7$L9=+5J3>1)L4^*E4^PP?-RZVd+5{;oO-zjL z_$s*L6O=GXUwUb7Mvu4fC<*)uN@5z){9^PI!Oys!H(GH&$uv482UH{Zl#0L#%&9)FUEh$>ZynR0pR z^%X6`@&?-GB|{JQ7I{&*3TU_DW{a099ULFt6&7trc+eyoA0M6BjHh)gBwRwB+!z5y^Es&i%y~IbOc9 z#1!jZpUX#I7D)vYQ8*6@9F> z$3csfEm{qUTQ~Yk(KF*NljB~p5X$pnlyxvWIzF;z(j4tNf;Q90=;%y}q`N~(Q7H^* zYA;Pr+Diy3G%`9eLqszd=FZNLQqzG)nhuOUQ*7x#2E&W-uSm6G^N(4c@QoThtd|G1 zd0^uUB)OO1og}%}=NH)X{;_ACvdT>?ar}D~Jgh{cu9XEDC8rTGe2}fTRN6qQ^?W9N zUfaB8V6+~1K7*vqI$Us^9#IN@JrB# z&Mz{8=DXOR^z><#;$L?=M@jCJOvQlw-bvP%cFFE1+V&AJ$e(dAMVM5>Tg!^#AgZhQ z&8VrN(cKq(q2bUmxe~iW{7BJVeagV zNc%!DKhqXcc`FM|Q$a$7)_tO1lq_=tupo^LbEf1A7ug0c+43ZZ{DJ+vtMJ_191#&s z!i#C{0!#U;%gn*cm5}t)j~UL0uXe9h({0 zKc?2(LN6sDRU!(f`bQ5;^^aa&lanqt1a)Zuh`MxPZYIbmMpR>Aaiw+pS4hV!EB1Ax zA9R^l$JQ@7=q3KW8+k&nKXQbKh-$0Mt1dtvT0yR=)eD^S>DlL)cU?u+xZ!|p_hICw zgbq3Vb%VT&t-UeZKRUi=g`almvP4jq`bS1*dIyKqRiC$1QAz7?s&D_8x)LTQUG50# zQtuG!P?r|witKYr)2@XnCdE7d#gE0)+?I-kr|j-xKTg?oM7*#hpQywTtztJ2*}+Zr zg%|zo9Q;NvF0(e^aKQVx2a*Un=2?$p{w@@h=^7fF6?D= zEfIehvqVJQSJ9+wrmJd#x|BR&#b%$mD=93+r#}@0tpWi>&sj&#_?Mlyfry9}&ai)| z?9;Tkc!?BIsnFd^TI+}AFI*@Q5oP-ZugVGO(p5b{U22-J7OgHU6oVj|tV+>cPLZVe wDn>xL2fv!=A)>HEaC>{_FT5+Ai0jb*2U%4SE9Z7RApigX07*qoM6N<$g2b6+^#A|> literal 0 HcmV?d00001 diff --git a/src/store/groupEvolution/index.js b/src/store/groupEvolution/index.js index 6338036..b74034c 100644 --- a/src/store/groupEvolution/index.js +++ b/src/store/groupEvolution/index.js @@ -200,16 +200,20 @@ export const useGroupDiscoveryStore = defineStore("groupDiscovery", { if (res.code != 200) return let resultObj = {} const themeMap = { - 群体一: "#32b6fb", - 群体二: "#00d6da", - 群体三: "#fddc33" + 群体一: "#00d6da", + 群体二: "#fddc33", + 群体三: "#32b6fb" } resultObj["xAxisData"] = res.data.timeList.map((item) => TansTimestamp(item, "HH:mm:ss")) resultObj["yAxisRange"] = res.data.scale resultObj["seriesList"] = [] - Object.entries(res.data.data).forEach(([key, list]) => { - resultObj["seriesList"].push({ name: key, themeColor: themeMap[key], data: list }) + // 定义明确的群体顺序 + const groupOrder = ["群体一", "群体二", "群体三"] + groupOrder.forEach(key => { + if (res.data.data[key]) { + resultObj["seriesList"].push({ name: key, themeColor: themeMap[key], data: res.data.data[key] }) + } }) this.chartData = resultObj }, @@ -275,45 +279,52 @@ export const useGroupStructureStore = defineStore("groupStructure", { chartsData: {}, wordCloudData: [ { - text: "佩洛西", + text: "主权权益", top: 115.5, left: 215.5, - width: 109, - height: 40, - fontSize: 28, + width: 80, + height: 22, + fontSize: 13, opacity: 1 }, - { text: "中国", top: 183.5, left: 69.5, width: 73, height: 35, fontSize: 22, opacity: 1 }, { - text: "中国人民解放军", + text: "局座预言", + top: 80, + left: 69.5, + width: 73, + height: 22, + fontSize: 12, + opacity: 0.7 + }, + { + text: "吃瓜", top: 72.5, left: 132.5, - width: 123, + width: 50, height: 22, fontSize: 12, opacity: 1 }, { - text: "中美关系", - top: 171.5, + text: "中国海警", + top: 140, left: 212.5, - width: 81, - height: 22, - fontSize: 14, + width: 130, + height: 40, + fontSize: 22, opacity: 0.8 }, - { text: "台独", top: 135.5, left: 42.5, width: 57, height: 24, fontSize: 16, opacity: 1 }, { - text: "台海和平", - top: 228.5, - left: 230.5, + text: "菲律宾", + top: 150, + left: 50, width: 81, height: 22, fontSize: 14, opacity: 0.8 }, { - text: "坚决反对", + text: "手指", top: 200.5, left: 38.5, width: 73, @@ -322,29 +333,38 @@ export const useGroupStructureStore = defineStore("groupStructure", { opacity: 0.7 }, { - text: "联合公报", - top: 241.5, - left: 130.5, + text: "装甲船", + top: 50, + left: 160.5, width: 73, height: 19, fontSize: 12, opacity: 0.7 }, { - text: "有力反制", + text: "登检", top: 211.5, left: 143.5, - width: 73, + width: 50, height: 19, fontSize: 12, opacity: 1 }, - { text: "白宫", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, - { text: "内政", top: 87.5, left: 36.5, width: 53, height: 22, fontSize: 14, opacity: 1 }, - { text: "访台", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, - { text: "领土", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 }, - { text: "原则", top: 77.5, left: 264.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 }, - { text: "台湾", top: 195.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 } + { text: "执法", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, + { text: "现场画面", top: 110, left: 26, width: 90, height: 22, fontSize: 14, opacity: 1 }, + { text: "渔民", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, + { text: "包夹", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 }, + { text: "枪支", top: 77.5, left: 264.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 }, + { text: "解决", top: 195.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, + { + text: "大刀长矛", + top: 186, + left: 200.5, + width: 70, + height: 19, + fontSize: 12, + opacity: 0.8 + } ], posts: [ { @@ -584,7 +604,96 @@ export const useGroupMemberStore = defineStore("groupMember", { graph: {}, chartData: {}, chartsData: {}, - posts: [] + posts: [], + wordCloudData: [ + { + text: "主权权益", + top: 115.5, + left: 215.5, + width: 80, + height: 22, + fontSize: 13, + opacity: 1 + }, + { + text: "局座预言", + top: 80, + left: 69.5, + width: 73, + height: 22, + fontSize: 12, + opacity: 0.7 + }, + { + text: "吃瓜", + top: 72.5, + left: 132.5, + width: 50, + height: 22, + fontSize: 12, + opacity: 1 + }, + { + text: "中国海警", + top: 140, + left: 212.5, + width: 130, + height: 40, + fontSize: 22, + opacity: 0.8 + }, + { + text: "菲律宾", + top: 150, + left: 50, + width: 81, + height: 22, + fontSize: 14, + opacity: 0.8 + }, + { + text: "手指", + top: 200.5, + left: 38.5, + width: 73, + height: 19, + fontSize: 12, + opacity: 0.7 + }, + { + text: "装甲船", + top: 50, + left: 160.5, + width: 73, + height: 19, + fontSize: 12, + opacity: 0.7 + }, + { + text: "登检", + top: 211.5, + left: 143.5, + width: 50, + height: 19, + fontSize: 12, + opacity: 1 + }, + { text: "执法", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, + { text: "现场画面", top: 110, left: 26, width: 90, height: 22, fontSize: 14, opacity: 1 }, + { text: "渔民", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, + { text: "包夹", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 }, + { text: "枪支", top: 77.5, left: 264.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 }, + { text: "解决", top: 195.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, + { + text: "大刀长矛", + top: 186, + left: 200.5, + width: 70, + height: 19, + fontSize: 12, + opacity: 0.8 + } + ], }), actions: { // 获取时间轴 diff --git a/src/store/keyNodeRecognition/index.js b/src/store/keyNodeRecognition/index.js index dbc616e..e6ae4ab 100644 --- a/src/store/keyNodeRecognition/index.js +++ b/src/store/keyNodeRecognition/index.js @@ -57,6 +57,7 @@ import xinglangjunshi from "@/assets/anchorAvatar/xinlangjunshi.png" import huanqiushibao from "@/assets/anchorAvatar/huanqiushibao.png" import jiangxiayunfei from "@/assets/anchorAvatar/jiangxiayunfei.png" import tangning from "@/assets/anchorAvatar/tangning20150903.png" +import boss from "@/assets/anchorAvatar/boss.png" import lezhi from "@/assets/anchorAvatar/lezhi567.png" import daxiaaaa from "@/assets/anchorAvatar/daxiaaaaa.png" import jizhetuan from "@/assets/anchorAvatar/jiangxiayunfei.png" @@ -337,7 +338,7 @@ export const useKeyNodeRecognitionStore = defineStore("keyNodeRecognition", { anchorChartInfoList: [ { id: 1, name: "锚点数量", icon: anchorNumber, number: 20 }, { id: 2, name: "平均粉丝数量", icon: fancyNumber, number: "812.8w" }, - { id: 3, name: "平均发帖频率", icon: frequencyNumber, number: "20h/1次" }, + { id: 3, name: "平均发帖频率", icon: frequencyNumber, number: "20h/次" }, { id: 4, name: "平均参与互动次数", icon: interactionNumber, number: 157 } ], @@ -1082,14 +1083,14 @@ export const useKeyNodeRecognitionStore = defineStore("keyNodeRecognition", { commenter: " 外贸发布BBS", comment: "#菲自曝被中国海警缴枪的是顶级特种部队# 菲律宾特种部队就这?怪不得现在菲律宾网友各种找补洗白 ", - time: "盖世英雄玉椒龙" + time: "2024-06-23 15:20:55" }, { avatar: xinlangImg, commenter: " 新浪军事", comment: " #菲总统最新言论话里有话#【警惕!菲总统最新言论,话里有话】什么叫做一意孤行地碰瓷?菲律宾方...", - time: "2024-06-23 18:47:55 " + time: "2024-06-23 18:47:55" }, { avatar: xinlangImg, @@ -1608,7 +1609,7 @@ export const useKeyNodeRecognitionStore = defineStore("keyNodeRecognition", { ] }, 钻石狗Boss: { - avatar: tangning, + avatar: boss, earlistTime: "2024-03-16 17:10:41", postTotal: 0, postTransmitedTotal: 0, diff --git a/src/store/linkPrediction/index.js b/src/store/linkPrediction/index.js index 94cfac4..aef57a1 100644 --- a/src/store/linkPrediction/index.js +++ b/src/store/linkPrediction/index.js @@ -74,45 +74,45 @@ export const useCharacterInteractionStore = defineStore("characterInteraction", ], wordCloudData: [ { - text: "佩洛西", - top: 115.5, + text: "賴清德", + top: 100.5, left: 215.5, - width: 109, + width: 120, height: 40, fontSize: 28, opacity: 1 }, - { text: "中国", top: 183.5, left: 69.5, width: 73, height: 35, fontSize: 22, opacity: 1 }, + { text: "總統", top: 150.5, left: 69.5, width: 73, height: 35, fontSize: 22, opacity: 1 }, { - text: "中国人民解放军", + text: "民進", top: 72.5, left: 132.5, - width: 123, + width: 55, height: 22, fontSize: 12, opacity: 1 }, { - text: "中美关系", - top: 171.5, + text: "中华民國", + top: 150.5, left: 212.5, width: 81, height: 22, fontSize: 14, opacity: 0.8 }, - { text: "台独", top: 135.5, left: 42.5, width: 57, height: 24, fontSize: 16, opacity: 1 }, + { text: "台灣", top: 120.5, left: 30.5, width: 57, height: 24, fontSize: 16, opacity: 1 }, { - text: "台海和平", - top: 228.5, - left: 230.5, - width: 81, + text: "英文", + top: 200.5, + left: 250.5, + width: 55, height: 22, fontSize: 14, opacity: 0.8 }, { - text: "坚决反对", + text: "就職典禮", top: 200.5, left: 38.5, width: 73, @@ -121,29 +121,29 @@ export const useCharacterInteractionStore = defineStore("characterInteraction", opacity: 0.7 }, { - text: "联合公报", - top: 241.5, - left: 130.5, + text: "中國", + top: 220.5, + left: 120.5, width: 73, height: 19, fontSize: 12, opacity: 0.7 }, { - text: "有力反制", - top: 211.5, - left: 143.5, - width: 73, + text: "萧美琴", + top: 190.5, + left: 160.5, + width: 70, height: 19, fontSize: 12, opacity: 1 }, - { text: "白宫", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, - { text: "内政", top: 87.5, left: 36.5, width: 53, height: 22, fontSize: 14, opacity: 1 }, - { text: "访台", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, - { text: "领土", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 }, - { text: "原则", top: 77.5, left: 264.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 }, - { text: "台湾", top: 195.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 } + { text: "民主", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, + { text: "職演", top: 87.5, left: 36.5, width: 53, height: 22, fontSize: 14, opacity: 1 }, + { text: "人民", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, + { text: "立委", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 }, + { text: "國會", top: 60.5, left: 265.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 }, + { text: "两岸", top: 170.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 } ], statisticsList: [ @@ -345,45 +345,45 @@ export const useSocialGroupsStore = defineStore("socialGroups", { ], wordCloudData: [ { - text: "佩洛西", - top: 115.5, + text: "賴清德", + top: 100.5, left: 215.5, - width: 109, + width: 120, height: 40, fontSize: 28, opacity: 1 }, - { text: "中国", top: 183.5, left: 69.5, width: 73, height: 35, fontSize: 22, opacity: 1 }, + { text: "總統", top: 150.5, left: 69.5, width: 73, height: 35, fontSize: 22, opacity: 1 }, { - text: "中国人民解放军", + text: "民進", top: 72.5, left: 132.5, - width: 123, + width: 55, height: 22, fontSize: 12, opacity: 1 }, { - text: "中美关系", - top: 171.5, + text: "中华民國", + top: 150.5, left: 212.5, width: 81, height: 22, fontSize: 14, opacity: 0.8 }, - { text: "台独", top: 135.5, left: 42.5, width: 57, height: 24, fontSize: 16, opacity: 1 }, + { text: "台灣", top: 120.5, left: 30.5, width: 57, height: 24, fontSize: 16, opacity: 1 }, { - text: "台海和平", - top: 228.5, - left: 230.5, - width: 81, + text: "英文", + top: 200.5, + left: 250.5, + width: 55, height: 22, fontSize: 14, opacity: 0.8 }, { - text: "坚决反对", + text: "就職典禮", top: 200.5, left: 38.5, width: 73, @@ -392,30 +392,30 @@ export const useSocialGroupsStore = defineStore("socialGroups", { opacity: 0.7 }, { - text: "联合公报", - top: 241.5, - left: 130.5, + text: "中國", + top: 220.5, + left: 120.5, width: 73, height: 19, fontSize: 12, opacity: 0.7 }, { - text: "有力反制", - top: 211.5, - left: 143.5, - width: 73, + text: "萧美琴", + top: 190.5, + left: 160.5, + width: 70, height: 19, fontSize: 12, opacity: 1 }, - { text: "白宫", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, - { text: "内政", top: 87.5, left: 36.5, width: 53, height: 22, fontSize: 14, opacity: 1 }, - { text: "访台", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, - { text: "领土", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 }, - { text: "原则", top: 77.5, left: 264.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 }, - { text: "台湾", top: 195.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 } - ] + { text: "民主", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, + { text: "職演", top: 87.5, left: 36.5, width: 53, height: 22, fontSize: 14, opacity: 1 }, + { text: "人民", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, + { text: "立委", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 }, + { text: "國會", top: 60.5, left: 265.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 }, + { text: "两岸", top: 170.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 } + ], }), actions: { // 互动行为相似列表数据 @@ -557,45 +557,45 @@ export const useCharacterHiddenStore = defineStore("characterHidden", { ], wordCloudData: [ { - text: "佩洛西", - top: 115.5, + text: "賴清德", + top: 100.5, left: 215.5, - width: 109, + width: 120, height: 40, fontSize: 28, opacity: 1 }, - { text: "中国", top: 183.5, left: 69.5, width: 73, height: 35, fontSize: 22, opacity: 1 }, + { text: "總統", top: 150.5, left: 69.5, width: 73, height: 35, fontSize: 22, opacity: 1 }, { - text: "中国人民解放军", + text: "民進", top: 72.5, left: 132.5, - width: 123, + width: 55, height: 22, fontSize: 12, opacity: 1 }, { - text: "中美关系", - top: 171.5, + text: "中华民國", + top: 150.5, left: 212.5, width: 81, height: 22, fontSize: 14, opacity: 0.8 }, - { text: "台独", top: 135.5, left: 42.5, width: 57, height: 24, fontSize: 16, opacity: 1 }, + { text: "台灣", top: 120.5, left: 30.5, width: 57, height: 24, fontSize: 16, opacity: 1 }, { - text: "台海和平", - top: 228.5, - left: 230.5, - width: 81, + text: "英文", + top: 200.5, + left: 250.5, + width: 55, height: 22, fontSize: 14, opacity: 0.8 }, { - text: "坚决反对", + text: "就職典禮", top: 200.5, left: 38.5, width: 73, @@ -604,29 +604,29 @@ export const useCharacterHiddenStore = defineStore("characterHidden", { opacity: 0.7 }, { - text: "联合公报", - top: 241.5, - left: 130.5, + text: "中國", + top: 220.5, + left: 120.5, width: 73, height: 19, fontSize: 12, opacity: 0.7 }, { - text: "有力反制", - top: 211.5, - left: 143.5, - width: 73, + text: "萧美琴", + top: 190.5, + left: 160.5, + width: 70, height: 19, fontSize: 12, opacity: 1 }, - { text: "白宫", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, - { text: "内政", top: 87.5, left: 36.5, width: 53, height: 22, fontSize: 14, opacity: 1 }, - { text: "访台", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, - { text: "领土", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 }, - { text: "原则", top: 77.5, left: 264.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 }, - { text: "台湾", top: 195.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 } + { text: "民主", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, + { text: "職演", top: 87.5, left: 36.5, width: 53, height: 22, fontSize: 14, opacity: 1 }, + { text: "人民", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }, + { text: "立委", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 }, + { text: "國會", top: 60.5, left: 265.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 }, + { text: "两岸", top: 170.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 } ], statisticsDetailList: [ { id: 1, icon: nodePrefix, name: "节点数", key: "nodesCount" }, diff --git a/src/views/GroupEvolution/components/groupChart.vue b/src/views/GroupEvolution/components/groupChart.vue index 30f9d49..66de29f 100644 --- a/src/views/GroupEvolution/components/groupChart.vue +++ b/src/views/GroupEvolution/components/groupChart.vue @@ -135,9 +135,9 @@ const initChart = () => { extraCssText: "box-shadow:none;padding:0;", formatter: function (params) { let color = { - 群体一: "#33b6fb", - 群体二: "#00d6da", - 群体三: "#fddc33" + 群体一: "#00d6da", + 群体二: "#fddc33", + 群体三: "#32b6fb" } if (props.moduleName == "群体成员演化分析") { color = { diff --git a/src/views/GroupEvolution/components/groupShow.vue b/src/views/GroupEvolution/components/groupShow.vue index c0504ef..073a06e 100644 --- a/src/views/GroupEvolution/components/groupShow.vue +++ b/src/views/GroupEvolution/components/groupShow.vue @@ -19,9 +19,9 @@ import { onMounted } from "vue" import * as echarts from "echarts" const chartTitleList = [ - { id: 1, name: "头部自媒体 增量速率" }, - { id: 2, name: "官方媒体 增量速率" }, - { id: 3, name: "普通自媒体 增量速率" } + { id: 1, name: "群体一 增量速率" }, + { id: 2, name: "群体二 增量速率" }, + { id: 3, name: "群体三 增量速率" } ] let chartInstance1 = null let chartInstance2 = null @@ -39,9 +39,9 @@ const props = defineProps({ const optionHandle = ({ xAxis, yAxis, data }, flag) => { const lineColors = { - "头部自媒体 增量速率": "#2AB8FD", - "官方媒体 增量速率": "#01D7DA", - "普通自媒体 增量速率": "#FFDA09" + "群体一 增量速率": "#01D7DA", + "群体二 增量速率": "#FFDA09", + "群体三 增量速率": "#2AB8FD" } return { tooltip: { @@ -116,9 +116,9 @@ const initCharts = () => { chartInstance1 = echarts.init(document.getElementById("container1")) chartInstance2 = echarts.init(document.getElementById("container2")) chartInstance3 = echarts.init(document.getElementById("container3")) - chartInstance1.setOption(optionHandle(props.chartsData.topSelfMedia, "头部自媒体 增量速率")) - chartInstance2.setOption(optionHandle(props.chartsData.officialMedia, "官方媒体 增量速率")) - chartInstance3.setOption(optionHandle(props.chartsData.ordinaryMedia, "普通自媒体 增量速率")) + chartInstance1.setOption(optionHandle(props.chartsData.topSelfMedia, "群体一 增量速率")) + chartInstance2.setOption(optionHandle(props.chartsData.officialMedia, "群体二 增量速率")) + chartInstance3.setOption(optionHandle(props.chartsData.ordinaryMedia, "群体三 增量速率")) } onMounted(() => { diff --git a/src/views/KeyNodeDiscern/anchorRecommendation/components/attentionTopic.vue b/src/views/KeyNodeDiscern/anchorRecommendation/components/attentionTopic.vue index 2c02453..d2675e5 100644 --- a/src/views/KeyNodeDiscern/anchorRecommendation/components/attentionTopic.vue +++ b/src/views/KeyNodeDiscern/anchorRecommendation/components/attentionTopic.vue @@ -76,16 +76,18 @@ const initTopicChart = () => { bottom: "1%", containLabel: true }, - toolbox: { - feature: { - saveAsImage: {} - } - }, + // toolbox: { + // feature: { + // saveAsImage: {} + // } + // }, xAxis: { type: "category", boundaryGap: true, //坐标轴两边留白 data: ["6.25", "6.26", "6.27", "6.28", "6.29", "6.30", "7.1", "7.2"], name: "日期", + nameLocation: "end", + nameGap: 10, nameTextStyle: { color: "#606266", fontSize: 12 diff --git a/src/views/KeyNodeDiscern/anchorRecommendation/components/detailNode.vue b/src/views/KeyNodeDiscern/anchorRecommendation/components/detailNode.vue index d3e3b29..50c9782 100644 --- a/src/views/KeyNodeDiscern/anchorRecommendation/components/detailNode.vue +++ b/src/views/KeyNodeDiscern/anchorRecommendation/components/detailNode.vue @@ -23,6 +23,17 @@ const emit = defineEmits(["click:openDialog", "click:goback"]) const detailContainer = ref(null) const currentSelectedCommunity = ref({}) let chart = null +// 政府官号 +const officeList = ["峨眉公安","平安马边","东坡公安","淮安清江浦法院","抚州消防","游仙公安", + "甘泉检察","平安会东","淮安市公安局淮阴分局","南铁福州车务段","太白检察", + "任丘司法行政","万源警事","澄城检察","国台办发布","海洋装备与公务船资讯", + "团陵水县委","滕州司法行政在线","陇南徽县总工会","南部战区","中国海警","奉贤反邪"] +// 新闻媒体列表 +const newList = ["大象观点","大象新闻","湖北日报","热点锐评","合肥晚报","北京广播电视台","环球收视", + "沧州微播报","中华文化传媒","玉渊谭天","人民网","空警世界","海峡之声","中国军号", + "新浪军事","解放军报","人民日报","中国妇女报","央视新闻","成都新事儿","中国警方在线", + "环视频","四川观察","齐鲁晚报","生命时报","中国新闻网","南海之声","每日信报","环球网", + "大国外交最前线","环球时报"] // 根据节点数量计算缩放比例 const calculateInitialZoom = (nodes) => { @@ -38,6 +49,17 @@ const initChart = async () => { currentSelectedCommunity.value = props.communityNode chart = echarts.init(document.getElementById("container")) + + // + const nodeLabel = (node) => { + if (officeList.includes(node.nodeName)) { + return "政府官号" + } + if (newList.includes(node.nodeName)) { + return "新闻媒体" + } + return "普通自媒体" + } //处理节点 //从锚点邻居数据集中查找出该锚点所有的邻居节点 let nodes = [] @@ -56,36 +78,37 @@ const initChart = async () => { .map((filteredList) => ({ ...extraInfo[filteredList[0]], anchor: filteredList[0], - neighbors: filteredList[1].map((neighNode) => ({ name: neighNode, avatar: "" })) + neighbors: filteredList[1].map((neighNode) => ({ id: neighNode ,nodeName: neighNode, avatar: "" })) + })) //处理连线 let links = [] filterResult.forEach(({ anchor, neighbors }) => { ;(neighbors ?? []).forEach((neigh) => { - links.push({ source: anchor, target: neigh.name }) + links.push({ source: anchor, target: neigh.id }) }) }) + // 合并所有锚点和邻居节点到一个数组并去重 let nodeSet = new Set() filterResult.forEach((item) => { //添加锚点自己 if (!nodeSet.has(item.anchor)) { - nodes.push({ name: item?.anchor, value: item?.anchor, category: 1, ...item }) + nodes.push({ id: item?.anchor, nodeName: item?.anchor, value: item?.anchor, category: 1, ...item }) nodeSet.add(item?.anchor) } //添加该锚点的邻居 ;(item.neighbors || []).forEach((n) => { - if (!nodeSet.has(n?.name)) { - nodes.push({ name: n.name, value: n.name, category: 0, avatar: n.avatar ?? "" }) - nodeSet.add(n.name) + if (!nodeSet.has(n?.nodeName)) { + nodes.push({ id: n.id, nodeName: n.nodeName, value: n.nodeName, category: 0, avatar: n.avatar ?? "", label: nodeLabel(n) }) + nodeSet.add(n.nodeName) } }) }) const data = { nodes, links } - console.log(data) const categories = [ { name: "邻居账号", category: 0 }, @@ -160,7 +183,7 @@ const initChart = async () => { >
-
${params.data.name}
+
${params.data.nodeName}
-
${params.data.name}
+
${params.data.nodeName}
- 普通自媒体 + ${params.data.label}
diff --git a/src/views/KeyNodeDiscern/anchorRecommendation/components/monitoring.vue b/src/views/KeyNodeDiscern/anchorRecommendation/components/monitoring.vue index 5747100..346064e 100644 --- a/src/views/KeyNodeDiscern/anchorRecommendation/components/monitoring.vue +++ b/src/views/KeyNodeDiscern/anchorRecommendation/components/monitoring.vue @@ -35,6 +35,13 @@ const props = defineProps({ } }) +const sortAnchorMonitorListByTime = (anchorMonitorList) => { + return anchorMonitorList.sort((a, b) => { + // 将时间字符串转换为时间戳进行比较 + return new Date(a.time.trim()) - new Date(b.time.trim()); + }) +} +props.anchorMonitorList = sortAnchorMonitorListByTime(props.anchorMonitorList) const startAutoScroll = () => { if (!monitorListRef.value) return scrollTimer = setInterval(() => { diff --git a/src/views/KeyNodeDiscern/anchorRecommendation/components/userChart.vue b/src/views/KeyNodeDiscern/anchorRecommendation/components/userChart.vue index 9cc32fa..a71cf4a 100644 --- a/src/views/KeyNodeDiscern/anchorRecommendation/components/userChart.vue +++ b/src/views/KeyNodeDiscern/anchorRecommendation/components/userChart.vue @@ -93,8 +93,21 @@ const updateChart = () => { ], tooltip: { trigger: "item", - formatter: "{a}
{b}: {c}% ({d}%)" + formatter: "{a}
{b}: {c}%" }, + // tooltip: { + // trigger: "item", + // formatter: function(params) { + // console.log(params) + // // // 计算总值 + // const total = chartData.reduce((sum, item) => sum + item.value, 0) + // // // 计算百分比 + // const item = chartData.find((item) => item.name === params.name) + // const percentage = total > 0 ? ((item.value / total) * 100).toFixed(1) + "%" : "0%" + // return `行为模式发布
+ // ${params.data.name}: ${percentage}(${params.data.value}次)` + // } + // }, legend: { orient: "vertical", // 垂直排列 top: "center", // 垂直居中 diff --git a/src/views/KeyNodeDiscern/anchorRecommendation/index.vue b/src/views/KeyNodeDiscern/anchorRecommendation/index.vue index 01c0d3a..7b8453b 100644 --- a/src/views/KeyNodeDiscern/anchorRecommendation/index.vue +++ b/src/views/KeyNodeDiscern/anchorRecommendation/index.vue @@ -354,7 +354,7 @@ const renderHotChart = () => { itemStyle: { color: "#4AC6FF", borderColor: "#fff", borderWidth: 2 }, lineStyle: { color: "#4AC6FF", width: 2 }, areaStyle: { color: "rgba(74,198,255,0.15)" }, - label: { show: true, position: "top", color: "#4AC6FF", fontSize: 12 }, + label: { show: true, position: "bottom", color: "#4AC6FF", fontSize: 12 }, padding: [0, 0, 0, 30] }, { diff --git a/src/views/KeyNodeDiscern/bridgeCommunication/components/GraphPanel.vue b/src/views/KeyNodeDiscern/bridgeCommunication/components/GraphPanel.vue index a319a77..8b9cf9e 100644 --- a/src/views/KeyNodeDiscern/bridgeCommunication/components/GraphPanel.vue +++ b/src/views/KeyNodeDiscern/bridgeCommunication/components/GraphPanel.vue @@ -42,7 +42,8 @@
- + +
{ defineExpose({ highlightNode }); -