From 839639bcb855f933d924ab00997f5980f1464c27 Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Thu, 29 Jan 2026 16:13:45 +0800 Subject: [PATCH 1/3] feat(User Management): Supports user synchronization --- frontend/src/assets/img/dingtalk.png | Bin 0 -> 966 bytes frontend/src/assets/img/lark.png | Bin 0 -> 1010 bytes frontend/src/assets/img/wechat.png | Bin 0 -> 1345 bytes frontend/src/assets/svg/avatar_organize.svg | 11 + frontend/src/i18n/en.json | 14 + frontend/src/i18n/ko-KR.json | 14 + frontend/src/i18n/zh-CN.json | 16 +- frontend/src/views/system/user/SyncUser.vue | 365 +++++++++++++++++ .../src/views/system/user/SyncUserDing.vue | 377 ++++++++++++++++++ frontend/src/views/system/user/User.vue | 196 ++++++++- 10 files changed, 989 insertions(+), 4 deletions(-) create mode 100644 frontend/src/assets/img/dingtalk.png create mode 100644 frontend/src/assets/img/lark.png create mode 100644 frontend/src/assets/img/wechat.png create mode 100644 frontend/src/assets/svg/avatar_organize.svg create mode 100644 frontend/src/views/system/user/SyncUser.vue create mode 100644 frontend/src/views/system/user/SyncUserDing.vue diff --git a/frontend/src/assets/img/dingtalk.png b/frontend/src/assets/img/dingtalk.png new file mode 100644 index 0000000000000000000000000000000000000000..44b6cf077bf0f2085f557ae876e5eb44bb2a4db5 GIT binary patch literal 966 zcmV;%13CPOP)aAuVXy#sm)%+yZ$ z9?wa5q+&~MKl0GZH-J?4sm}fHdEO4NV8Md_pS9Cp^|iC;dhImY!JOgP7%{<@e?AE3 z^CpCBjAX$d#PVR|atNYk8D8s4jY7-_D-Q@k!Zjbv^@zLI>y7Aqv%x-QfRzU-jUT?l z?)BJ*5t;;QeXEr&FeR)6C>r}fKNoBW!8pF$FE=q^>;)v}!8k(k%0&sK<4NU-wSbq6 zZq+b%kP#Ka2CbsKVl6vyFMGLh{u-Y+m>yfX{fX^H35nqW+KzAO4|D5&~sUA zMM|h|yWo)(H6_n>ZOuL8M8^tgY@NYYNa5rAg=E4u_V37)1H<%wdRpp26an*bkaDOi zB!o6jr9%UqOd<0?c)3?zK}vFaK>4~~4sur|LaNZYqYwc~zqC@kC7rkR$4#A+z%mk; z!=(P9jZqsUGEhhejWP%+-qwnwC$HX9F9>$&=5NEGL$u|=3x}`S9&mD3p(He#(4(5VC<>dOg-g!)gCX9hOX0fNZrt#v+VSvTkC^)CA~p zbnH1oD$z{(fGxxCPa`95xQUL2R&pYh=si+0RRP0{ykiQ@QfXBy6;d+Y92i1gq1=a) zOrKj>7O%`ifcAs?u_MF$Gt5i`#643TeBySRl9|Lz1d!vtg2p|S50R6Z2w=mNEG2U; o(D+|#$Zrk*Dtdy$f(7%#Z|@RcP;FbLRsaA107*qoM6N<$f~m;0(f|Me literal 0 HcmV?d00001 diff --git a/frontend/src/assets/img/lark.png b/frontend/src/assets/img/lark.png new file mode 100644 index 0000000000000000000000000000000000000000..82edd33c1c15a8c192b0afb0abc4067ec0cc0f8e GIT binary patch literal 1010 zcmVI` z6G0Tmzq4CFNYDmM{1G+F#RN4{!~-5Q<)YyRH*e6yAJ_61(Eb62a^hk_uihXrA<-B% zK@$%ucpwBXUG$(PG*%!L=(gjVwriID-r0qV`$-12JF~m*JM-SW$pd_Re0+TVXPBeW z>q{{(Wg6}=5MblDdVdWraV9|EornxrVG#YJ23(-PDc46yKw$)87Tpm9SLfjp=K=)% zqq;XDco^%iCgB3-E@Wq8Nds4w=}Ln<20F8Y=o`;K0=X5i5dQ0aB{XEaqL9R$0D%`G z7$zWzdjSIXA~bBg4nqQO1PK0#U{byeo*#n*RY5!)^R~|*IpLJbGh!~pUa=|5%9U6;QvITU#_=VHYeztBrW$(PI#*e(G;c$-R zttgk<;#fXXFCNsiSv0)!%?_MEt`*NzxKPs|CRdsv5zfy(#WN0%RNl6XSHB&?5e&xm zyQhiD+b!)vBqBz!F%ycG1FKc8Jy@{2l4ZQIZ9;;0t(z@xqZAWS6<8I!6r50YC0EAN z?59_rBx`j!%>!bKU3C-} zgAAqF@2l7CCKHEgHByZNy!Y<&v7D){N*iAy-l)^f3fM8|nfRv!ONt*_cs{t3H>YXa zlRjmZjALutZyygf8spVjNTZpUAByr+|72=r*UY8d8m|O8U#IPQ{5MER=a0> zo;wpm3ml68R2U?hz!GzqO&6PmnDO?`9t1BAiLpkW4w9|D|JViCv5OIy2fJi^I~29U zx|Jd0$Jd%{&2~;yK-I^O#)vR}gp7Ao?5YZ4(|x^12H`e?PK_5-2`De0j+0}dY`g&p z>ehuQp~WaUc~L^FM~2=%WhFmZ8Wy(b_^iIF=wF#QF5G0@v=>=esTG9){ZSQqPSxlH73{e~4rLv-C8zPJov%E%qTXe0HkLz9< g?c?L){*iD6mc2ApXxzqgxO#~}(>#pE}D8y+%9Jf8fA~pF1DJKpf zB|U&v0@T3%fDIS+Xd^B_YY*>hyUEybVmootmB=Hd$&6<_@7KIv1=d(&jWw7W+Kpsi&L`oK8i$m zRHDAdDzv6bYwplHsxc=FNgLbqYGXD7Eo+AkJw{mSHq9Lo!6%t7C<{Ztq|a{T32UQH z+BiW*OlROTYnLR~j;v-$*B7>3U#pKu5IdoHtx&`Ms~u#3n0kPQGpLf6XriH;$P-PA zwb4*!Y+`IXi)JSoV7v8+HVvP{NBj ziHMp|b^L^+pF^Zf4U^8|RO1qYB7O>t8Tj1dKxK@^(#_<~a)B0d+hsE8O7fOVIFTrs zbJCRx{+VOD*N}k$srY=(9IpyuluI#9M$&Ti4ycP$`QRmCe0D*5BWbY~yYVXFctKN8 zMBakyo+d3Xj(%lS-7-+=q3pW)uKb?P7y9YbyOCTh24fAV46r$IO0i-%4!TlOwhGiZ z3%>DPax752P(Siy2P*_gpFK`hos%Ltr5H27VOuCnOy=y%M%*1NSH7KX&f!R`MncX@ zxNu()2HTzqPXtf5Nai#Hlj-z<#mSrzj54LR^Fp4{c`kZn#`kXgMW#f;69RXn?@a6h zd8B~B2~4KbB9v5d<#dcCLjFP$cBuZ4I2CVUz@F#n+o=6^7n@8AF=D%Px!FU-?T@d> zn$}?`nc^H}U(YSAmOq7x{Ho^xHEfBk$$LPA8!l_dMd!62o*n*;YdabWgCEV;2h$nw zy9vEeCxX)phswPL%}M_3ReRwahb8^ybf3@CFAlnu!k@Rh0Vf%esR-7 zv^ra$F80htMof~VPsDE~?Y(XOaV8<6$=#+lbqD9?E=gQh>Ig=C!Y=R~o^s=5y}J z@}53@nk;qo`D_N*R2Jw=OtP@rN%ygmk8H9t@KG* zozlxV5r?n?)8R{BC&Jrtd(-qryAy;0)K#Q0 zA-~1A1j1FE-}lTX+KK3w9($f}D)Rdm(}JM8z#gp^nYM`mebzn=F9?bko)?O0H?g_! z!Z0A(u;~InltHkhByLzNU^Q*cydmGenwor#|0Vtd#|WU!f)D7t00000NkvXXu0mjf DO|5$i literal 0 HcmV?d00001 diff --git a/frontend/src/assets/svg/avatar_organize.svg b/frontend/src/assets/svg/avatar_organize.svg new file mode 100644 index 000000000..2fe6321ff --- /dev/null +++ b/frontend/src/assets/svg/avatar_organize.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json index 9b395f21b..91a95c007 100644 --- a/frontend/src/i18n/en.json +++ b/frontend/src/i18n/en.json @@ -7,6 +7,20 @@ "AI Model Configuration": "AI Model Config", "Details": "Details" }, + "sync": { + "sync_users": "Sync Users", + "sync_wechat_users": "Sync WeChat Users", + "sync_dingtalk_users": "Sync DingTalk Users", + "sync_lark_users": "Sync Lark Users", + "sync_complete": "Sync Complete", + "synced_10_users": "Successfully synced {num} users", + "failed_3_users": "Successfully synced {success} users, sync failed {failed} users", + "download_failure_list": "Download Failure List", + "sync_failed": "Sync Failed", + "failed_10_users": "Sync failed {num} users", + "continue_syncing": "Continue Syncing", + "return_to_view": "Return to View" + }, "parameter": { "execution_details": "Execution Details", "overview": "Overview", diff --git a/frontend/src/i18n/ko-KR.json b/frontend/src/i18n/ko-KR.json index 115d0ff57..1508b9b49 100644 --- a/frontend/src/i18n/ko-KR.json +++ b/frontend/src/i18n/ko-KR.json @@ -7,6 +7,20 @@ "AI Model Configuration": "모델 구성", "Details": "세부" }, + "sync": { + "sync_users": "사용자 동기화", + "sync_wechat_users": "위챗 사용자 동기화", + "sync_dingtalk_users": "딩톡 사용자 동기화", + "sync_lark_users": "라크 사용자 동기화", + "sync_complete": "동기화 완료", + "synced_10_users": "{num}명 동기화 성공", + "failed_3_users": "{failed}명 동기화 성공, {success}명 동기화 실패", + "download_failure_list": "실패 목록 다운로드", + "sync_failed": "동기화 실패", + "failed_10_users": "{failed}명 동기화 실패", + "continue_syncing": "동기화 계속", + "return_to_view": "화면으로 돌아가기" + }, "parameter": { "execution_details": "실행 세부 정보", "overview": "개요", diff --git a/frontend/src/i18n/zh-CN.json b/frontend/src/i18n/zh-CN.json index 7917701e6..993768df3 100644 --- a/frontend/src/i18n/zh-CN.json +++ b/frontend/src/i18n/zh-CN.json @@ -7,6 +7,20 @@ "AI Model Configuration": "模型配置", "Details": "详情" }, + "sync": { + "sync_users": "同步用户", + "sync_wechat_users": "同步企业微信用户", + "sync_dingtalk_users": "同步钉钉用户", + "sync_lark_users": "同步飞书用户", + "sync_complete": "同步完成", + "synced_10_users": "成功同步 {num} 个用户", + "failed_3_users": "成功同步 {success} 个用户,同步失败 {failed} 个用户,", + "download_failure_list": "下载失败列表", + "sync_failed": "同步失败", + "failed_10_users": "同步失败 {num} 个用户,", + "continue_syncing": "继续同步", + "return_to_view": "返回查看" + }, "parameter": { "execution_details": "执行详情", "overview": "概览", @@ -889,4 +903,4 @@ "to_doc": "查看 API", "trigger_limit": "最多支持创建 {0} 个 API Key" } -} +} \ No newline at end of file diff --git a/frontend/src/views/system/user/SyncUser.vue b/frontend/src/views/system/user/SyncUser.vue new file mode 100644 index 000000000..84b8526f4 --- /dev/null +++ b/frontend/src/views/system/user/SyncUser.vue @@ -0,0 +1,365 @@ + + + + diff --git a/frontend/src/views/system/user/SyncUserDing.vue b/frontend/src/views/system/user/SyncUserDing.vue new file mode 100644 index 000000000..940267361 --- /dev/null +++ b/frontend/src/views/system/user/SyncUserDing.vue @@ -0,0 +1,377 @@ + + + + diff --git a/frontend/src/views/system/user/User.vue b/frontend/src/views/system/user/User.vue index be56d30f9..c6a5b77f1 100644 --- a/frontend/src/views/system/user/User.vue +++ b/frontend/src/views/system/user/User.vue @@ -23,6 +23,25 @@ {{ $t('user.filter') }} + + + +
+
+
+ +
{{ $t(ele.name) }}
+
+
+
+