From a489001d66084d7fd6aea4145c723592a42bcf01 Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Tue, 1 Jul 2025 16:52:57 +0800 Subject: [PATCH 1/6] feat(model): manage --- frontend/src/assets/LOGO-fold.svg | 30 ++ frontend/src/assets/LOGO.svg | 42 ++ frontend/src/assets/img/no-search_result.png | Bin 0 -> 2160 bytes .../model/icon_Azure_OpenAI_colorful.png | Bin 0 -> 7823 bytes .../src/assets/model/icon_alybl_colorful.png | Bin 0 -> 2431 bytes .../src/assets/model/icon_bdyzn_colorful.png | Bin 0 -> 2073 bytes .../assets/model/icon_deepseek_colorful.png | Bin 0 -> 2630 bytes .../src/assets/model/icon_gemini_colorful.png | Bin 0 -> 4123 bytes .../src/assets/model/icon_ollama_gray.png | Bin 0 -> 3285 bytes .../src/assets/model/icon_openai_colorful.png | Bin 0 -> 2021 bytes .../src/assets/model/icon_txy_colorful.png | Bin 0 -> 2170 bytes .../src/assets/model/icon_tyqw_colorful.png | Bin 0 -> 2206 bytes .../src/assets/model/icon_wxyy_colorful.png | Bin 0 -> 2018 bytes .../src/assets/model/icon_xfhx_colorful.png | Bin 0 -> 2790 bytes .../src/assets/svg/icon-member-default.svg | 15 + .../src/assets/svg/icon_admin_outlined.svg | 4 + .../assets/svg/icon_azure_openAI_colorful.svg | 1 + .../src/assets/svg/icon_dataset_filled.svg | 3 + .../src/assets/svg/icon_done_outlined.svg | 3 + .../svg/icon_moments-categories_outlined.svg | 4 + .../assets/svg/icon_side-expand_outlined.svg | 4 + .../assets/svg/icon_side-fold_outlined.svg | 4 + frontend/src/components/layout/LayoutDsl.vue | 159 +++++++ frontend/src/components/layout/Menu.vue | 40 ++ frontend/src/components/layout/MenuItem.vue | 48 ++ frontend/src/router/index.ts | 31 +- frontend/src/style.less | 10 +- frontend/src/views/system/model/Card.vue | 161 +++++++ frontend/src/views/system/model/Model.vue | 425 ++++++++++++++++++ frontend/src/views/system/model/ModelForm.vue | 360 +++++++++++++++ frontend/src/views/system/model/ModelList.vue | 112 +++++ .../src/views/system/model/ModelListSide.vue | 113 +++++ .../src/views/system/model/ParamsForm.vue | 93 ++++ frontend/tsconfig.app.json | 2 + frontend/vite.config.ts | 10 + 35 files changed, 1663 insertions(+), 11 deletions(-) create mode 100644 frontend/src/assets/LOGO-fold.svg create mode 100644 frontend/src/assets/LOGO.svg create mode 100644 frontend/src/assets/img/no-search_result.png create mode 100644 frontend/src/assets/model/icon_Azure_OpenAI_colorful.png create mode 100644 frontend/src/assets/model/icon_alybl_colorful.png create mode 100644 frontend/src/assets/model/icon_bdyzn_colorful.png create mode 100644 frontend/src/assets/model/icon_deepseek_colorful.png create mode 100644 frontend/src/assets/model/icon_gemini_colorful.png create mode 100644 frontend/src/assets/model/icon_ollama_gray.png create mode 100644 frontend/src/assets/model/icon_openai_colorful.png create mode 100644 frontend/src/assets/model/icon_txy_colorful.png create mode 100644 frontend/src/assets/model/icon_tyqw_colorful.png create mode 100644 frontend/src/assets/model/icon_wxyy_colorful.png create mode 100644 frontend/src/assets/model/icon_xfhx_colorful.png create mode 100644 frontend/src/assets/svg/icon-member-default.svg create mode 100644 frontend/src/assets/svg/icon_admin_outlined.svg create mode 100644 frontend/src/assets/svg/icon_azure_openAI_colorful.svg create mode 100644 frontend/src/assets/svg/icon_dataset_filled.svg create mode 100644 frontend/src/assets/svg/icon_done_outlined.svg create mode 100644 frontend/src/assets/svg/icon_moments-categories_outlined.svg create mode 100644 frontend/src/assets/svg/icon_side-expand_outlined.svg create mode 100644 frontend/src/assets/svg/icon_side-fold_outlined.svg create mode 100644 frontend/src/components/layout/LayoutDsl.vue create mode 100644 frontend/src/components/layout/Menu.vue create mode 100644 frontend/src/components/layout/MenuItem.vue create mode 100644 frontend/src/views/system/model/Card.vue create mode 100644 frontend/src/views/system/model/Model.vue create mode 100644 frontend/src/views/system/model/ModelForm.vue create mode 100644 frontend/src/views/system/model/ModelList.vue create mode 100644 frontend/src/views/system/model/ModelListSide.vue create mode 100644 frontend/src/views/system/model/ParamsForm.vue diff --git a/frontend/src/assets/LOGO-fold.svg b/frontend/src/assets/LOGO-fold.svg new file mode 100644 index 00000000..6a58bc90 --- /dev/null +++ b/frontend/src/assets/LOGO-fold.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/assets/LOGO.svg b/frontend/src/assets/LOGO.svg new file mode 100644 index 00000000..06ac01fe --- /dev/null +++ b/frontend/src/assets/LOGO.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/assets/img/no-search_result.png b/frontend/src/assets/img/no-search_result.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb97e874fce9a197318ea8936970932acd491ab GIT binary patch literal 2160 zcmV-$2#@!PP) z6Gs%r&#rHA9A9z|ArR7*icqPgqOBAmAyTBO6|LI70XzavKzIWlA$b!XfqyEb7B!(w zP2x-J*hy^1-kr|3!EF$`v%B`r?mFyGGK6?c>~GJUIcLt9jY8*m`N!Y)7-LUJVYi4; zfg;2xR41mqU_@J=eR_5C|8KvA3;KjHeS;zfLQ&L>)$3QD8eij&NKlW^>G91Q%g>aT z+uPSzSKX!vFQ}&z`ijc5*e#0iio!`Z_6rx4MWT8MW7kxQ@SI3g3B>INOi$)1GoGd( z=xG|2t2OF&dyZcdi^XVedXf?e+mGfNUDv63bV7&CBjGq(OHCz{6clkTP%@El^_m%O z1Tq8#s;W{xH(|Ul;W)Zr#B4sWA4EP?0=A-R+^+@6X}3$GhOP72uN+W>JEG|?fk;#d zM50Q-)~6!oa~msqg|0Jdwc9jmILN39TvR#1v=hqJ`p5}uJN;Efp&(J!V1ND~L_Spl zp%)c?b=0tRmbFHc#>Y|=6y1xMQMFoa;}PMU$frsm5>*0`s1lHxQH^RwG%V6Hs=ZQ$ z?}<9EFZL?qUkSzNK^?#qDmkVRRR}I z)NW7y{;OuQaem=MJ!~9NuP3Kf39Xd1!v-;?3&(k0CPlm9csfNH{zxR_l!(VE7CXCk znx-3Xtld847NyZ~tK)ebi+zUTewl*A6Hy^#b|OuMT!sreW;w3EFLQnj8hTH799%wV zxN7bVGee6yJDsPgLe>y=5U{nFPfQriw3xaVLEM2wg|#g%Oc~SLDApeoCsKec%?BFV9Kq-9S60Bv3iRv63-!o!lP8F@e7qPA_$SVu+*hXGqnBJ9*qLF(;pwm zPEc47KJb2}?s|$JHje4lc9CC@rf?jr+sTCu1Gb{hPUVC#Xq#t5e{wqe7#$8ZJk!s>P=f=u~>#3p{TRdIm_oT<#*pyJQK7JgcZ30 zTq8~1vA5pF!#Ng`czSXje`w-S}S7-GHX0k_%~(MqC~XX9osRc>WMO_D$nmvd~5?+ zPRyD5cL*AEEy@bllPHK4choSoR8f{RUC2@A)W5S$af{t6%qHB4$ZxQnY1eXZ`i@1` zI5w8D{Gc+hY>nrBHi%n0Au?+1iA6P?{_T#nCHfi4hz|R*5PKn0QG0^YN53(`57dx^ zc5X3M2-Dwce-znRA;?~W5>T3#|2wO=|$eag$-|CzVFSyt5f>=@=kR_hIF9Lbqs zoE=qRo5B?bmfAeFo@Ur1_{hU%2MB6cF&)NAaf>_2g0BCtzP4k#jKA5d3N5kUo+B!~ z*a07kf}X9Q)!|Aw5+jEH1jRq>Z=lEpEplN+7{V^i8N#@+T8Ih%d3|Nkw)+KLFXe+! zb^^X5C~%|zTmV`dA%KW}E2QBzcu0oK4Ds%HOFt_prf4jgpaQQoIq7SKbrwsZypiL3 zf&#~8)%Rs~!UDL0VcfxaAZSSYs7wU~u2vW~!g>K*PZ$N|kxxA}p7?eBn=g0Fo_C#Z zLRh;l60bnmmP!V5pFsh2jdj<#pf9Wj43xy9i{#Z#QP}X{6^jeg1D_|5K%EqA{lWU3 z7otG}zgtX6bn6xOt5U^0+&=_~3kE(qKJW`-U>jg0?H2)gNXyp*~~Utl-DonSk0!D45u?*?{@74j9v z9zD3fw&~_2p=wFM0w}r|eK+72v3TsUTR}nS`aFvJ2f``tS2V!g*VFIse*KIFAatVk z-GCK-L<2fwPw(Hky+H#K%8sNU-2epr>HgXV4MAwzyn=88UI+?8E2`gaz$-yPsP9bS zmmBa>P@pO*&u2r7Y&YPwpg>hfca(Ysg-kafLr|cuUSE06cM6_Uh;iZu+@7uCCGag7 zf&ydSD4O<&|FuIQ#>x#Cm4V%os~g-fVq4$c{puk}!Vq{e{u8U mfl|*44P)#Ye}wXa_xTs?rK8W%ZX0X>0000@~0drDELIAGL9O(c600d`2O+f$vv5yPB)752Pc=5%$P>S(kW8Sw$`n04^prKu`dV1NThGd`cZjZE3x$w6x4fjxEdC9IfBFc5CKm zuUwkD@b*QxaiapC5^c2r+>zGPlhO10AJ)1K{Jx}Tp9IsSj!~7<{oPXA!v{%zbO z#gY#4Z#@Ik>lQvrm<)+SK$0z@C?;Mblt`Kc&H}aR&FkO(`d?rB+MjRngG5BR_Rk0N|f|3ko*@5!qX~>UFLSeEOY`jHnSU)-L3z<0BWI~4H#6m=J zC`cOFp%!3dAoHiUC0YIG%HKct3BZLqY%y)M0Fb^arMhlCBxO5JfMWqQYZN&`2#!f> zVGd?qy#iXR4*Jf|1K2JEF@~**CUZvkVM$2S%xlZ*7vJB1~l)+mcsH@382v_n#ztzh2Ez@(K3`;9^;wL#Y0AB zD;m_NXQ6WW3Q)rUqRPoNa>ml|;a?AxNjUeX1`6J;^V9KE->zK{uVK?khAk#-;Gr)l zJNAE>I;Kt>1_Zur5TDs05pe2tP|_(#5A=iDRshE^{UQNT8s`*k_BjGa!aYJ%gh9)s zM7ds{zx!c*>S7hPkhT_rCMGl`zXP>vJ;gp!!dVXB9n_lz=E4%xZcT$@;tY^UFxngN zLc{Qqa3sQ!_>4zRtpZA}kZL<}d?LShq93-Hwom}O^(^cgm$KbsVA~!;C2;ZI(*Y75 z3aSRv24i*s>bLHKRjRr7p& zMVarx5rknT21R0dD!@@xFlgrD`-s}w+B@*fGp(?Nx^XK6z`L7i9os>&g@dlC6Cq?e z*9D$MBxxzI4I4_Au0jokAgK(V2#8=F!}MifrlEkFz!OC;&8ZoX8GCS4Km6;Dz|c?@ zwurU{f`*1t@{WV|6FJpQEyQ#|@$!QbKJr}{!Wp2b-1*{q;O-1qICd8P+Hn8m|krGZAi9w1!tN}2}7%mP%dT;mu` z6e)x&i3-*KD_~DUQA2{V7M^wLILk7*LT>WmN4q9Zbi)?VWR%rs>gT_eyFdI5r&vKYRs3Qih96Ys<_J9r$nYg z@_qhUG<|4L+`oivMCi+Fo#_+$j;(RZHdg@M=^V-KI8IW9G0FnKyc@pFFF~wd0{rlE z(J4bcP`~9mWn5WDEE#{a3zs6o5EOs|$<`6p>sXF#&Rbnt8x9%_or`xjgEmV5oU`eC zrzYikCrB#S$3o9;H+%>J;qXsDaLU{=lHin?+$kerOb2KJGr>p~t)s*+b;u-jxPatb zOK-JNA| z8=lol#&rrIlc*UyCBc;cI7VolY8`T850B*U|CJ-?!(?C+Y4aecb0jZ!jy!;tPbYJ} z+Z(a|p4iz;9clr=w?S8UcH z-QO`YKvbJ6{>H^G=-N?Jcu@jBWO5fZPYOLD+9fo>XdD?02+<7+xkaIy7g&< zpL|0B#&BPPz$b|40Eq;l2}wntK*zAe94772C#VZfSp;<;>3l^95-RfA>KLd9BxSEw z+_f*^sSTrz7C~DuXzuwSemp%O^CZ{8>S~SrJ%5Ob`;z0Aqdus#7<>!nh5{ zQgeTRpHsm?ii~!#EDh@m|1lQ&AgN3tH~!!g?FWu+noqD95G29KV|h?BJva|YDCQqw zc-SHH$_e*;FPVBifmNzPeRdW@26dqOhL%vOaOmlAb!`7H zkpPOtj9wT&Bo_xqsb$6|t`KerghC?s-M@qc))05f90JB-1%q?bV52@DA=en1!;uIv z0HHQDgD=W6Wolk)&pegs-8U@u05*^|VFq;NljFK^-HGzmYv>o;K|LTh0(+s+4gkwqNDxA(NO|uDgF(xbj0LMzE_9B~DkOzK4mDZUe^*UJ+q5Z46p}RwP+SfslM55LxEQ6RTXsFf}@5ON(3}?o5CX zBWV)|3XgiBe5j09&U4CA{oSL5{YRf@&kb+5Q?{W3$fkSy)t&>BprupPHpA72tf8Krl=p9Kp{wK3YlN#5mI;gq7)wdp;1pE92bHnaiOFeE(F?Dnxl?2F7NErg~n|N zZG-?Cjd2P+qf)y41R+YnRb&9Mm`}*zf+jFU!om`xqeOAN;-!j%c>;&q>&z>T;yWYJ zNf7hLN&2E0Jh4Yj%2K3zwC?`lgi`lJ8zF#3V~Ca=b?T*lOuQ(e&_iszB#iRttnexh zoH9=rNGv|2fmNw~V$RL{oSIg-kt0a5@d4tqqj3Xb43AC*eyv^uNzZ08qmLYIz3Pzln9fA!kz-Uk&GoOc#|cg+yyeD7M@^$F@=TXgRG| zcs$d)XGAD*&$?iPX233Vz9x=I`JJO|jZGi{m%{KYa($IBf2I{VVs z&(x+a{LrqL=Luid7<*X^X2emS=syT%QDY+D`yI=W%z3k*v~-NZv(L)GL-$7aDge$U zJ>P=Pm%ShJzQtg)i$%Ocm=*5I=+(ef@YjPM0~GxVD9Rmnt@Mi@eptD9<~qS>sT+8T zFcA__1)|nbY{EnZ!)KVyoU*=_o0VO7LxT;Vdli7&%tGrRCbRcZHu`-cf^sEcMh0bI z6)@$WGZU1_*(lqymtK?WbC=lVYv)eBSG#uc9P^Svl0u_8aYpcKG~5G0STXqWtS5K* zVinRO4~(@x@cGAJU|>U*FWx%@?YO@P9ixwel5W8mF2s~-<2=c}UkywN4w-^xxK&%S zZ=L#IBfWTmKlsi&ra5=>JW-_@3W-vu$!Hgu3XrTGXhLIr@}07tp5e^IV~@AxH^wQu zX8~l|di#~W`^G`bq}Z~KcuYqW2!Ulo)62pXxFg)LE2O$`1}t1Yq^y&iFd7*Y)NLoNJ88+X#-!fjhUALZD}ccH%IzG3Ovh8`9TkG_lnNs} zhU;Q2tAr_VnLtuF>lNh;EZw~-7O8#w?%AcYXJ54|<&vbNAjy)6F+7RO03rEB>tGih zgM~hnU0PfJIBWo|R{%ltGOfcUZ9-OY;koo=H@yv6e>~>W}hZw2K%0f`qT4meQF_ZtTd>!hJ{g!9CKw zK#&Z>$2uXU_l4LkI8y6Snxc13odtU#{6)IwpSP{qyBBP;zQ|xI z#5Ya}lAw@mk|x2CaM`J$SBy?s{^0S+%)sP5J7wz^K>JWO)ir)Z>KqxPwgG+;BN*W# zv%$l4v4SJQ_T6Y>Lq99qgU;_m(MkA)znn&=B>BTDZ6lvFiQx+Nt(nX zbYEb!I2#~do;hVKQk@$4(%&of+&@mVv<@uuMO^p@7FIzBW?T|y#TsCWwHNu(~>4V=`os6wrdiGcyT1L{UZ3mc1~f}8i#j}$Of&KUNLWfcotScwYNU} zY5COK-*GCXd7@=POpUw3kPJ!UUjRt7qyTtqh)Aja^uYZSuuet1mSq;)8fT;KgheDl|M+72r~&-R+5w_Jzz{(k7oT!uwEIR?WZr*7D{ z?Q4qi-kUS64?b<_`F2d)RD~fA$@mZ9A|c_3f5nfKg{aXa)pT9!8G5qg*zdkSbMjxB z>!>EQ)^#pQrvI@nN6osJu`Q(6Xd)Q{u_Cr4)h{s-1bYZE{^Q&77OK0#W0N1Vm$5V08nq9KKl z7sCXF)&nNg9Tb8)9cW}IhU@aiZVu;q4i=}Ai?Mnb6f$FgnZ$gfITK1VGmyz?knPOy z_s|#w(HN#Tip2Cm67#`@A=@Odw4|j54vZZB!>_6D{No=r^GXwGwMv+CHr3jjvK^Z_ zUxmQh5tMJEXo554y-u>~K3eXDs9BvYJz36~3Jo+79{3yGRcx|R0i}#W zs8`&Q(!Ffa6L|+)w2R>g(=edASmxg|4#$Q>DG1d>A%=Po6T1lES%i>hS1SsdqQnFKAO z)3Z+ve}G|;Rdr;g8Q@nUOL}39))raX(Ph3*Bogx>k#ItzqQE=mnKMb{w`EkwD(VEK zG7p4*qlT^zjvAp04~9^fM%{w)QW;Us3|q;OBRsGh*c2Y^!t;U3qJhd_gGo)HPq62B z_m4lGfK}2e%+SNCzFX~eQrSKl8U}uE0AlNa8er*LKs0jCA2gmIvGGcEo>ya~QO11v z$y)a;79q%sA+fJC)ot|A3~s4J&HRuu1xTC;;UY;lJmRb8Qo6dMIN{_vdhyC>SOu-D z16rnY&cGv&k*={3j{OuMoK8$2ah*>rQtM0Hcb^c@E^#yhALDdBEPYtA!-5 zQr{Y40>D{jA^g`C(IjOSk+;W0$USLd9R&=JOc8)&K{0EKK!(Wj;q6+#^b&Lq;Xe40=wA}Yo25myMrp@wW5w@{~DbYyJ_WI68*WdK+K zmZExqx+V$>5fL2ynx4Ywc^06ta7cJIBIBl>FT|e-SA*}e90}p|a-qNf<@xtct~iZX zoB>*{H-mi}$9bHIk9yDQA^sOEz;lj8z2Fxm&@?p7O;kRsOi7Y25u^NfP@Vl-_gJ+T|nL=OPkR~uuqp#55 zRp@|R`xs8?-EQ93pXPpx1oABb&qF4SizGand{ptFsiEc(a?DE2nY;C-dE?{@uvj!; z{D1-bj{O4WehveUvtM=K)$e`_PQUOM7;HO_ku{;W&4#P@ ze#x&}<~y<*rp4n!4od?0GdRh_j6hP;Fh&%PAlM$wsa6S5^}*bsV=JaA<>VfCH-|s- zIcf0Gub@Md<<3_Kf*=C(B+k@`8t}^z5vx6tvYm!goqNgn_|@;j!qrmaM&+^rwsa0E zx35AgCS}?N2AG2d?hY(8_J){K=KTnSS!3H$gPzZ!TETpTWk=uxA~^yYK#V9T5)`CS z2%SGr{VI+ray+W34HN=0~p2C(5V%fXNb za|N?4Es$aYZ~_B`t^_e5i-*SV$I5eQSaK?BlG87IQknXo=`V9M;mm{vgXukJxAls{ zLi{QzjfEjZ3#4%oL_HApA4t#ybiC~OPp0ha@1KD-skzeXn0guB{pMeyl3(&FWH=uM^LFJN!c(;%QVttY9S}<1oZsa;Dz>cjwAC-ig;3dlQ9AuTMd`a30$Cb|8aWk(+Les?o=Y z9&i`)a0p_#;}kk&dL{=+u^t*bfdsaJAUm2^o;TFC*+xfKi-pdUGv{ARTvC(Foz`L= zY-beXx#1;uO<^Rs-he3(cEO50@52=LaBD=#o|eo~(`AQ=^zvVwf>Yo68-$}5A=h0M zLLW}JP2Ry417NKzNn^1cx4iIou=`@f3G-VajP_87y5We0%lJNyD|5^fWO9A;>GTBV zQ_@M@NSXnXyzjFoWI;X8RWeWeS%zP%BqxR?DtCg(6w)mJn-PJNv*wy(EiT?w}AXw zSAdi#Oo=i{fGNU|qcnY;Ui{HN+o!+vHmsf~G=%U9y2!Ot=*h{T>K!PEBH!7`Hy0am zA08)QF?);)X^_sOdA^uLzT_>wfrd}wEeL(4@nSgT)Yh&7Ezix=KK}75_1PP9(IN@l zBzZ!uB5E`RNc5|uBr=erqZ-x*Q|SFVjxkri{lOJjI|coH`}te&i+}nzn7Qx`e8Dy5 zczFugX*gwkYa4b=JNXCE;ujTd zma4fslA6{j3GDo^u_p+l(K?bmlA_^g9)oe?G%RpJOLMP5<;qQ=;+63~cqt=yy~{^$ zoI?eBlP7}5e)Ug4%a0;_N?u`zMQGji2hi4c1YuN0K_euYsCOkyo@Nt$^RSHIT+Cxb5^va93K@`eH5en&{D8-CDk@b`Agdru z%ve%JySVh$OaEDZSq=5M6#Wp-?AKSo;tBicb*s zV=*$tWc(DZEu6FT8*d6r&Lx0#)E_3X4jJzI;vr}oJOYlYYU$F+SC-y6c{f~Oc_Og2w9)U|>h`aO*3_n7b^&bDHf_^3 hZPPYw(>AS4{|6tqfvS7b*v@~0drDELIAGL9O(c600d`2O+f$vv5yPdxujjgH=AZ3L>kT}E}+t}XS*}0rE>#+^2ckk@nJ98KI zBTf86Gv1l=z4v?0Jv*}jI&|pJp~III3vI-Um&6bRzAu0g`qAd!(FH8f&kOYX*Z=fS z>ov3)Z6UyKE(yCLFh$>vHQJBGNLm>E!y8rsZGzDPWJg5*>ISY^7AEM&{s4#0r7Yyy zK?q|7V7n0luVCA1TA)DIH2d;DtQi=LaRU7MDRI{A!Zdw51T_={&4!oXu;ySO#t7iq z%_gSkgeIT|BW=kD0e--2W@4nB(@16{{lB7vMPA(RTBpnaeXwi){j(A~n2U|Vvk zn0@wV>f0Jh1klhvP)0qUZxtQ+A(Q|Sv=3T_Er#ueH(9%pMWrpZEI^d)gP;uBHJ_)l zQa3Y{sAt0n5m^c;(Lz4#YPQ2Y_6_^5?-sJFB(Di@ zS$XHU;=`+Wa5|mFlLG@tC#9WB8ItXTxG2&#OO3oN0@7T7 zQ*Y1H+}g39gI!(7^!Iy0L`Bf{L6lI3_q9q2lUG|TMI~my+oIm@)2SrRlL!y@rJ;*3 z?E~#t$kV{g(WuWO1T72TbF!xg7X}BF+7kQxgO8#3m9Lt&$V1I;IPgmPLZJolQIQ`^ zDl7LPN0&E4wSEzbP$mEq#+D*%9|VW&#z|oOs)m-dQUQEeh>J%D@gUh#(|u!TAIKtT zbxTQhJgm<*LW=-Cjcn+>qg%HS{C1XThsy~mUI#sl}@7w3**;866d>3Xow(*;gmc|M+pJ0cgL z_uiWCJaK& zaOqSU=kC*-9AfhMMi?Q0&m+eUVdPtB9k!&jeV`IEGT}B$w>G^^WqyddtPF}#0{C!# zc;`+joGoc=AE?AA3#td_hpXQ{j8g*#rS^}aeV`KK1@MuurO4U`Drp-5eAt#Qoan)! zwR4T^k}lEMoAHyzF63?+Y@8tutlZ{Ow(= zKC@X1{$2#eP_10Y^3oLI;O6281)uL8`5T=~pz|<32b8{9!RqBL@2eD4hQdV-#~z)7 zZkCsZDB$&AG* z$Gb_)14Cjao zg-lR>7{RT@aJJ;x4W{7=r8g-XAwcy=6?dN7koWnZ?Ap>4RVm{^suXYbR4daEVgwq9 zRe;ZxmD*pBpWdV@MW$@^e14tmrZPdtX}d!&wj8i=zU29Q-Lg_QJNaRsa?vjg5pvR|h=@Qqf1@t6r zBo#foE~*(E%QXEM9Q`w(Pr$w6KwPOp^hInnGOSmDRfk2eu|{9J6F{265>^N+DP>(+ z1rU$9a9=7z95*oVB`S6Ak`0zWb8Z_XNZH*LLNj_^;UR(QWZ4tII2;Q2N~I=1qkVW* zuox@?i=hd%0ftHp5m@Qe=he^tZOu+LDX_+|m1da4E4?U)u3` zvx3hfy}0e+s_|`!g*|crNbNHlgd_F-baMf?zrN=&Rin$wR(!ryScsdY{ma%=e?jKY z$jpG(vHdXx;&K)4M8!;>XPe>b#)l%DM91F-ik&)e5t{Zyv z48Qx6hbeH-KP;OV`~sQ(XpjTs+tGuM4#N_&h!ghtTQtp!75zyzIC%>GFfy4!fMZ(t z%(&asD|f{-EXzhz$g~gQgOaVAL*{%-&mOeCq`O6ZbiO4+rw~z=l`SE1z=0VW^)26% z8g5Pf!Mu$`SC&NhF;r7)9~3F@CVpT?p6q5ksNK{ietA@>^N@)4XnIZXd?`JgD+ZWyAPUb_X`ZE*SHFG;Mm`Fk zZ$vx-_{{&8)(tMNA8bTRsP=(M;uXMW{>?G^mu<<0cEYz0RAPnzjDB0nt7;#p#2f*9 zJRy=~OUmxYFQ{%GsKh)0e8St3w)TNa%oV_A{y$miw#F`6+XpH!UjRlvKjh;sD}&M= x0{H9-aR$5pqelU?z`xo~f$z|vLx&C>J^?4V&BQa`ph*A#002ovPDHLkV1hQpo`nDa literal 0 HcmV?d00001 diff --git a/frontend/src/assets/model/icon_bdyzn_colorful.png b/frontend/src/assets/model/icon_bdyzn_colorful.png new file mode 100644 index 0000000000000000000000000000000000000000..bebaae397ee9da42520b6f3dd3911ea08e4b590f GIT binary patch literal 2073 zcmV+!2RP)@~0drDELIAGL9O(c600d`2O+f$vv5yPhw#HnatmoNH7f^%xFGdm_$X5a-rLBrz&fy#-%d(F^NK=nc443K5P%qTJ&D z0E--|CXvjs5{dA=K}9Vg5O(Kv#y^N-tmD?3iZIZ!-Pm&dvxjN zO^6Ax5g=Ewhu%3K-6jaOkCzuyDJT@j=c-^hu@K<;^M!c}$t(g6`F|JLMS@F@F3uIe zV2l=^;q%;X(hwe_>w}R3v=vw(Ad=F+0On1zC8GqW7g)jqk2#QsQT4$H0h$FixX*{i z7+caVz~r;vZnH18qQJLPB?P9{F3y!f6WRn2RA5D+&6bo4Afv#F0twivr>)8a;68tJ zbY@Xy~__TE(dAM90w|5~Vp#|Ut zmc5z#d>T$Sk?KQW0eY~&3W98=Qg|(>E%_GU6ckud1gZ}f_~gi{wE{C>5CljWsFeqV z`(Oy{nzHYX{KqMf1%1b|Ai;$oa0@h23p~L>>n^4V*G5>=$6-yM#{q08R1uzhaVLwE zuzel11=uU_?dTB#Hwhv6Fx%RZrlG24LVg0@jtU_NZ~RkQc=+wFOAwOC3o-sdlNRLI zoOm9@Q$$ECM>*#sO9(dgT;5L|+NB6<08Uo{zW(WL`mf(Vu7VFleNaBCDByjXf~Cg- zH^2m5U!ZLKCzlx-E|zyY|GX}opLw&*v@UGj9V~)RY9BNK>k!bEc;MMq#`504;ZoF5 z)s3)1GzLaK$bxI<=EQB5D)tu-HikR@+%Akwzrosz2vma#;kQ1h3Vb_3gdhloAlLVI zE|akwTttEw`1d0ZHaf=HmjLfyO-jiG$@{e>&g7p9Hr796`omwWC-Cib6N1}~lfo&# zR>%WST;#`UGOhnEPJrf{2ow_us}QC>m=gGQ+Jp#nT7vt$>te@tt8f9{W7&>#uv{$; z`wC>1?Vg$xbT5KjBM&^Kl>0o}4Tg@p!4d@sS08$TW`XS%_$E>XIQ~JWM2PkR>xXUv zBtZ~ti#p9@SRI?$zZ$eq$ARMl>(UGgY~%_P;26ZL<6xGpAp#X@Q#mfMF3o`id~Zhw zg=Iv}acJfI%%1O5H4PU0G36253e>4T$g2 zMHTg{p8=XtA^>mhL(JgY5TJm5253f!0FD#CI^ZZe_1Dh;%_tFo5H}4mgE+2|^-Dhk zIzbY>BLM3Oq#;= zf)w>J#GecD0^!2gkNbSBcj zU)eJ+lony$8*m)DJvRMT#{FcW;iG=%*2E%l={kbi9=4`g5ViU3PbOpo3;qSwqrMew z(@+z#Vdv(=yzA16>QUc{u;b~GE`mTck+80)I>=i)^XcG|AVwZ^S%?LPtwM2; ziEuTUBvWCtp*iXi%?o@J!#CqF!)7V#=V$hE5D-&FJ+suVEB~$nB$L)C0o3|1ByLHp zp|i@?4Xb|E4SdwUzHxb-y>AJ%AB!Yq%d*D1z5;yk)erw>Ei1XG`=m23(3C>{)xEPN zum68NnaL7DS9J%zex26TxwUfn#MeRq#-{(XS<>+5{p&1jI|*WLvoso(u*J<(xHECW2R z`}K_p4eJ)NNh!(uu^TT!PeZrv4sNn9qxBhzH6QakVFFXL8y5>B4>y(|0+FYo{Luu7 z1i7Mnwxkq<<(l0*d>SeE9Dz68*H1ySh0nU|Y|v*xq|Bzog|K$xh0v97W5wEYw$!wn za}n*v3n?pM*|y}hAmd#vkbywE@j}{G1kZ-8mBAceO|x$|K|X>7;C5qO8Clzy?e^5e zs7T+8YuM6wTx^Nk4ZFrX+d?ja0+emWHEoIYg9~6NZ2zdh?Plb`(;_HB>2`D@8*Jv` zMTb9w2horxsgN=o98=6{s-PGx{eXrL*L2$w-!wyN zwglNK)`pl6t9!&=t_&{m)%3x^ftQ`^hG_}*IpzEhP+bM_)j2<500000NkvXXu0mjf D`2WVw literal 0 HcmV?d00001 diff --git a/frontend/src/assets/model/icon_deepseek_colorful.png b/frontend/src/assets/model/icon_deepseek_colorful.png new file mode 100644 index 0000000000000000000000000000000000000000..29b11250991b3997b84c9a6cdc36af041735c45a GIT binary patch literal 2630 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 Z{{cT%+eyecbJn literal 0 HcmV?d00001 diff --git a/frontend/src/assets/model/icon_ollama_gray.png b/frontend/src/assets/model/icon_ollama_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..08a6e17e359a45007f33732a8557249c047b92f9 GIT binary patch literal 3285 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 Dbb-bf literal 0 HcmV?d00001 diff --git a/frontend/src/assets/model/icon_txy_colorful.png b/frontend/src/assets/model/icon_txy_colorful.png new file mode 100644 index 0000000000000000000000000000000000000000..a6f17f816b96db98b8497a499246a056c59aa923 GIT binary patch literal 2170 zcmV-=2!;2FP)@~0drDELIAGL9O(c600d`2O+f$vv5yP#@O1R)9p0hG&t!}{C?VxCKvULe^sezwNH2O6Ju>Dd&5Sk~qlc1E9s^vFEPM;u z3;!m*A+CuXlz`$5(3CSI$aQ+ukuN=3Qx=P!4HXm#k9rRW1&Ghg&}(<;8a7ZM#mxZ! zjkiz+{DpdzWu)k2H;SWBMvjRN&J=-H*iI^=&Nbe)4&g6 z7naG#0Bf>qH2NfsdfN%o_p(Xv`l`W^eHsY!w(|u0c|cP(N+UjVO>8Omrl+RdmSybD z06)v!(;7fxT?vyXJTN@Uz;*c9avPSgI|Dpb&79F3wVAv4%$AyMo7&?ftY*q~XMo=K z_h_M;MUkw@J#Cn3aTeH{0Vck`f?PtqScJhfc&aC1>E&&q8(BFgJh5DnJM?vB)K%-y zbw8%T(NRBhG-NRnItCl~aeqDb7!THCY-1`aJ8u?IjI(2af$HDJ(JMcZ{pT5^rlf0~4C--@buD^09fbdjps*i6( z2N{#iB7Cn)7wl2YFY9#5ISQU*>hkPoWt$c{GD5YDh1nj8+x-h(=X;6$a4^z1-ZH*+_{Pc+hps#M)T`bJJ0oXmZjK1WDr03PvT z$Z32XSs_FV$1B^IpS2r_@QD9cm8KiWjyAci)ig6A`69gEU4!rrkfr#Hq*C#7Ixo*E zTil?Y#8Y%L7N4n8rtY>T-g4VTVVN&uoG(hg+j}R30d6lKq3$(w`?jdP&J_`(u zpf|w%M;ppNC#OdO_UV87^nJ8#M5c%~Xkn9;#l%J^QvBDnC_;*LrSS&v!^}Mxq2l{p z68sKM9P5NeGrx4_XaTR&(oYR~637@bLS?vwFFrR*gwl!sawqj&yciYXd}=B&V;3eV z!xxDSxh1u{*YI5;AB>WNy z-$PP^Kbqk*b$SOH^qro9{8DWaGgmeJ}XiQKLr0)|>**g|sA9 zM+=cuW$rr%UXfJ%0YxaQ*|!lR;agz6nCC+VcgPx`sn<+R^-u(57oT|n-QYAaKndaK z!Bl*X$%_y_CCLr&%=(SgN4Y6ifCS$1 z3Quc*z`#gufJ#oCrAZUtr>=S4s221q;#q-hCR2P)v~=18v<(_SdOH7Ev$}I(QpLZa zK3-==b5tN72^!$Uls;*xRP5Y4bxUp-i_iXai1|{8&j{`9PW`YATtNf)rQSB;;9}kW zgKUk!;(Nw7ad$?cW^qa3Vf=wJ6MKw6=)evSLyfAPqKW(6Y}SKG7N1?F$+gSy`ys*& zuyC#oXbVdmlJ3w8fWL`+tZn}Yr?xD{xo1A3ID w^6GFn91e%W;cz${4u`|xa5x+ehhw7nAD@dsTrOS1;{X5v07*qoM6N<$f_DrK_W%F@ literal 0 HcmV?d00001 diff --git a/frontend/src/assets/model/icon_tyqw_colorful.png b/frontend/src/assets/model/icon_tyqw_colorful.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc26b506cb61f894ad7cc8bee721d003456dba4 GIT binary patch literal 2206 zcmV;P2x0e$P)@~0drDELIAGL9O(c600d`2O+f$vv5yPoAod9?pCAkn2i?UvLEIBGJwd!HkT|GU z1sanxof%3BNr~dT_xLpqe}EIo7A1o-Z|48L#sC8Y0|NsC0|Vb90(wLk{<8yj$xHok z0w~lpy4ZdW9uh#Gh?6rw-+Y5O4xiqH;32&k0DA)!JWij94}e987utfx;2Hg~0DS{z zk0KC~u$-tJ_!=LBXY^tK!hy0?JE4HMVVo9&bNx9va(bq;vK@Zj?VJfYJ82%mo1 zHUHTsN}VpfU}Ixy1_rPw;f)n^YXM^PcJ@He{s&R<$5Hg-?aG0vX5x!1?aUFgH%P$C z^tVuZ>Bd{~+Jl?-TB1$>g|-|)*vP9;!7XeCmwIwsLk)B?0IA0--&^HlCi=yL!?mwB zYq}Eep+9KLlzY*epYZ-lfo_%{yYbqa4@P!Yy__sdn_~*k(v@8E|&THS=h{VyNW z8>waI#nwZoYtj()N9ZqF6^$NR$xNU%3&_o4jJEH8XkpB;f>tabKa0f&J^LTwuj@If z6VzwEue2OdguX2Ot;kLCDTj;`MRkEoDLp0&W13!~L6QN{Fdm z$MNzDBRg$^MuAtPLBK1_B`6CpYqByKE6UB+8?XPevyw^p`SI(~m^_QL+hu{kecJ){4C>csB`99n<#qZm_A33? z1Ua!l$Xz&DKrVJ)gs6Y-1NpEze)b#OEI_PD@e%d!y&#s)IJ4hSX#rZ19O*Zou78*H z8Lj(BVNbl$Nu@m?5LAAMg6cSj3cf!p$SOiXoBf8M`a@jwxY`MS`|Mp+8kJm9Nx&t? z`U9sAae5~|Ycok?V^r~oRh31t#W(9sm5MA0IZ5Mf-JS4CxE@Nm7?S+ zSGCN^SuDd5t&RoJ8YK+0YJseI*NO?2ZBL<278Xl)L@Nh?(I_#m9NWQMlA3n|$(SS{ z#cI|uv)C*9gy@L6MMJ5L5(YxFGO(6%hKkearEr}<-fl=dydW9OTh-6s*U6ki#) zxoKu{YqFH=8xS>ru5a1CkK6K@S^-{`q6eU0ZaAo&>~@XCs4#}+Uk<}NFDVpRN~;Z} z%hEAPmZpR5z7!EPe`yj5B_eRLlr#W&b3;RtrOv(qNAs6gV>|bQVPz?~Iyz@=Sg2v= zO5Z?Rr5ur#p2})$Og|VxmNLuJTb8AEW{dLAL=*roA*v>Ydp{UPma+zb6}=?N(&%Dq zTH+g!(n30yr6+*J_y*a|d87H`fMkt!jgFDEe@h|(D)rPLcRqmL|M9Ic~UYqUM)K@{SNlE##$V{=I^WI zyRx@q4L}WTL}OQXe~E=}kUwV#1G@H!gb4<2lnMi$1&A7w=ooiD!@@V<#QEbE3X3a( zf#fz-yK!Y*b{^#7Rw}Hj4`-@N)=3ty6ffb^{sBv(g%TJCXO*@DHPO8;;H<6M(w3S4 zBbVAJ^Z+!tagEzJ_j6WqA41bOhQjd{&}8>|8|QvHm)tWz#G_D-Sop-;oMZ>E2)NY0 zlv@trzhqbcdkqaR>uL$1QA|84aE?deJmDYoO}qmnS_!<~az7uUN#cZ6M(6}G9)(Lu zrZqd4m}?l-6t$8+EUF=NbQl|t!pDM4N609d0JxNr8!vS$f<8b!d%{dO0q-hbr_?p2 zRS7)+#=NxWdhQg{S4l6H9(u?`ujg^_yt$$-R!XvRQ;q64SCfm~c&SboC%@nbJtes= zF=D8p47?V|vXjw8gMglrG>MV&lw{QO%yEI`G`1uj8c0cE&jW1`ddMVdWA+>BNJ(Dh zzNzG^Ud;Z38zVVGpwQw3;-@4{rNSur6Xvosm^Iwhj`(0pQ(RHvj3hf-UOsC%wz8!T zN9O~g=&^pYdP6Zi4t(Pr3#|%5xP{{Ri6$N8=+uhS$DIp|$~Nl5qc1q}R4* z_DSU*d!T0OXa_EF>Gn^UxRR~NUbED(GIbrrth^Y2rAo81syYv3XAwUvz>uvpTTxXv ztE>otLWh2fHv>?p$X+h}rZ-D>>b3i00Z?@O#PPhIh!ySZ*lYJ{08%oWr3%g#4Rs{s zdDmXM7c#U+?zourug51@J5Pepr)EmoK|SwEb`A^- g3=9km3=A0l2jwqF#$7Buw*UYD07*qoM6N<$f}t1p(*OVf literal 0 HcmV?d00001 diff --git a/frontend/src/assets/model/icon_wxyy_colorful.png b/frontend/src/assets/model/icon_wxyy_colorful.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9d94ab1ad39399c6efc68c6e045c28921f319b GIT binary patch literal 2018 zcmV<82Oao{P)@~0drDELIAGL9O(c600d`2O+f$vv5yP<&T!AiV@ih7x>5M zd%)XF`CTU8mZS>cF7MYVe7>JH20U$?^-ll1xcqX7fmNpv!m`+%&V!j<7!xT1Q29KH z4CS0RUcCFF5?am@|F#aQkq{ro5}>1(ZUhDSIat zps?JYw~(z;*bOpl9&MJSk3>mrDPep_B!D>iJizWKzv{WqUvh&+R=Y`x5Q16GD!0&E zpcM3`-R?r%`>`Ma;>uTf@}qnnf`y}vnX2lOFX((X>tX2BpdZ{7!YYTp6FVMqAjyBD z$aa#Xm9iNm5FrE&AOL~Q#~n{3fC8el@{-$KqqyP+i1kDVe!D?h5JbEhcbHy)C^&VS zVifBG4X^7`Y|*qya54d2r8W0o(&xoMk^6j)FCIDk$4G0iEA6mgG_j$#G zDn3F7Y{@QVC=-BN&#ua=f5_*F<{x^#&9f*`c9(}T0aW_F@cBdkK-BvyihaIcm)hvp zrTFWDY;+C8GBND)3{*l@m&%6#^IK(W>PkKM<7pL3*8t1!fXG!;vRn-H?910$z4pJ5n$m3amyUVnaWKw;3ZH+~!jyw6>z(&J z{+yGvGA}1zV59{(Jf-aJ{gCXz2rc`A&nmopFlRzqnHKYcFh|sSoP>G3^Wn`h7E9j$ zm#XIlV}r28Ydr-nMDOX(QOV(r=Y&1q^K_V77^I!5D{{=8E0^|9< z$aati+~bO9u1~%o7inm8!jH3@i-wUg;B8_efM(Q{qoG5#7AVgs6M%9tR-TzykYfcKSQ(^NrZt*9&1A6reZ=vx->GJ#}w?Cy#f7xOm*<_A>@-P1O>3k}OE9X67;B znR~Cjl?Ne&-H3~(zZXDlZwcBol(8j~ZAt95ahLbE!w`0;wmNAT2lQ=8+}iFpFI8_V zN`%;LBf5R{tl(Er-alfPgaR-Rq{DA*#BJTSbiCU}oOmTW=oz3FcRZm0_!v|X*%FTr z{0gKLg39L$4A$e0r|1{7FEW7@Pzrj8%uDaT==mF^xg?Jq?5YF;t3igf^Oi)W+T%vo zbt*0A3qaXs?X0ejBOePH;C9h~{@q|ml{8)esxIwWmcM7-+DPhv4I_$h&$O9v_tWd>q=^s)^Al^3ka=wlrp!_RKE} zn$aB}bahENd3`VdO}3=0OM4oO>g-6?)m)R^jQmx=Kvdb1Zo3(U(Y;MY*;~fPQ&Fas zX)(UJ?3nR^JgrPi9=iKRL_*lkHlO95Px5%Gu7~528vzEK7avUY`8aYXz<}dv(bHw` zewTIweLjxd3Lq%+`G-#6M3z)^g1yPczzM1O5Ag)rV%Qf$!2kdN07*qoM6N<$f;V-{ ANB{r; literal 0 HcmV?d00001 diff --git a/frontend/src/assets/model/icon_xfhx_colorful.png b/frontend/src/assets/model/icon_xfhx_colorful.png new file mode 100644 index 0000000000000000000000000000000000000000..ad396f17313d07a29cc310260e06e476ea1b4740 GIT binary patch literal 2790 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 + + + + + + + + + + + + + + diff --git a/frontend/src/assets/svg/icon_admin_outlined.svg b/frontend/src/assets/svg/icon_admin_outlined.svg new file mode 100644 index 00000000..08447d7f --- /dev/null +++ b/frontend/src/assets/svg/icon_admin_outlined.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/assets/svg/icon_azure_openAI_colorful.svg b/frontend/src/assets/svg/icon_azure_openAI_colorful.svg new file mode 100644 index 00000000..e5a2f98a --- /dev/null +++ b/frontend/src/assets/svg/icon_azure_openAI_colorful.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg/icon_dataset_filled.svg b/frontend/src/assets/svg/icon_dataset_filled.svg new file mode 100644 index 00000000..5f15a4de --- /dev/null +++ b/frontend/src/assets/svg/icon_dataset_filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_done_outlined.svg b/frontend/src/assets/svg/icon_done_outlined.svg new file mode 100644 index 00000000..ede53c1e --- /dev/null +++ b/frontend/src/assets/svg/icon_done_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_moments-categories_outlined.svg b/frontend/src/assets/svg/icon_moments-categories_outlined.svg new file mode 100644 index 00000000..a7226e4b --- /dev/null +++ b/frontend/src/assets/svg/icon_moments-categories_outlined.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/assets/svg/icon_side-expand_outlined.svg b/frontend/src/assets/svg/icon_side-expand_outlined.svg new file mode 100644 index 00000000..f242724e --- /dev/null +++ b/frontend/src/assets/svg/icon_side-expand_outlined.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/assets/svg/icon_side-fold_outlined.svg b/frontend/src/assets/svg/icon_side-fold_outlined.svg new file mode 100644 index 00000000..86832bca --- /dev/null +++ b/frontend/src/assets/svg/icon_side-fold_outlined.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/components/layout/LayoutDsl.vue b/frontend/src/components/layout/LayoutDsl.vue new file mode 100644 index 00000000..5acfa145 --- /dev/null +++ b/frontend/src/components/layout/LayoutDsl.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/frontend/src/components/layout/Menu.vue b/frontend/src/components/layout/Menu.vue new file mode 100644 index 00000000..0cb63e40 --- /dev/null +++ b/frontend/src/components/layout/Menu.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/frontend/src/components/layout/MenuItem.vue b/frontend/src/components/layout/MenuItem.vue new file mode 100644 index 00000000..506ce9e2 --- /dev/null +++ b/frontend/src/components/layout/MenuItem.vue @@ -0,0 +1,48 @@ + diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index d818ecc4..21579f32 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -1,6 +1,7 @@ import { createRouter, createWebHashHistory } from 'vue-router' import Layout from '@/components/layout/index.vue' +import LayoutDsl from '@/components/layout/LayoutDsl.vue' import SinglePage from '@/components/layout/SinglePage.vue' import login from '@/views/login/index.vue' import chat from '@/views/chat/index.vue' @@ -8,7 +9,8 @@ import ds from '@/views/ds/index.vue' import DashboardEditor from '@/views/dashboard/editor/index.vue' import DashboardPreview from '@//views/dashboard/preview/SQPreviewSingle.vue' import Dashboard from '@/views/dashboard/index.vue' -import Model from '@/views/system/model/index.vue' +// import Model from '@/views/system/model/index.vue' +import Model from '@/views/system/model/Model.vue' // import User from "@/views/system/user/index.vue"; import { watchRouter } from './watch' const router = createRouter({ @@ -95,17 +97,30 @@ const router = createRouter({ }, ], }, */ + // { + // path: '/system', + // component: Layout, + // redirect: '/system/model', + // children: [ + // /* { + // path: "user", + // name: "user", + // component: User, + // meta: { title: "User Management", icon: "icon_user" }, + // }, */ + // { + // path: 'model', + // name: 'model', + // component: Model, + // meta: { title: 'AI Model Configuration', icon: 'icon_ai' }, + // }, + // ], + // }, { path: '/system', - component: Layout, + component: LayoutDsl, redirect: '/system/model', children: [ - /* { - path: "user", - name: "user", - component: User, - meta: { title: "User Management", icon: "icon_user" }, - }, */ { path: 'model', name: 'model', diff --git a/frontend/src/style.less b/frontend/src/style.less index 7782fbd2..436f7f21 100644 --- a/frontend/src/style.less +++ b/frontend/src/style.less @@ -3,7 +3,6 @@ line-height: 1.5; font-weight: 400; - font-synthesis: none; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; @@ -26,7 +25,7 @@ --border-radius: 8px; --shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - --el-color-primary: #1cba90 !important; + --ed-color-primary: #1cba90 !important; } a { @@ -111,7 +110,6 @@ body { border-radius: 8px !important; } - .hover-icon { cursor: pointer; height: 24px !important; @@ -145,3 +143,9 @@ body { top: 0; z-index: 100; } + +.flex-center { + display: flex; + align-items: center; + justify-content: center; +} diff --git a/frontend/src/views/system/model/Card.vue b/frontend/src/views/system/model/Card.vue new file mode 100644 index 00000000..5ce7cd5d --- /dev/null +++ b/frontend/src/views/system/model/Card.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/frontend/src/views/system/model/Model.vue b/frontend/src/views/system/model/Model.vue new file mode 100644 index 00000000..fb465679 --- /dev/null +++ b/frontend/src/views/system/model/Model.vue @@ -0,0 +1,425 @@ + + + + + + + diff --git a/frontend/src/views/system/model/ModelForm.vue b/frontend/src/views/system/model/ModelForm.vue new file mode 100644 index 00000000..2a94544b --- /dev/null +++ b/frontend/src/views/system/model/ModelForm.vue @@ -0,0 +1,360 @@ + + + + + diff --git a/frontend/src/views/system/model/ModelList.vue b/frontend/src/views/system/model/ModelList.vue new file mode 100644 index 00000000..710691d7 --- /dev/null +++ b/frontend/src/views/system/model/ModelList.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/frontend/src/views/system/model/ModelListSide.vue b/frontend/src/views/system/model/ModelListSide.vue new file mode 100644 index 00000000..c256b690 --- /dev/null +++ b/frontend/src/views/system/model/ModelListSide.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/frontend/src/views/system/model/ParamsForm.vue b/frontend/src/views/system/model/ParamsForm.vue new file mode 100644 index 00000000..c75f9199 --- /dev/null +++ b/frontend/src/views/system/model/ParamsForm.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json index bf358d84..59f79286 100644 --- a/frontend/tsconfig.app.json +++ b/frontend/tsconfig.app.json @@ -1,6 +1,8 @@ { "extends": "@vue/tsconfig/tsconfig.dom.json", "compilerOptions": { + "target": "es2021", + "lib": ["es2021", "dom"], "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", "baseUrl": ".", "paths": { diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 4749a7e2..89a1405a 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -46,6 +46,16 @@ export default defineConfig(({ mode }) => { }, }, }, + // server: { + // proxy: { + // '/api': { + // target: 'https://sqlbot.fit2cloud.cn', + // changeOrigin: true, + // rewrite: path => path.replace(/^\/api/, 'api') + // } + // }, + // port: 8080 + // }, esbuild: { jsxFactory: 'h', jsxFragment: 'Fragment', From 42138d28423fdd2c97a2bf47ee0643d4b000a604 Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Thu, 3 Jul 2025 18:02:26 +0800 Subject: [PATCH 2/6] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E6=BA=90):=20?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/eslint.config.cjs | 1 + .../src/assets/datasource/icon_PostgreSQL.png | Bin 0 -> 2750 bytes .../src/assets/datasource/icon_SQL_Server.png | Bin 0 -> 3243 bytes frontend/src/assets/datasource/icon_excel.png | Bin 0 -> 715 bytes frontend/src/assets/datasource/icon_mysql.png | Bin 0 -> 1371 bytes .../src/assets/datasource/icon_oracle.png | Bin 0 -> 400 bytes frontend/src/assets/svg/icon-key_outlined.svg | 4 + .../src/assets/svg/icon-maybe_outlined.svg | 3 + .../src/assets/svg/icon_chat_outlined.svg | 3 + .../src/assets/svg/icon_form_outlined.svg | 3 + .../src/assets/svg/icon_logout_outlined.svg | 4 + .../svg/icon_moments-categories_outlined.svg | 6 +- .../src/assets/svg/icon_right_outlined.svg | 3 + .../assets/svg/icon_translate_outlined.svg | 11 + frontend/src/components/layout/LayoutDsl.vue | 20 +- frontend/src/components/layout/Menu.vue | 2 +- frontend/src/components/layout/MenuItem.vue | 2 + frontend/src/components/layout/Person.vue | 275 ++++++++ frontend/src/components/layout/Workspace.vue | 195 +++++ frontend/src/router/index.ts | 6 +- frontend/src/views/ds/Card.vue | 257 +++++++ frontend/src/views/ds/DataTable.vue | 475 +++++++++++++ frontend/src/views/ds/Datasource.vue | 386 ++++++++++ frontend/src/views/ds/DatasourceForm.vue | 667 ++++++++++++++++++ frontend/src/views/ds/DatasourceList.vue | 109 +++ frontend/src/views/ds/DatasourceListSide.vue | 106 +++ frontend/src/views/ds/ParamsForm.vue | 66 ++ frontend/src/views/ds/TableList.vue | 4 +- frontend/src/views/ds/js/ds-type.ts | 14 + frontend/src/views/system/model/Card.vue | 4 +- frontend/src/views/system/model/Model.vue | 37 +- frontend/src/views/system/model/ModelForm.vue | 22 +- frontend/src/views/system/model/ModelList.vue | 15 +- .../src/views/system/model/ModelListSide.vue | 8 +- .../src/views/system/model/ParamsForm.vue | 4 +- 35 files changed, 2650 insertions(+), 62 deletions(-) create mode 100644 frontend/src/assets/datasource/icon_PostgreSQL.png create mode 100644 frontend/src/assets/datasource/icon_SQL_Server.png create mode 100644 frontend/src/assets/datasource/icon_excel.png create mode 100644 frontend/src/assets/datasource/icon_mysql.png create mode 100644 frontend/src/assets/datasource/icon_oracle.png create mode 100644 frontend/src/assets/svg/icon-key_outlined.svg create mode 100644 frontend/src/assets/svg/icon-maybe_outlined.svg create mode 100644 frontend/src/assets/svg/icon_chat_outlined.svg create mode 100644 frontend/src/assets/svg/icon_form_outlined.svg create mode 100644 frontend/src/assets/svg/icon_logout_outlined.svg create mode 100644 frontend/src/assets/svg/icon_right_outlined.svg create mode 100644 frontend/src/assets/svg/icon_translate_outlined.svg create mode 100644 frontend/src/components/layout/Person.vue create mode 100644 frontend/src/components/layout/Workspace.vue create mode 100644 frontend/src/views/ds/Card.vue create mode 100644 frontend/src/views/ds/DataTable.vue create mode 100644 frontend/src/views/ds/Datasource.vue create mode 100644 frontend/src/views/ds/DatasourceForm.vue create mode 100644 frontend/src/views/ds/DatasourceList.vue create mode 100644 frontend/src/views/ds/DatasourceListSide.vue create mode 100644 frontend/src/views/ds/ParamsForm.vue diff --git a/frontend/eslint.config.cjs b/frontend/eslint.config.cjs index 109373cb..9d87cc93 100644 --- a/frontend/eslint.config.cjs +++ b/frontend/eslint.config.cjs @@ -28,6 +28,7 @@ module.exports = typescriptEslint.config( 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'vue/multi-word-component-names': 'off', 'vue/no-required-prop-with-default': 'off', + 'vue/no-v-html': 'off', '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/ban-ts-comment': 'warn', diff --git a/frontend/src/assets/datasource/icon_PostgreSQL.png b/frontend/src/assets/datasource/icon_PostgreSQL.png new file mode 100644 index 0000000000000000000000000000000000000000..b120f82b70f2d6f10b640524003ceb6c6600f52a GIT binary patch literal 2750 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/datasource/icon_mysql.png b/frontend/src/assets/datasource/icon_mysql.png new file mode 100644 index 0000000000000000000000000000000000000000..3a094258a2a52c6bf7275697ef508e4c286c589e GIT binary patch literal 1371 zcmV-h1*H0kP)}}eS+W9&)OZVUMk>eZz;FUso4{ije-7zb3|zM9;^*OX0*pV8^j;iZc0j=! z4{}3d=z~1n>BIj7W>3Vy zWmt4!0aMikPiSe;Wm}|geGFii4*u%HLXJ;Ior>0ojYRbK>x#NiW_Ioxy@( z%hR8a9VRG_h{LN?I%UAKw>J987`M_cNv^e_jWsL4872@vB@NO~r8Cb6G5BKw;wF z8H%(cq$WeU)Cts7KZ8nOQ?5O{u1b}7&Tis5S?#;5WAbdbBj5fqUPj8;!x~g6hXI~k z3RSc8tIbDx@?cOBOBs-Fwdg593s4UO)XIp}Edr|ZRPR;*Jpahd4oJ-9ZH~s+mZEv=mpW9da2k>2*{q2Y)hz%D_sy)qDv&wo_?VX@AJjVpg)Z zf)w%@K={G>fg7kC*tf=wq8`q}1~5tDHmX#g01LKIFfMH5AF&!KssdLC8Md4LK2-d+P+;49|mMJa3ZE@ z0LSB_vN;X8>gSFs=`@3>W8JG-=AH5xVAP?Gpk{Va^VAyG%S(Zp0jJbRW1wBDw6?+? zQ+iXt#|!-#j~Ug#Szu5}!LHK`>S{cro9TQ>TJ$@iG=zQLLjp4^b+Eb( zLk2u;)fzKeyk@Yd_#Bd9 z;F`hgz_@^c^8o|rWCNKgY2NN9OmE+o02{9V#xMfjiZ6}|})^K|udS?83{1OTt4oI?Nr literal 0 HcmV?d00001 diff --git a/frontend/src/assets/svg/icon-key_outlined.svg b/frontend/src/assets/svg/icon-key_outlined.svg new file mode 100644 index 00000000..1045f405 --- /dev/null +++ b/frontend/src/assets/svg/icon-key_outlined.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/assets/svg/icon-maybe_outlined.svg b/frontend/src/assets/svg/icon-maybe_outlined.svg new file mode 100644 index 00000000..5e8a31aa --- /dev/null +++ b/frontend/src/assets/svg/icon-maybe_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_chat_outlined.svg b/frontend/src/assets/svg/icon_chat_outlined.svg new file mode 100644 index 00000000..8027cf8a --- /dev/null +++ b/frontend/src/assets/svg/icon_chat_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_form_outlined.svg b/frontend/src/assets/svg/icon_form_outlined.svg new file mode 100644 index 00000000..644e0c22 --- /dev/null +++ b/frontend/src/assets/svg/icon_form_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_logout_outlined.svg b/frontend/src/assets/svg/icon_logout_outlined.svg new file mode 100644 index 00000000..69d2c9d1 --- /dev/null +++ b/frontend/src/assets/svg/icon_logout_outlined.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/assets/svg/icon_moments-categories_outlined.svg b/frontend/src/assets/svg/icon_moments-categories_outlined.svg index a7226e4b..51a89af8 100644 --- a/frontend/src/assets/svg/icon_moments-categories_outlined.svg +++ b/frontend/src/assets/svg/icon_moments-categories_outlined.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/frontend/src/assets/svg/icon_right_outlined.svg b/frontend/src/assets/svg/icon_right_outlined.svg new file mode 100644 index 00000000..e166a0f7 --- /dev/null +++ b/frontend/src/assets/svg/icon_right_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_translate_outlined.svg b/frontend/src/assets/svg/icon_translate_outlined.svg new file mode 100644 index 00000000..a7c7d59e --- /dev/null +++ b/frontend/src/assets/svg/icon_translate_outlined.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/src/components/layout/LayoutDsl.vue b/frontend/src/components/layout/LayoutDsl.vue index 5acfa145..aa4942fe 100644 --- a/frontend/src/components/layout/LayoutDsl.vue +++ b/frontend/src/components/layout/LayoutDsl.vue @@ -1,11 +1,12 @@

