From 9ade515fa99999d2e738c884d020762de75ca6b9 Mon Sep 17 00:00:00 2001 From: Codex Date: Thu, 7 May 2026 23:24:25 +0800 Subject: [PATCH] feat: refresh submit page visual design --- daily_report/static/report-hero.png | Bin 0 -> 32007 bytes daily_report/static/styles.css | 72 ++++++++++++++++++++++++++-- daily_report/web.py | 18 ++++++- tests/test_web.py | 5 ++ 4 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 daily_report/static/report-hero.png diff --git a/daily_report/static/report-hero.png b/daily_report/static/report-hero.png new file mode 100644 index 0000000000000000000000000000000000000000..0560770a4892b53543810dcbbd908d7cf6561e6a GIT binary patch literal 32007 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≥fKbX1k#tw4$`wlvFu3~QJ`yPhan?c+l%aDpJ zH=%ksuHWd~l#o_C)e(_C?9=-bq(U@(=%p^Ez3#Kn(4kD`jR%I@1M=vdG@FImLHQsn zQfI*;z= z41{`SB*Gjoerld&=x)4Fc#zzT>tofF`?2}tJkE#to2b0B>Yoc}a8_L@d=JesEU~N3 zt10zZKBfC|NV^TJ*g>)>Ekv!$q^rO)IFJ-ENS%#P)kgqw4!* zZ&Zhq_VsbLP))jzbQE_0KkYx-K63ZZ>zsP33UVepPGDGytQAiD!o6Zu0aky+`p$bv zM<_UB`n6N!#=$545k!igd5r*(QWQ^z8>~+=VmQ)35GdUwt;!5PK@MW61OmvbaVC)W zf0j=F{WJpRmp2M*TK@o3T$P>Q8DzDvjGM_MeY z5-yEfHS2$=ycD80sodAM*7v@msNlgm ziW2zy(fahr&JFXfkgLpm}Pvw8)!lGpM85*PUqx-f1{BWuUx^@OzFegEHG zgl4vWaHB7A))t#bI zG#=3TQOH40jliz~WV?x^r8}^T1)~_#ToYp}u&3OyoM@s; z)pI0FJSR-+zttC(tNM!7%z2))B8eW?s1vLnOSIUAJy@I;nCwQExd!=Asmf=qG%vmfD6#+gr9Kc-_xrHAb~hwwi+|b02Sh{n zL&))OLxb4XZjvD7*^cFF+$K4xp%-_0tFC=~G=pN);v~mSDu0IAyiyiGYwbLZ@bfE5 zy{a#C2FHIsq>$3%f6ebYz``y?j7^!+nYpxxW=X=#wlF@d%NWabn|qE3tT=`aPY%s5 z?rKklIhL31_>1`ZUzQcPI9eO4Ya0-tQ=dudu6Hfj5jtH4L76qj@izXvwhMMdVDKUc$O%Gk-rkBZ+iH3U@6C$l7pohGC88uPY;IADfeX=z60+G%1gTTJ$FSKcKD0 z@hH;){NlHRQ@A<9XpN)GKWJfckCUuZ%ALlxO)phRQ5MM4JC!i(yvZB|X_xSMxaBVf zO_jV+21j-fx>i(DCVIz;c7%!h-kRySEq)KlNQcrcd^5B~r<#kZY5vxA|J(S0ENG)9 zl;hM?{al>fM~^MLsQShl#wv!kK^Og67RG8vN*S+eZ}o6S49Xi@N;Bgop4FM})9xrr z`xzOWbIwL3XFb~C*tiE}1&h{HM%_zds7cf`Jt}&;3A+|rQ&blk=m)`hVXq$O!d|?A zG*@45$kJy6c_jt_zb&wWaQIB( z%v;hm!b&Li^dyg?o(f451VJE!IfnFVocSq&Iw2kwP|^h5gY$XhwqLe2@Lq(E^j^y* z^0WKkX6?`l%K0PxQ%4>NaM6u|SXP`N!Hdpgw`bL`)8{R+kSLFL`m`Aji~XMEfd*Fv zez1^b{R?H!hE;2AgLy&_F)ETx5nr=n2gDD;`qJ86QUjcgK^X~I%3l=s{~mk|H=FMX z0Am&moKMv&V-%)d74A^5xSpXe78@sE^3|X}nEEWDYs5VcFS4n{GCAk~lSOq&psVJ0 zynLx0T8DKN&s$c{#y=Hwj!ivcp+q9nzn$EY!x8yN=l`sjr~bZX12)<5KKD58V9ZP0 zru|C(XPM2|%iOaX)Az1Q5mGNLER}U{j>GWJ8}Ov&q3*o?k@~)L2W>`=zTBo@{bjQ~ z37tcSOKx03;f?Rm0nLWQ=%`M>W&&<+ET!#uz<%xXtrro=zic_k|JHnta%{zAqmYzv zTB8|ByAnlMz-OP9-C?tixxe1OIVSS7P~gSj`L@k3t;H<86vy_Ed2NEyD$4RamcaQ`wZnqxyja=n5v_d_JY<6BGP(_YuzuO9uN7<86#Cf4G~2 zJ~JJHUzx}QyhFj?yTIEzDfFdK@roqkh7R{YmWAE-(>$NgX$i1bMY7La-s9>*+$EE8 zt9`p(zFI&Pc286p7tKqQTwpAP7=y$G+PcCBMMECPRNT&`&f%5tv7|f%*RVBO$yg=F zC=G;Aa=ESiUS0o9>05MjP}ygeZ-_fAujWTSK24_gn!Gn~@5|3d894D5R^nSh`^nTJ zsj`C1)duAM#L0j-sI*_J3E@EpCvcaOxpE`D6x&sEJY^9V9m_MCvu7qQZ=l!? zWtsKe_r{P_RdV|%#2>NiUirn~0Kd%TmsOq0&BpuOKuAB>8P2Wf^VpgDHSFh&hTMM5 zF~)7emfXmwiVmtLv&Azy^nzBft+sIBvpC1~P^@(|dT<@$^7a{?V?Y2*l&- zcXRU(8DTy#lj8>XFDalVGUf3`gq!_Qnsy)ul~={ed&O`jke@5yQB5}s`~muzNY<#( z_L7P*pXziWaz`a(x;Ds8eCV2Yd5KD*1g8;*(V0Y*7z1~Ac^Q{ch1Ak*1&b_+lM~~1 zNknaDw|`JSlbHnKHBWpKJDViHp3NqBM!Mj^pGA+RkQ!gs+FYevu)Uh*V8MNkpyF;y zVmTuEYi$)=$Mu6NbCVX5&T*&e?bd#$oJT($XNmFIRR3}40iVbz;77*~n22KcgI2OH zO2`zdQMSE8eVCZMu1;D28{tBToK4!7T5&1(XVQPAfO>k6f-M*TEbok13fV#)*B|ME z&3A??ArQ;fDJU&vSMg-R0bS8%UOVSW28%*53^4>6%D!z}&yKUEk+6Up`Cle@E5^IU~oNUl1kWDEf5=F%`J?9>%=?oA#yPQR8 zX=O3I`2ydjQqHP~eg#Mb-)37CnXNW{a|2h?Z(u-6*1uW;42pN^0MJREm+0u)FTI$f z=#%IkZ%7^KBE^_r$Zau5t+9JqN6Wg)sNTDeUHbw*B!yE0xyiafUNYA}5U*?@euq&f zqoiKx5H`F2{5$0Wx&oL=C?>rB$u0_SqJ^+H8;jJ6ssQdA9h_ToV zU?r-x+mt zLECvNGr|lGk_NUE5PHEDC<56i0CXe_*dzD2W}|~~msM=9%xoz(7damTQZeSzp|+sp z9iU^tw|@ARTx=u9{IlkPG!~Kn3tfU62fLmf4cU{;HSPd}hJO)zFGpv^_sL!ex>n;F=_@CyebRD&N}hg!%&^PQ@??B~Fzfq>Q3b#> z2ZP={a{!SA1!%&MC_WBUoKT%x;V9~Al8r{flLdPGVeN-T7|i4Q1#09A*o~=5PLOS_ zM!=fsgvlJA#6KL)j}p=>g@#~C^@-UieDUfnpO`Y>W9pHJ*{@&Rt4!2?4CeG@bmI8m zNb9tFq`KyGynHQiUgl|2U@;?rJ~sh0v!3ljrxD_b8x$7|C}XSLET=C|N`X>fC+fny zAHi<<)J!Ia3GV6jhj~h+kVyNT4)7vanUQCygK*ob*cw5O*wA?S4f_2YB;dvnMnv)V z!Eku`4MY@LY7;L~DBJoxlCih&&6a0z*c~!Qg2*BicPg#iHJWitMXZcSsegk@zqnsd z0>nV^7vvGfMDd}ZfxZ1x%5D}1C-6otK`=L6H$@ejApF@0o=pE!s1p^7^S+riay9$+ z902rUC|;kLi{H(57ULpvjRr_?l&x^E!XAj+I8Qts)!mp~@pmg{=v1rYMz2g6krz(`@1o4{hOS3}luBNR^Y znm`xDJAskO0Nnt|U3|Y8cVvxHh+nqA*{N&Ms-(>XB76%yeaU8BRBwgz@#)6FKxx^> zjF~VQspDW}EZkPW${YpdSgw!lZl4tE%jdD*h2YeeX%FrK`szvrQzD$Vs=xJy?8djU zlhPuN%V+<3x@Za9hrR<~lj?WF2GFESY;5?^Sq(v@Osc+9b`9e(-&XCQVt4cd!ssl} zTf0V{C&K6FDQ(#z=B3M-@)j}WV~5xX26j*Wn#Ka=QCNWtC8pbm_r(&~pu?hWW1 ze)17vOAhLZ>riw;wm>#r?BF~z{yfMFbzQB80s4D^jZIB!Qt9!Fa~b+kH-f~SMy72G zb?M`L&?6yG{%w*DctkrXqqF_k4eS9uORB0wyK<|+fCAFc=q%I@6s1UlgNJkkImsQ} z$agnFgpmdM{2M1tU9o4+uYyi^+0AU@x)5usE5C>Gkaz5x{S~@WOksQA@1jq53Gj^h zXWqzc)NBd&A5C5Dmbi)LWy_0~epeEkJOpa!T&{KvRw@<#T8P;qY)Zbd$(?# z;z{cb(sg^#+HCs!VG1W3+dYU2a34;LE09x0wvdcfqTj&;KiwoI82m0|X2ArN zoi^x+R}9`P;)ZYn9B|m$lF@;MHjOq!>Y&wMo}L4x(vGjru+Ipm&=gCog+AkOC3Zp` z-nk()xPu98$_+RE@-RqAUN0;Rsc6BGsOaL5lnuM?LgY%kXkm@Ok&(P2%7IFYp;3RG zL(p?!9B=82P#+rQmPAp;LI)n=Z06l9EqSPEij)__Sc{X)%mExFC2a6<=ZjDx|mw0)TH#plF*~MVq-+iT9f)^fw-6SewPYmND^XYc3 z%~wmd>mwF*Q zzz?2NnzG@(3sX}h|B)e|0*uQM1S=|EH{N`7s;@DS6=8`VYHN9YiPoP) z`GC7pw-E;5;(k*6E+=jxBZNDCVkS?d!9nEra#G5{a6h$Lo+zm{{Z{UJZ|*ZmxClg0 zj02W)aDUW+c479`wcLjWyi>^lploZ^cTnb6*ZIpDZM=Pp2TuZhXCm1%D;4Me0I3&F zf8KkEcnJ|e0y>k-#mi@XfRHUgUx7r^mz)m-fieHCxVQ28`@(BFTXcZ(zAqi+(?uCi zz-ZvKdSs4JJ|y1H%ReK(+B=>bX~*i*cAwlzrHg*oPV4wrCL*Z(1TY-gzMYlc&)_SR zYk6p|LcbOXphCjAuNd1UZ)vNSK5Chm6)e+B z2jOCWn~b}{N`0a4SJxVJ5hbP93DGh8E1U>gBgBKZ^dJ0vzZmU;PQpax!P@G{9Vh*4 zX!TAiZb#aG@auMw8NVy6xzRvv(xYgFRGgQ$>9YrY4xB3-gbol-p&I3y;mcpm_s?dp zduTl;1>RRHA(hM%NF2O{h7RSOSzBj5X8f-12u-@l*6bGo4zG;Qsbm1M02HX)Sj_h& zcEHaVD$Dcb>3t&Mk2nH87%l0oP8FJZyTX}|L0)cSXv?I3{eruq(%1+u!*%JTLF$^` z?!Lo05kZ|y6nMsL;~Dsgpm7{t)O(g!<)`=z%D(c@A_&8Kc(MmtEVtI~@uB*gLaZe4 zWxO^ciy4G4A}5ct)ndZBx`I;k!$V~^igQB4SA+L!UAJzuRhh>ghRS%Z2!QH`dBZXu z`-nh#pvP_M$Q#8;vz@%a8{EMi-y^e%*D3}T>aJViy+G~C@rRL^B`>l4ugHoOZpZHM zcqZ^V*73zy7n)BA_4SM{O}j)A*(2Pi@GZ4NmqfRcp~=XGCWGz9r=hUZ-uKv*iSWY< zbrE9pZhn6L;e2TJ!1Vp!{Re*f|Ns79n}M@@Ki9X^D@Y}a4!jD3I byt "每日报告", f"""
-

