From c7212cd93f58aa583002006200e02d4413b25a17 Mon Sep 17 00:00:00 2001 From: liuwenxin <1009266660@qq.com> Date: Sat, 10 Oct 2026 16:31:45 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E4=BF=AE=E6=AD=A3=20gitignore=20?= =?UTF-8?q?=E5=B9=B6=E5=90=8C=E6=AD=A5=E9=A1=B9=E7=9B=AE=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - .gitignore:logs/ 收窄为 /backend/logs/ —— 原规则(无前导斜杠)匹配任意 层级同名目录,曾把 frontend/src/views/system/logs 整个吞出版本库 - 同步根/frontend README(进度、e2e 运行方式与环境变量) - 收录业务确认问题清单(完整版) Co-Authored-By: Claude Code --- .gitignore | 6 +++++- README.md | 5 +++-- docs/业务确认问题清单_完整版.xlsx | Bin 0 -> 7389 bytes 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 docs/业务确认问题清单_完整版.xlsx diff --git a/.gitignore b/.gitignore index 2ffbab2..aef6667 100644 --- a/.gitignore +++ b/.gitignore @@ -26,7 +26,10 @@ out/ # 日志 *.log -logs/ +# 后端运行日志目录(core/logging.py 创建)。 +# 不要写成裸 `logs/` —— 那会匹配任意层级的同名目录,曾把 +# frontend/src/views/system/logs 整个吞掉(文件进不了版本库) +/backend/logs/ # IDE .idea/ @@ -55,3 +58,4 @@ frontend/e2e/*.png # 备份 backup/ .claude +CLAUDE.md diff --git a/README.md b/README.md index dd5d4df..fbbbbbf 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ 营销人员绩效工资核算系统。后端 Python/FastAPI,前端 Vue 3,数据存 MySQL,会话与缓存在 Redis。 -> 当前进度:登录鉴权链路已跑通(验证码 / JWT / 限流 / 登出黑名单 / 登录日志)。业务模块(基础数据、业务数据、绩效核算、报表)待需求澄清后开发。 +> 当前进度:登录鉴权与系统管理(用户/角色/操作日志/日志查询)已完成,前端具备应用布局框架。业务模块(基础数据、业务数据、绩效核算、报表)待需求澄清后开发。 ## 快速开始 @@ -81,7 +81,8 @@ pnpm type-check # 类型检查 pnpm build # 类型检查 + 生产构建 # 浏览器端到端(需容器、后端、前端都在运行) -python e2e/login_flow.py +python e2e/login_flow.py # 登录链路 8 项 +python e2e/system_management.py # 系统管理 13 项 ``` ## 目录结构 diff --git a/docs/业务确认问题清单_完整版.xlsx b/docs/业务确认问题清单_完整版.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a992057c04bf8c1125c64b4e5d4f12f56403b452 GIT binary patch literal 7389 zcma)B1yEeewjJDkaGyXJbZ`rUyF+kycZUEWxCR0QcbDMqK?1=Yf(DlaCuopQ?ydLl zOX~irKU3#)otoZjy4TrKy|%I(96S&J03ZX3d}Q^Js*o3EpPm?C0069~(aR3v>F8o> z;^=70;$?3aGY(aRW5Y&RE7zK?TU`kTlwTC(=58ZeK*w}ypp3C_od8-|B;h>8(U5CC zL=e?f5ore<)Ni^9z10WBWh8` zuA(dj9eNsL8e7sDb72mLW+Hd|Zt&tsa7s|Jy?&M11WV8OD)siGoH)61_wMk6?c?p~ z<@Li4^o@ySA_R=^8NU3rxkfbGA7vfoktl^B0tGxz0 zcdHHUedaWEj1&V>o*>uJ6bKSh$DhIwz9E)^&6oL56f#qIo42!Ix08eoCCc z!po#*U2SXnwgim{ji|_l6=-ru0uqVXD*ei2xiw$Y*#+2Jg}J`E+8xa{Y!d2Rd3f-r zMAa6tHV0D_>k)y7+5n=v%9*)%Zo?_Ts}OF35D8OxEkj-^iZPN?>iV$W+Y_lv z6%@{1Cq&EQ@%FwV(lW0*CI)uotjL(jxBI3BT)I;Y_yek8^^aFq+ z_clxj-qr-{FKI-~8GP1uf7*~#5Ri#nNV?kx0-QP}riDRsPUQo861`;k%w?&1;f%!* zA(2HB@m2oPm5Jt*d)8Ely3|%NJUO>|FuqK&QE9k|@9HoZj?_&JGKuQhN0v1)Wt1> znktj_m61nbksS{33d)U9k`uNLXBUEM2kt0bA`5f0Gq3N*-}!S0N!`9`RX?)`9?4c~ zTHy9FM-o`UFz%D#{H==FYz;Ot&(Gf}&p*0Fr_?KnexQt>N38Pp`P?kd!zZ)`y?u zFxe37S7}A~@&c35aEz5EVQSBG?o5(|?qVRw(+1Qi-I&wOU!eIN0FpO)Ovq?&sD*^5 z9V;)mBf}$%Xq{+<6pYAmy0qBi3cqttY3V$S91zh2hO;^CCx2zh7yk$rtxw7iR2bm$ zEr($&vGJmMwU&BGC2U+hfd1x{v~{QahL>7%Z^Y8)lf>6`B)t71XNMy*pe>aYwxF;|Q-PQhkh zw@)0qH4yM?hm?)VBAPH{jnufoG+v|Cm*La$(iFT>C*;C?v9Ld2EZ^?8!M;_dq_*GZ zN7P?IZ{cc5@uk6&|D53UZ10_%b2}BUfwAb8xMV}&7c;aTk{$|H^J>y_e)XXSg>EsU zfI+<}5mx-!wC`L>(2NB8hr00ZMLfDM0$edAJiDEM*;d3`OxtClxSq9`<5?4vlNjz_ z=)T2yy3}HSy{nE}E5X*M$LdxK+NNJ0v1!}Jp#ig?Y0&MxzhI)pw0P-h=I3Fn1ZEpI zicV|qPmC|M_}+SgE}>E2^xGKT1cKOVrW7b!O6thk@3h_c=o?{cikVieZEMY68}C8q=){Ednmu%!jx(HJR2YB z-5VPXhX7lZAatvs_EMn(Cd#EB zESClQ;})|d7VA-;6C_~7c3maeySNIG=(N#z-2&d49ZS7u?4BPRKx%YPRheDhdQM^) zXyPFyzJlhg@zpVY@bDn0uJm|Qv;%2d4DFqBuO_nNmL39Gk!Cp)`I^zgh?>-^--N`f@0g~<6ZY%Z}B+g&x0;R3I+M4 z$Fof=$nm{k*U9TBrMriK!|mm|-KZ;r+XE%oH-uMYZ$BX^-MQ99C7eU<#tp}yuQS0~nDV-@YR*s_qk^?0mAiI{bLV9<6rI30#{KknyIymGlV z|LNo1^5cZ&vO1$$`h2~&e!6RH?$OkYeru~OnR`>w(cJ9HChzg&3{-P0HvedLro*)4 zMI}gB^zz)!h=77%=XDb^Hg$N?@C)U+O{u&)fZ4;)f_+rMI83%5Tea}&-DSRN_=b-D z5!pr}INM`utnyG)da=NQpaOqORH76(D=)FK)HA9MRJdpZm5Do*v4nl{=RtpaFS#;} zaep|@{$o1Zd~a81cmnb|Dfj22hZrWTBAldmq{^xvsigPD+zeM!K^-|+#hM#3;p#=( zf}C-T=h^CD>Y(+0dtd@{hQoTG7yXB;wmiMTwQ1n0cgT?3y~FiUVKw(mxvYpHy!F?K z#mcj?;vIx-qit2Kru*UNbe=USA5(G1jxXD^tJ%Bx=y;0{4Y>;!l|$fH>2rKVtjg_T1H2 zs`4*8>G_F#c*LB4p1j&Sd3C)M`c=$c-_V6`dfgJaJQu^=QK}TUCEL%5j1EnF6%;$J ze2QIcbMHVP)dTL#oxyS{DmW^3E`nE}pmZ(q`f?m8=pX5eeAR}t?ThB9?o7kP6{UI( zm8i|I%~Q^h_CbnoE26fzcBQA;V_K)Xk)d$%?-DnGaJ@p*dCGo|-PpL^WimQbc{Ty;Jd%#X5tf6L0- zuJLi5i;`{?NVW=rM-s!*bd?t9%f8&!LjLqMx9+_^PZX}ykhf@Q6Btlnq4pSxZ!3A8 zENT*`$P-=UdmGf+w5gl`E2}ZnL5?ewUvm-?*SAli&X*H)girlnDHK)B` zrNc`mh1b+cL_TgwxiQSigaiPfVFEvGX$zvlLQof4?%eT?Q}Nmvzsl*vZlR&x`3w@vJGI72 z2Rf^@?Mpra%!zMo-}<*@Lv8eeCC0Z#(BHk4?#OYe4(zk%(;TRYpW>A;!O$`3HuVwk zlGhC!h{pFCNx>=^08(%mB4dS8WPa|~mPf+px-6`NOAH@EYG5phlgHd&3!N*hhPi;I zE-PQX_VSd=GQMW7CwV7(p(>rT!>*XMsY4zSwie#Kb5drhhb3g$$swrNoZ;C?MF;!zi%(+%3aO9j*nlG=C;fTyP|3IL#B3zhsfT+|+_OAaQY1beJb#fU%`Dh@hMeFD_n*d$EH_24&T?}yPFL4 z-pljAR{cbN+I*SPRPkKiNcR%HFJsttPwOC)tzv43YCp$Rz#6*c8f~1;o$(}>^n^h- z6AEk{E?GG6lxWvbO<2PGth$e_I6D!BZZ)|b&i!Erp&dT~4S!K8%~(sC_{WTmEb-^q z9#l&d#*7lyv*J0i+meBST0krG5bhkV(HPiq1Apk9&udJgG{v zlnG-Z(lQz2{q8}Aw@mAjNEIDiX`%7Cgq)&5CNTDr(I-JreNF^@s>(cB4I2!J?4zGn z>4~0z6(eAFaPbG||(zAuDwjSgDlRg%F<>-mmSPe3=0f1zDOIUB9S~Q4ABvFA8)}Qs z1znLZQa9!LSZ7FAXiHN+nFNJ>qix=A#kRq0!JFT`j{(hzT~5pHLD!4IH-`og6|WLS z;ZIf-1_#dyt1rpN(0KKKKD@ZP3MPz_9!;6#ao@#|6)z~Fa`)jpP6-O7(liP#^yc$c$wrwWp z!cATi&RQoPCu8lRcE;hVt*z#N)$ zH^CdfxEEn1O%aN#aZv8|!e>VlL3?p&5+zuM7Y@4bi4ZYFb`eFocHsHFpEa0jS`Ah1 z$%G}A?|h61w&vipo*X6dZjf(##%20LuBSzOVz9Qg4r$ijAjb~PfRR3=c6mXa0imo% zp6!SYXR|SsNRA02oeJvD*fo!cl|+x)kLjOWq&{vjZL`gPrdZT+ScyR^UYdNhTti>w z1IFo2RRTW{*u=n-(o&#pp|Wk{bNI)pjo_hB%YB4q*LsQzVYuL6-I&S*Av@1VC4?qv zTMbQk6J!u7v!PXli;$tUb%V9z5hIv<_fpen(sr;YNe`}CMTkgiYgq~XT>2JVWt+5Gs~{PEuZK$ zARfWRkX+Zd9hgWjJF=jcbZwPb4J=o_UcX}j6v6=cY-YE8@cWa+6>sW?6kcR1s=~)9 zV0#btA*Pp*zpZm13dA!^N@KGh>#~nWz|dj`627;|T*tJUqbmc*MA z@W$hSUaJI(W^6%C&O7faG&+gqOM z;~cv5Om!axVaJzamFO-Qa44ozr9l+2!my4JN(l5XX;SdYm`>kG8_{pHduVZg87A*e z)qL=B3bdeb)3D{K6@qq!%sw|z*UWdR66L|yMB=FZ>JZZue96?8(S7N>(?=^uR)xZA z$Q8>iww>*1Z^MGDNi@xj%a3yzEX+O`Attt-(~uNIV66IrK09uh%IS5icg_%dX_&4J zYH|b9^)vI@5u{M_^)NB+uY7(W^pKEiMt5xR1}~$`DWMPl`yy z0PaLbiaOyZn5~Fc3K86XAo}I{JkR>Ahqs>aa1+Zfq{h5gAnv&6XWLC zfc~&F&tj@wh95g9s98_7ZwdU4A4{@{zZrghMYJ4LXui+D#3eLQ?%HpTaEW-zAT27t z){m#3HOR+3`R$W*D%JzovPzk`vXsWeMd?MwbH1P7#>mAx7Xuh4%Y|i@i!}>~-&`*> z)v%5nIhs1Z_v?)Lq+WZ=O`sWZy`*)=s^vj8?{Ce&`*dD=9DIy^KvsWU%Y01vNC)8p}V}^kL{#Y&4(#VJLHZir>NG@j}ReQZ{5U>xL4+*JF1paivjMQ{aq` z^)b-*?2G;53rggXag402YfH*o!nHy3CTLnV)*jYO`~$}~%16rooQeT|N!+IW=uq&J zy#4D!dpZ>xx|rL!LRfy?kK4Kggq{R0Di3oPS8GQHD2R=P6+~t3VCrc0bdHCD+}$jg zc|k&g0;=YA#%@nDT&=8~T&bQ+99*FwD>pYMeh9?X^hqx>c4cvNGIx0T#lq3W-q`Kw z(Zv$tWNd0{Y-tW*XJzGvJpJQ87@*%Vsnook%>O@#jusZyrsm>~rtbFU4sQPf4EcQq zh)T`a#nRjj3WEHh?SrUf%%C7uc5@zXK0Z@+UUm)>PE$T(5EVpF0P@>@1^+|n-#vq| zd;lWO6PagEsyWHuGQ;1T{&(l#FMb>16%>0}u_dcayp;}kE7S9eR;rD4eP9MC=v40U z7FY@_O}pPU!{$*XQW4m-rhej?nod_bf4FU2Q5ws$47Wz^>^2u+gRKgr@SR_C<@V%S zJ#Iv*X2TCUOJ zkwc!{g%L#)0|nsSJ=V@CjpENfiT3P)O_5r<&1%1Dv++eu<~y8-5Or$kY0MCHw>YqY zc<_dxyjr(<`BmCuA7mHj(siOVtcTv`G}X&?MCW9?kojJ%- zxhk{Ij#oY~m7@JQF=%a1pEQ16p1nX(!rr45&Rsi6a|qr{*x>XXHTNuez0YxTGbORp z)Z5jF4UfeaWj48{ZgW@oPa z4|Ml7w0O&BuA%JS!DYJbvUD8OaVR@dc$TDa*mY0^$DeF4hy5e|-wx{2Ko7 z`#+8UYykaj3IG(mfqi;6zofnYZ3q2n`lojOU#9SXnf|Gy{|WG?koXS(H`2e$ihm;f zsrmhbF#0#bzbb(Lp!|D|{0C)|;J1wVkKw=Pf`1G-pA^U^^8Sy^@F&inq3{omAMw8i XhO!(2;;%`_PhYsFMAY{y69N7QL`5>h literal 0 HcmV?d00001