+
@@ -28,12 +30,8 @@ const handleFoldExpand = () => { {{ collapse ? '' : '返回工作空间' }}
- - - - - {{ collapse ? '' : '飞小致' }} - + + @@ -97,10 +95,6 @@ const handleFoldExpand = () => { display: flex; align-items: center; margin-top: 16px; - .default-avatar { - margin-right: 8px; - cursor: pointer; - } .fold { cursor: pointer; @@ -153,6 +147,10 @@ const handleFoldExpand = () => { box-shadow: 0px 2px 4px 0px #1f23291f; background-color: #fff; border-radius: 12px; + + &:has(.no-padding) { + padding: 0; + } } } } diff --git a/frontend/src/components/layout/Menu.vue b/frontend/src/components/layout/Menu.vue index 0cb63e40..327d3df7 100644 --- a/frontend/src/components/layout/Menu.vue +++ b/frontend/src/components/layout/Menu.vue @@ -33,7 +33,7 @@ const activeIndex = computed(() => { height: 40px; border-radius: 6px; &.is-active.is-active.is-active { - background-color: #1CBA901A; + background-color: #1cba901a; } } } diff --git a/frontend/src/components/layout/MenuItem.vue b/frontend/src/components/layout/MenuItem.vue index 506ce9e2..ea938bc1 100644 --- a/frontend/src/components/layout/MenuItem.vue +++ b/frontend/src/components/layout/MenuItem.vue @@ -3,9 +3,11 @@ import { h } from 'vue' import { ElMenuItem, ElSubMenu, ElIcon } from 'element-plus-secondary' import model from '@/assets/svg/icon_dataset_filled.svg' +import ds from '@/assets/svg/ds.svg' const iconMap = { icon_ai: model, + ds, } as { [key: string]: any } const titleWithIcon = (props: any) => { diff --git a/frontend/src/components/layout/Person.vue b/frontend/src/components/layout/Person.vue new file mode 100644 index 00000000..e7882fe4 --- /dev/null +++ b/frontend/src/components/layout/Person.vue @@ -0,0 +1,275 @@ + + + + + + + diff --git a/frontend/src/components/layout/Workspace.vue b/frontend/src/components/layout/Workspace.vue new file mode 100644 index 00000000..09320e5b --- /dev/null +++ b/frontend/src/components/layout/Workspace.vue @@ -0,0 +1,195 @@ + + + + + + + diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 21579f32..1839cb34 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -5,7 +5,7 @@ import LayoutDsl from '@/components/layout/LayoutDsl.vue' import SinglePage from '@/components/layout/SinglePage.vue' import login from '@/views/login/index.vue' import chat from '@/views/chat/index.vue' -import ds from '@/views/ds/index.vue' +import Datasource from '@/views/ds/Datasource.vue' import DashboardEditor from '@/views/dashboard/editor/index.vue' import DashboardPreview from '@//views/dashboard/preview/SQPreviewSingle.vue' import Dashboard from '@/views/dashboard/index.vue' @@ -48,13 +48,13 @@ const router = createRouter({ }, { path: '/ds', - component: Layout, + component: LayoutDsl, redirect: '/ds/index', children: [ { path: 'index', name: 'ds', - component: ds, + component: Datasource, meta: { title: 'Data Connections', icon: 'ds' }, }, ], diff --git a/frontend/src/views/ds/Card.vue b/frontend/src/views/ds/Card.vue new file mode 100644 index 00000000..7ff12d16 --- /dev/null +++ b/frontend/src/views/ds/Card.vue @@ -0,0 +1,257 @@ + + + + + + + diff --git a/frontend/src/views/ds/DataTable.vue b/frontend/src/views/ds/DataTable.vue new file mode 100644 index 00000000..8fd03997 --- /dev/null +++ b/frontend/src/views/ds/DataTable.vue @@ -0,0 +1,475 @@ + + + + + diff --git a/frontend/src/views/ds/Datasource.vue b/frontend/src/views/ds/Datasource.vue new file mode 100644 index 00000000..efc34f1f --- /dev/null +++ b/frontend/src/views/ds/Datasource.vue @@ -0,0 +1,386 @@ + + + + + + + diff --git a/frontend/src/views/ds/DatasourceForm.vue b/frontend/src/views/ds/DatasourceForm.vue new file mode 100644 index 00000000..7e6b47d8 --- /dev/null +++ b/frontend/src/views/ds/DatasourceForm.vue @@ -0,0 +1,667 @@ + + + + + diff --git a/frontend/src/views/ds/DatasourceList.vue b/frontend/src/views/ds/DatasourceList.vue new file mode 100644 index 00000000..bcf9f256 --- /dev/null +++ b/frontend/src/views/ds/DatasourceList.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/frontend/src/views/ds/DatasourceListSide.vue b/frontend/src/views/ds/DatasourceListSide.vue new file mode 100644 index 00000000..ece6f551 --- /dev/null +++ b/frontend/src/views/ds/DatasourceListSide.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/frontend/src/views/ds/ParamsForm.vue b/frontend/src/views/ds/ParamsForm.vue new file mode 100644 index 00000000..b9898754 --- /dev/null +++ b/frontend/src/views/ds/ParamsForm.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/frontend/src/views/ds/TableList.vue b/frontend/src/views/ds/TableList.vue index ae7af207..cc371f0a 100644 --- a/frontend/src/views/ds/TableList.vue +++ b/frontend/src/views/ds/TableList.vue @@ -105,7 +105,7 @@ @closed="closeTable" >
{{ t('ds.edit.table_comment_label') }}
- +
{{ t('common.cancel') }} {{ t('common.confirm') }} @@ -121,7 +121,7 @@ @closed="closeField" >
{{ t('ds.edit.field_comment_label') }}
- +
{{ t('common.cancel') }} {{ t('common.confirm') }} diff --git a/frontend/src/views/ds/js/ds-type.ts b/frontend/src/views/ds/js/ds-type.ts index 2fb2ed86..8a022be9 100644 --- a/frontend/src/views/ds/js/ds-type.ts +++ b/frontend/src/views/ds/js/ds-type.ts @@ -1,3 +1,9 @@ +import mysql_ds from '@/assets/datasource/icon_mysql.png' +import excel from '@/assets/datasource/icon_excel.png' +import oracle from '@/assets/datasource/icon_oracle.png' +import pg from '@/assets/datasource/icon_PostgreSQL.png' +import sqlServer from '@/assets/datasource/icon_SQL_Server.png' + export const dsType = [ { label: 'MySQL', value: 'mysql' }, { label: 'PostgreSQL', value: 'pg' }, @@ -6,4 +12,12 @@ export const dsType = [ { label: 'Excel/CSV', value: 'excel' }, ] +export const dsTypeWithImg = [ + { name: 'MySQL', type: 'mysql', img: mysql_ds }, + { name: 'PostgreSQL', type: 'pg', img: pg }, + { name: 'Microsoft SQL Server', type: 'sqlServer', img: sqlServer }, + { name: 'Oracle', type: 'oracle', img: oracle }, + { name: '本地 Excel/CSV', type: 'excel', img: excel }, +] + export const haveSchema = ['sqlServer', 'pg', 'oracle'] diff --git a/frontend/src/views/system/model/Card.vue b/frontend/src/views/system/model/Card.vue index 5ce7cd5d..b8ecc5ae 100644 --- a/frontend/src/views/system/model/Card.vue +++ b/frontend/src/views/system/model/Card.vue @@ -48,14 +48,14 @@ const handleDel = () => {
- +