每日工作汇报

+
+
+

今日收尾小站

+

每日工作汇报

+

把今天的进展、明天的计划和需要协助的地方简单记下来。

+
+ +
{identity_html} @@ -506,7 +513,14 @@ class DailyReportHandler(BaseHTTPRequestHandler): if not file_path.exists(): self._json(404, {"error": "not found"}) return - content_type = "application/javascript; charset=utf-8" if file_path.suffix == ".js" else "text/css; charset=utf-8" + content_types = { + ".css": "text/css; charset=utf-8", + ".js": "application/javascript; charset=utf-8", + ".png": "image/png", + ".jpg": "image/jpeg", + ".jpeg": "image/jpeg", + } + content_type = content_types.get(file_path.suffix.lower(), "application/octet-stream") self._send(200, file_path.read_bytes(), content_type) diff --git a/tests/test_web.py b/tests/test_web.py index f2e72b2..d86783f 100644 --- a/tests/test_web.py +++ b/tests/test_web.py @@ -66,6 +66,7 @@ class WebTest(unittest.TestCase): status, submit = get(f"{base_url}/submit") self.assertEqual(status, 200) self.assertIn("每日工作汇报", submit) + self.assertIn("/static/report-hero.png", submit) self.assertIn("今日状态", submit) self.assertIn('data-list="today_done"', submit) self.assertIn('data-add-list="today_done"', submit) @@ -85,6 +86,10 @@ class WebTest(unittest.TestCase): status, manager = get_with_cookie(f"{base_url}/manager", admin_cookie()) self.assertEqual(status, 200) self.assertIn("日报浏览", manager) + + with urllib.request.urlopen(f"{base_url}/static/report-hero.png", timeout=5) as response: + self.assertEqual(response.status, 200) + self.assertEqual(response.headers["content-type"], "image/png") finally: server.shutdown() server.server_close()