From 4c7f8126e8bcd3f99f904af6ad2c0a1ce4d8d648 Mon Sep 17 00:00:00 2001 From: jeremygan2021 Date: Wed, 28 Jan 2026 20:46:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=92=8C=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ket Registration with WeChat H5 Payment.md | 52 +++ __pycache__/main.cpython-312.pyc | Bin 37904 -> 62991 bytes config.json | 24 +- diagnose_db.py | 61 ++++ main.py | 344 ++++++++++++++++++ requirements.txt | 2 + templates/admin.html | 91 +++++ templates/index.html | 11 + templates/ticket.html | 305 ++++++++++++++++ 9 files changed, 883 insertions(+), 7 deletions(-) create mode 100644 .trae/documents/Implement Ticket Registration with WeChat H5 Payment.md create mode 100644 diagnose_db.py create mode 100644 templates/ticket.html diff --git a/.trae/documents/Implement Ticket Registration with WeChat H5 Payment.md b/.trae/documents/Implement Ticket Registration with WeChat H5 Payment.md new file mode 100644 index 0000000..21fdeb2 --- /dev/null +++ b/.trae/documents/Implement Ticket Registration with WeChat H5 Payment.md @@ -0,0 +1,52 @@ +I have analyzed the current project structure and designed a "Check-in Large Screen" (签到大屏) solution that integrates seamlessly with your existing system. + +### **Plan Overview** + +I will implement a **"Galaxy Spotlight"** style large screen: + +1. **Background (Danmaku/Floating Tags)**: + + * `Business Scope` and short `Vision` keywords will float elegantly in the background like stars or drifting clouds. + + * Uses the project's blue/cyan tech theme. + +2. **Foreground (Spotlight Card)**: + + * A central, animated card that cycles through checked-in guests. + + * Displays: **Company Name** (Prominent), **Guest Name/Position**, and **Vision 2026**. + + * Updates every 8-10 seconds to ensure everyone gets exposure. + +### **Implementation Steps** + +#### 1. Backend (`main.py`) + +* Add a new route `/wall` to serve the large screen page. + +* Add an API `/api/wall/data` to fetch approved check-in data (filtering out empty entries). + +#### 2. Frontend (`templates/wall.html`) + +* Create a new responsive HTML template. + +* **Visuals**: Reusing the `radial-gradient` background and neon aesthetics from `index.html`. + +* **Animation**: + + * JS-based floating animation for background tags. + + * CSS transitions for the central spotlight card. + +#### 3. Admin Integration (`templates/admin.html`) + +* Add a button "Open Large Screen" (打开签到大屏) in the Admin Dashboard for easy access. + +### **Technical Details** + +* **Tech Stack**: Native JS/CSS (no extra heavy libraries needed), integrated into the existing FastAPI app. + +* **Data Source**: Reads directly from `checkin_info` table. + +* **Compatibility**: Optimized for 1080p/4K displays (MacOS standard). + diff --git a/__pycache__/main.cpython-312.pyc b/__pycache__/main.cpython-312.pyc index 914a9bf5b24c68a43b56f423bb878f5896710f8a..664b0f1f0543754a236985835cb68e39ab437499 100644 GIT binary patch delta 28474 zcmbuo2|!dw)+l^$Z}i>`-A%L8AY03h;Eo1CT!RL1BO20h8%5c2yHO#Hjm9JxO~l+x zL}MamG6@+?BttTiWfC>X#3b|mUw0q_)6e-o^FBd+Z@xEZoHsMcEbpAUeY+cCzW3h$ zU&HCTRi~C)b?VePr%qLR2Si8zAkO$wqft`u{1>{jvF|@9>fiB2cr^aNw^6EN8UOXZ zMvBoeT8?IPj2>V(69Le`7y+7?NPuQ03Scx712C3}0~pUF08A87_UN5uTzI{~WMPud ziuiINB{`VF<%(2Fh)NAcnbMf_5af)I6e}}3BqcML;?A0uC!5KEGII&cWAY(fz|3KC z;9ub>F;f%>&4tiB5;s2(S`Y{=41^Y)l0kSe{0aYxPf3|2%+ga5$bTPGQqGi+f6JIs zrVNmmpOXEIu9?M@AEathm=yr=15?iWyVjNlZ?y1Mlg`L&8TRy@RoGXtE6>tA8nfyk z6~LJ-q`OxK($|EfXTmtG-A*z0zf8mDRzPSS39X0F10+-lp(+xphR_BQ+6bXdB(xbq zTS%w|LJyMARtRk)p@$$;OF|F3A!sAPItbO15Cb7Q2{k}yI|=Q8P$LQLgwQS$YJyNR zhTym5WrVE+wh{OUfh>Uz0-Xf5zf3c`PsyP}vzR^hHQCHwdp6Ty&uNe`od+c~xy+;R z?t;HAyU89I4V?$6kqvTYAEf3%-{v!J7=Z%l^8%qiX$tytJNCD`8{)&5{pSt@`gQ-g z$IgoRF`y|(RWJvGsWpWnY6ZnSevo3Guxkapnj#YWB*gZF#Li_7LCy1+rvT0;?d-5; zH%OSn(6R;0@0la^>}2L?fAjG(I)qPXP%_UPl-4YSX70geK5*2oI@c>uKXc43ZV)lg z9+U_lRI`{gfP)4+7t(-Y68jT~eLf_1iBM|l@q3io7gFj{z}%1ZC!Gj%&q@0dsQZNw ztdaoMsSvDUzeXg&jqY^La^2f?MnUSJ-*;V2mi+|p8$jn^yn|t)%zl5}T6UqJmK<E z0+{^#9|^&#u|LR+?#iGj_F;x%WKCOZwvyj%HQS(vw(a}?XL0z~=YA`cQB!NL-FXRP z&0}^OGtT_(obRkeV0)1EDR(I$ro5&evTxmag--~D_H^dI*z0$G5gNyb&s`PxB29J3 zI%L-Wm+O@O$2_0PzT4j7taUazo9yjIz`g$7v5BXTm#mt2{H+_$ot}8*wd)_8^yzpk zM|&NQ$#pC8)jp+=x7p6UrHIk{w0uNUYrW0c*xJHrvV7|Lb(PgV zNm1dP0+OrUVP{FM4OPo4eUj}CW`|FO_%?@QPbnh89Vfh7f2ntr% zVr#aOtQ95qFZV^+TWobrcIdVGU3O>fZd+3$V{>EYR6}p^X%0KIyJfpi?QC`0nrfYx z!Es9qV{r>b!gd*eiPyM^-lwf%pR~zVXK(UJ96MU~_~fkpk@iN`&a|rmXY$bD$y4u5 z9KCR(e?N(sc={*TfAuuvyYbp!IVtAm{v#7lomtTyi$y+uZsO?h_2Kt#zPkU$`$uo~ z{>+kVxjuXn5ZVopUXWKXcjDc*`IyOrA5ES(Z!%$ugg`(P?i6G6C9b0Y=eMZ}&-<#(F1= z3*F$8`A0#FV=9GN+HUvJyL|L+2X>_eAC6HkRMx@UYWQJ;H76 zDZieOHI`7|O(^(nLg6uGuef)^xFNEy;VVPRcyfAgdEcC8*Gx&N#G)xBrH}8Id39;$ z77jKHZ}ZMw^PB3?%*v~Avj>X3aSO)cmU`os{x+`USXpmL?<3>psD4?0m)BDCmAPnq zPGO&{uge>iJz)DPDsSs;DHXqro{~`!iTw@U@T{xWdBYm7wY)d7PvZ?wyJm>~b0Vdk z>(vz9wNUC9k0kofN$@VbeCLRQZ~0|mX^i+%W{C)XF6YDn{5VEhn!){3{i^JKNM|d! zvznBp)flWoumJ#cUVC$!Rm5(^m3+lSB>l zKkIC7t0fBq%R+J^SET#RoE8YNP6Vw8+7LW~fMnA;cCmA>R8mURljiwIsqa2i2Bf-?wSM({iU ztL9G%__ijG+EB4nzzmNY|WMDT#s!!b9*kV<(*AV?1?j6fQDZ35A++9m5ZR28+ zVx)KB^~BJEBn3@BGE|y;NW73;g4nob_-G4RK>TaR$4lA2VyqNaB-YM;2jT4}PvG&N+-{Ta)bVhkf+C?cSC(;T&-1%K5(M~l;qQ-|CDHrt${S0lRoUk_V z52JEXj2b!q3t)?au$B+MC=oCW@ zN5XOxEM4cKg{EQ&4An*NqdWY+d+0qBU!paBdmGAnK24bo z7JZw;zMN%SS*ysW07=om=1A=rH;sL&8(SKkwM0H`ZDKQ_1||GCd{AmPH4zp$B@!#b zuc~9m)G1zd%BVW+u96BjA6Fhz_ATh&HKKPHT-8VVUmHgB*)!gZF~?UQTiw?+&^Th8 zf7SoiF_1Q5%)hOYh0D5EP3a}l;;S*qr?XFFkHswU;(wJ_6aad3SLGUyzU<V*;*Z0kOXrF|wx~<< z#UJNOA`tA&>zIpb_^(j3S|=3hmKIEh?=mnoGrXUw!#+=2+7uC~_J0zw&4PaL(i zdk zs=Q1on~I^Hyks?-f%(%Bv~s`BD@?HAw})>B1%xNN7JEICCA$hx=F>w_`B&(K*Xasa z&apIhDF7?YmcvhgBmScxR=O4?qYVNP9~I21Eboh;=FUL^AyOAx)d%sBPSsxgb2H0r9!9$Y@J;y;CVu$DVKty z>x^m!Z0ka+Fd_=f?12cOt}Zn+tgA4U)^k5C%vXh@?0KYJLb;@Zc*}iXXb2;uO z3RgHoK9YxB5iMXN?lQQ-L8t~zib(LrE)!$wigcNnaI6ASBB4{vE;CdkbDFvDi_+<6 zZq{5Ymps={#zfAj#4x=AVDk~c>~$}StEhSr4S!vdJwiyc2bjH6%l&k2K5ZWQdhS7b zHk$=?Ruk#t=953a@!VSz!*8(J5Xa^qSdJhUfn~@(|5-W`*Yb8;@Fve3Vb>uUt_Q%y zE?lLy;2TC&ux(u1LL;o6k1xytndt3>51Pr;p&?NqRV-6Xb002BN<4+pxYTr0{Ym{L zFQH#yyBJ?f0Qlq$ zb|)xiusVQr(AH!FB}2Ipl?lT3iJ-&&0jttt78Gb$4TP-G>8!zeF~x| z*0!`a`=BC*t>)fX+`r8R*?cN6L^N)1sYTlX+Xk6y;LouGzN4GEYoyc>M;9Ji=!r}l zkc_Ib$8|B+4Uy07KHhn(vp;7rdBj{aVwl^#_Nvi*N_JX#LfOA`aM?)IJXj5e_7-P~ z)~|vpE~RT$WJoR-l}J|QbJb@eOR`QrY&4tdF+A*puO!8P|xJa1Cz)5c~iyp zkIqc)KhMgir}0J$f0~_ZE03+00R}JqU56q->O}VIlS3!9JDhCCz19Jrve^cMQ|s&i z6`V+7Fi$|;z>>)81iWsCKX^P#*>>)KlwXJg0p`c);?jzgn12F7kiu5HJewC1SqaVk zb484vtO`X?qJMeetSjSVNF=E@Bn5Hia}TdHR-^1d$cf#8wd)WdmGJa}l;e}^Yz1jK zoTnNT4cJEz5K)r|oe$%y4Z#isb=;Me`E)Dy-O4!G9*A&+b9u$aSifF{>jI%P=peg; zbpyhCLu*#GiGa<2u;%3|ka!PZDX8kbE@A7iePjycK&($+Z3m+cs`7#;=4m5I>83 z0>P62Lchbn+8tmos<+qjwA2QMNA?&XrHHukigeoXi*7v z-GoeKZ7_OH2TPa^HrXoSjbS9?OIR_96|=`N9EU)U02kz2cL7+9Wa(z_!&tQ9@brSY z{5%M(bL=8a#WkB%Aqprai4;#$sA&6SV9jlAbh4;~u=^0CbAQ;7T#1s3RmDDwF<2u{ zWuz4$3Joctq21XI`W0#1N<@7bfCFo@1RqeR9^Pn_y$VSgqM^=>8>RGfocF;o{qvaP z1cH+YUK$$Sx{offU>Lsy_y({D6qF`U{d}V5iCd39J@MXaV9n&kFr!!U4HedYO~*bA!Fu=$Jh)Wh68P<3 zxD?wt`oD8tTO+-fJHyOV7zHHmn|f1Xh%V=t=fu^WJd6TFCTeFa?h>dSA{W&{GfE+% zfb~Z(s#79HeM)>zBZw4L)U-0Rj1DmL=fb%s>k`8vc9lV|WnwE#!J0s_a!D8imcsqD zE>jf{PZ$%ITOTitbcq==_dxwTMHFU&hD3A6>Wg(Tj8YJ;uyNe)>!TB6gK=F7Cu(%$ zafP{Lq!bg=7#&hG#K|E=$;6$KLhZ+ylA`IU3MPK~*MV%3Ae5Q{6wsw&5}Zk##-6(- zm^0Cd>IZpTDxqf@X~uFcTxfB<2$a#JF4aC&mH#(H8BOM%v@<~3f3VjrVl$zf>TF6E_(?Qe~z4d4`u`azt;*zjRn0#WS-Th!V=R+`^#9dOSMkv}PWh9;OB9L;I zjFEPQK|NY-eRH%})+L8hBc)`Paoss4Zhn(FQQik>0zFeRrkpKv*&5GF*I z(xqezNb8g?F?Yt6S)g*Mpmi#~O`vZ1L(n=Xsio{c`%Z@yOOoJjgTFzM5e;IYE@+Pe z6c9Dn+Z3tYOFKXZVZvUZUKA647aOk*;T$5DTFBO=VKiM@{8X_^E0h~eYq|d2COQEj zx31X$0P3o>D*g&@e8bhEVM9k@SzGu2L!JEMRBry26=o zXEx_)j-_+44BE>5Yn^FpzJS9-FoqDi2p7tQ&J!_4VD+YRkwSM776;1bzHnf1gD&ZulF=mo16K8Fj#rjZ_?Bp8E<++8xS>&tWpkX~69-V>lq_`7{lUEwG=7``OS# zY#pTfWVmw)JD)1-HdwKm@I?n3X|TCU7;>%SktQElEqV0|x4C^9GB3 zT3XslU)5PgbjdxEac#uWU59oZZtf9Zi%J=b%JN2K^=M$fOdU0*O7yA{$5gYus@Vhc zMpbhlR--?<=Fl2XRKuux`*?)uc-FBjE~lsTcZtdUj)8plncbfB1-(^$;m>Xyex#@T zYD|1zL;oWucD|6?vt~*rPSp3TgU!9TjIr24Z*1XLvE{?sp0(H1IxMtLH?EHz*T;?N zlf3#Q5=i#ylOZsrkj~cLrKB3&l%9&u=(!&n5*^#4xf+*zdi9Cbp7fH7g(Gn*J#u&S zH>$XCzBo@*rDsE(rO!|34Uui#mvV1uC(EU?#%4iugq zxd&{6T>B%Pwb4`IiX`P-N}*6qMN#lQx>;V`tTA1VSC=!eXH++DJi5APwZD~p%KmMh zl)_PU(KWgHsOpgFh~}=GicIM*9f%*+Ty%}CsP(R>{c45XQ*ZZd?-((4a@Fjk@vFjD z8L7{Wiq%=-&*MuZtJB3_B+>BlMY?o#*3cioJm7Y~uy<-~3`3|OXNR-72_&NfNKZ0w zAz?upM{O0v_Bxz8L_Ap!A)gGCU3<%JUc?C~dV+@gH4+;T5+&?o2C9Iqc2M=kA-xU+ zbk5|n=0wh)~5_qJ{iBaV`G1Dub+1pusC_D3~pVsaqX=eba`Upd8) zzo5`^W-8G>tN_7I=mW=o$OTHYM*rB_aV7UcW=U+~tnO7kd;7$Px<(|k#uJjeSN81a zbsTCQktB1v?08;X_Yrm74LSwvYT3bV#ZWb(4HQGyi0u+^8zWu@jJQT-53>`W0*E79 z`w%A&iIb9^6T|+!enX3&C-^(A9mO8PxhIZ3Kl#fZo=e|6e_`^i1AqMBB&N76*%m*G zgP0r74NUf2n0W5|_2F*Isxp!_+cI(V{H^XoH(!0?#tY9+oPO`dnQq<&HSxyr$v5AD zZ0HK}@7?=BcWkq@bP&%Ul9dcx1wV4w-&Vzp@$iMYYipU-df0&A`8#$jQ4+|=kTIHJ zz_^Mi2=-v#f4*#KlaCf+`NK&cvm)8S0B$U*%RenMkJrRLp4Ztv!~CaHmN~bxF@cKjK45F$YWW%U;rb zQX+f7Z;0#_Rlz<7`E0KP;P!7bx(TU;3RT;g9HdB#&0)dcT3mp$ED$R!!eE0Sl!_Pv z(FTzO*@t9lu=803$0M+6x3t)svVxUX`KzvPoL;McDrQ+AL8wG%mhdj%1WV%!tyrxv-i1@;kP7a5d!c7`P@Xp2&X2zfy}9TDsVxy)~!3s|0bC0WK+5*t@Q zE+c{%I|+^8?Mwl`B)`Xv9<8`Ulp=Errq&I>eG+GD36Jxu<-i zH)E5>zGKwT=utQR<+{pvhZ0M-(wt&*_LeXVedkDl$#h^@^s+4Ka-0rfmI5}5FBj#P zW{E#eqjBRnOA4@4PuNg9S!oF;x;O8M6o)G9Tyc9Ym*+Nfk2XcoYN9t1?U6f>W6(AP zoGgG9iMTTdOd=7lWj?%1M;o}eYzbg8=TpR}0G`Pyh zGC2A4n>S7#yz#;FH$OZ!`OMEIj{elY!omVO+5P^cyYKwu3vW+8Kgh43H_r_4>n=_t zQe?IT3Z3{BH}OW_#HoRa^Y2c)_Z*aH@y~mr5LhOU|B|nlFYD&{pWS?OaN<`#5lR?- z8oZRTl9yis7@FOU3WbHo{^JKdd_%7fKYjDHS0|1ho9KCA;{Esj_`xAkQ0J@UN8qV` z#gK>z*j&rBRMZy&xX{n&Myce_q(l$KU@Z8G)!QPA#DYxmPS;-{0*7zzw3_-apLvI z2wvUO8_MNwi*lzrrZt>s_xwols&PBYYSTn0ARj^%FeG5z=LIxg3WNPXAcb3x4S>o2 z=J{7AAA1~zro$!MPimaI>eZsigliFc#X zQ4NY1aNr$>cJztIqB6Wu83VJ)%Qkp6)r@Vb^KPp1XzD>j zQ`k{MQxNUSV=TQ`|JklfyDmO7Dz8QrFYZ_zm(U~oMiuT?L!q8%J=9}}Jf3kZqpx%< zF3TI2HBefAzUlR*;nK0i72d@ap7m8@>ubI1Ydtn*%+~C+HG5jwvDQv+Yo{mtQK(eY zMT697NIFysx~ky;x~CNMJI?ZGtfJJb%k#+d{&JnOJ+->LEU#=1^~oGXxm^6o;u5-C zEdI2ZhL>N9r2sp%JTn%A_i3y+uoIFqlNB%K^4%uU{`+vW@s&HZJ5oOlE8fq>WqvmP@GcDv zC+F(oWXSt>>X0=Tg%ef_0DRbBl<`4BB?DGdKd;7JZ}Je^9SEXM6WZ>$|5|TAr#?Cy zt#@veLdnCZ7_}1}_Q~TC3#Ah49hAvv&IR042pK} zc-PNcLnr7T-MpRzTzsOZ|JI3DfaUV@GnBc8@K#bRAP+tflvosazh<^Q@hA(Rm<1PTQUWv%;h{J zzh1^rE$r9`}?tE*c8^yGV3%{5_eEisl5?=_jCr6T| zWq9SSn{WSYp(VHqfVCrNNi9J>9<-Yf0skz<0dL>o-wpp!<}R7B$;)$e3A7r&hBrTI z+Xa5bv-Cee;s1s#y%7RDOK%63p6D*QSo+zTOKUDJ8I@O}#Zh;3{-OCERbqeXSW2Nc zrO=adpWjUOBTTve{I1t`dBPX|2^j8TqU9gmd}y;rlk_9mPOmw!#uJ`_=(DGk>%b~7 zriu4z;yoJc4|0q}Bzq&0`%7P2a|ZI{VV;61b-(~x9b9ELqKT1b?`G3@Y@#Qt(yOcT z$gBPWD*qiyB5mjPv$Ixv$~KQ~+3MN$(8!ir&*q0c%WU41I!~KpROkF!?)-jA0f-=| zqoeMDvIS*}sZSOw%8lYrr6rPbo%q)Z8eV>_lL8$2%DGxhzs1GxO^hLW)c_9PNd%uF zK=T}H;ZE;;-yO8IlbuhL4%$)6n!ND-#8dqfp_Bs7GBb#Ts8{#W#E3Us)7;( zp`#GusfPN%_2@saRaiIgD1ioZ_6h>hsDH%}@eIHv4e1CUo|e>t0kalP6tRBueh=24cHEpIOk#5Q7n7$sUI>Ge0uyf?y>;fDTQ9!+@7)JTdZz+2{cjCLomcYCTF%+q18j6a4#8Sjd1z1)t3f=Y4$iRbsJ22O%Z)?Cfl+W4MnG$JO=HQsp z&VbWs02!8K*f9P6KpN~~0)h%xXLoRSG_WrUtFsu)J`(@xj08j;V#NU`R%c*EKkH9{ zvrif@52!-+)Iv%Nar2agSbd0RJeON1b))VjKNr|TC2O{_OR^7k_89UTvSzE=pM*-u zDBOJJ0x&{;d?pWd-#XO|OEIs32`X29js;RcF#|3eDpTW{UFx^}RBVG)HOsP*9Ma3O zEb|}UvsB^XJyKCYj^*Y@Pfou7%H%VLZoK{;Uj<1a7O2iwNEpf3uax)=sad#Sb9YZQcnJ|RPp6R8p4-Tr2si?S9=ZF z@0e~o_9?OT{AmOB&(QSk*mN~%IvgBOn-3RzBvHJPcq_zC6U1@4ktsKy`+ZlUG3YHV zOa_|b{?=7OcyTrC!88Iszu%GxHG!)wmWbOml+cxag~;EYzd}+AwkHWtz@V(Ar21aj zsKh+3F?5$-m*@{xjH^w(PLC?iBZ(u8?2I6a17VE0;IZh;X6h2AHCh2>kw$NZ(vQQz z7A`X(L4;EK0TZ|WfWjYC0fPWcc=#k$K(;3DLXOy=!B%!I>?~T|;OU}~>!4Z2jj}y@ zrxQyIvU&0V|Cj|1??`UsVM6&upk~a+sKFHr*EM(uH__CaajUI4!#+(6fk3n-Zu zlkXh9dHyG4Zo1!`c#pgJ(Mw={AxZq17z<$XCt=7T7%RSlo(X60;PO|F0~Hg_uK4fE$Ej?ug-P1efbbQ2R= z;O88fWH>~DDHeevIpci7-=W}6B#!3+6XuyxP3D<-Oqb}@C62?9mzZNQeVbQ}gr^BF zKM0#*kJlWl>DP>ya>o5(#fWM4cwGElO_*NUBLO3*LUUAkNO?pJ^36bnSGUL`Uxbs8 z+qOR?!s%hEt>fhhEzEOFA9J5uX^&`j+zoY=B2u z<=~as*aREk&316&ezZH<{13q89ixK%BVqr+o$a=ylfHqk#=a3Gh4!|lR&b#uXWLmB z(8|-2p*!7!V)~n*pB{A6@H6X)7%}f-z_ZCf?G>+wa>x>_7|H(sz}oS;ID|p|aKyCW z0tt)-IU=#Ut3}Z0lair}hZJF;*79!d`hks7ScDlVxAZZy zSmxA$N^Ig<9xHQ)g)E}MX(PSoBFax2<&0^gYX2EjOXkKz&x;eU9iBMyJin^J#DTRF z?2cd&%|B?&cbPCn*-eBz0Bt`8sPO@&~;yzxFa`O-l!Tur=sVDhC?5QCYC^%5*q zg3NTQ`vB<6*WY{Q=12Q)y!Jjgrhs8GQ0ZjP^VdImbK;e!1LX<%SUC(Xs{l~lj@xXL zZenAFhVu2I{v>=uE?;)Y%=9mj!LetRSey!gW7=%f@F&cKq0<7wZ*iiXhbm#BsWSr$ znr50C1^16b>9mE5e>4UsizjQNSGUO{-^A5EwbosdS&~Ct%2AYx#h2!l(94#HFVCmp zTJKTnWkKbT|pNW6p&IKYr4px|*G+wBIY+vu9Y9W$;goNk-O+l*AEazR}SRnYt-~w}y?FGI}IOls|Znv7DZLVs`)5k(dHV*NsOf zo{l*Y)4ygUIuG8p<8DjZYsxc9PiFCmWl4`@R31M*GfQmZSZuyGHh&~`PLJekIWMwI zTlle8$>2Xl248`_3sEy4*6Iw5wBU}3G6VmhgCB0oz9u zA3Wz8T;oYDptkIQaj^&l1t-c{RiBbSucXSV&I=37|;}o z7x^Gd?GfRjSejHFI9eNOREz?#Bk(zJV}b}xg~0}s1GT^@$${EX0mDsOr4^mYo8X!a zxQ}F^Wj%kNg#|7}2yS*-Ksfh_*g6pHP;lssC1;x~NM?}9;wLW5v(N$ux(U4!jr9Te zT4FBeoo}k))u(}dRL~R}JIR4ex6jB^tG&54gh+i7JU&8JOAs)PFmmL=0bWqY(H53T zHUiS1{WJJO&JX5*8R@nUassOp$rVxKaNmw0<14oz<89G}u(!f4Xy4KfJI9t*dzV&^ z=54sDH+iBK4i}CsTJK%7-m~xlPh{n&zG~bYdo|qD%Zx>4dLuIjsz<{M25nc(DP!gZ zUh{(Cq>s|xO?yA%O0~zlV8mScXE7Bq2d*9XD!kzP>$<2rlt>YERUPgz<_^*W4o}3K zQMJ49s=@sIloV3FbKsWAffCKKBn)^~4p9L=<_z8P62k zyRvUtpQF#-U(ny!|KOl#aKT{aaOFkG@a~J1o`{t_VdKWAF=L9?m@;OxdW~Q}G#srs zRM9tYL_O=O+AyY$^Qz-U8r2C`;iTdHhweYT?%OblN!gASF5hALuDLRTz5Vw@VU&F4%u?cL=Yt zQ3_aK_`&6WjYBP#f?5X$dSmb|8@O&p3VSL3MH+nL(F0%0UE60g0LMhambzpBVUryo zm(*l-!>{~BIQd~!RQTv@;<4PBv}t+i%985!C0h!zc{<6itSTwUE1Yj3cLo(FcWRQe z0>jV02F9I#4bX`{Rk%>7IN3)h!!myhdW7AKE`B}<;`$`*?RXmz!a}wNx{S?2vL=$i zGC&5MjBv?xj73^xXCr`XJK-J#1epMScv2~*uD!7dj4$m#!>per*YbC4b!Kj|yQfQC zIX{k_g9OMyL%JzEVk$mWc6!x`RWGa=iOLu;T6+{2DZz86FQ`Y1sbj`$uQ40^RtrXq zb9)qo^0K_ftbvV#Rm0YcTRiKlM~oYK6mGDh>+%LA7nE-)2V7GWy*Oq(W>z0KvC^qO z5=uCob0WtRZ5;>)1GFYmE0Va zp_q`*507gABA5}0ArTxi;PwqTJ48%RoE!y1-NQ;ItOtpo|u9 z);Ae}hJ%v80otmo=qwa&!U7v~4$y4Q9(&_nusA>R2)Pey_Z++qE7!@|S{!hE4ZH>% zxjTwF&AInZ@QF(+wt!SAC3l&@bs6m}3(T?uC>PG%`rP78Hn=qi?$xk$fY-PGQm)1} zU)YW!;^_gTdmnTpp=G#n&F-jY8~H0V)L@UOg=R2zxND0@z&@G(IxMB59(X0m?~|;D zd)_+rwzjsWM*bGM+?|fr7OS{ZUE12>#w+NutFbAvl6t(I!>1_;rFS^2H3>uj?ICx| zIp98!E6|=>UjXQg;MuPQR1XW0dO*Ta1=~v+#ovx3#oLh_>>QY9{3UI$5IB62HaA=+ z!k)qz%dbIB`(7s;C?~TOZVRPYxEvHt0`T8e+hA|;DS~~Z<~t3{v@PJ6Pv$j|sj$Ih zhWjKqciB>Zt^9FZ2b#S7OAENY;=`{nO6YPZ5pO!{jGex)z`7DlT!gdvH&6&HC)zUb z4by>u4|6dx1`R9Ya0eFt#HNkMWq=dv>D&{!*P>^Q$0gmCip^RufTm<$Gsg5SpAw7W zBHXv7(pc?nlO7E(cT*_6@o49v&c2ipT_UKNxL6TK^4){Z;p!3HGEz@`?s#OzczhBZ z(K0A|!oWgkj5}U@thnDWP&jPvEgmtH^vJKN47^8w|3WVucsIl%2Dj9sPQDH+Uqaqs z)P?xB;s@P2PuzVY5hWgV32*OQ1APapcL8?c90Y|3OgI!MO!ABshml=}pbff#&uGJt z9^(*bu#e&(>L7JT6ecaa6QPhs-HB967u|_cNtJhFz)VC##&kb^XIL(OBVavL7kE%& zdkp@*eTmaK62wq0%2C{EhdRTd32+eDu3#kR0(Wb`G!LkaJS%a7IOc@R{DVA5&>^a* zH^h5rtGt3;35n(Hc(!fvj{GH)PyGyT3B1*P^45NCV(=uMxBZ}dqW3&p2v}*~-Uu{H z@R}fuBwE# z+pt5+A=7j>&9kdzRM+Z}w}NjVIw2>hQu~`Pnn$Z^yhRU= zsJ40}TmMS#aXV0=D$&ryai1lQ``KBGL58eRggE4fq1@de20MeXn%vn4lO3ms;FC`_ z266B3p6>Xd@XR13vUrnwU&vlG>VMN5RMX&n231wV_p=CgVJDP9j>jqPMCQ^(qmopf z_%N|kN37uf84NtxZw3K$c#tFrDP4pz)=>1b2h1`XjZ`6!l*FNThH;+u1c?w^z=Smh z)Xh*85;xLFsT7jbVw;jdKBup*FgN(S~>d=e?hbsLcIJT&R1$dTF7aV8QPdikp z7D|`^z+FTpBjlrQyqj+g$whOCta?4ShZ{GlX)3zpm-tOLJZ7V9qcD z9AWh5rBkqkS@$Sm+7V9q&P?2+kU-_xxC0uCF6`uS1*8xfc1T>}o%!6E9D~4h(ikHX zaBqi^jeHSBW|=GOoLRV$woB*I;f{(sDlj^FCfcP3=_lqCI3R&rYJpH0Y=&&?3U}fh zAP*Dk3J;YXI*Tx1U$wM@dffZJ`o$W06y-wNdE+1$!)+3wD_m4f6T{LXY_vitx;@T)4mms>1}1RvPq^!3Xt%2rjZfa98e z76wN~$r*#KxBSWBF66$ZH}m)|4|?yQ$!wtfU;MI+ubWG$TLV&(U+BC-<-l0z@l5FZ!zdqHjmLttHsOA=^;X-D`Yu`(6-F&~Ot*4nKfk zjHgP;2>2v>_SV|jl~Ras7~lwLzjF1xV$t<^(o#|q25g=H5jFWNkXD?M{odCaSO)Nqi>9Cxam zKk+$l*fV#@4MLeZwU;}yp$;>V2XUSm2KT-204Y35;9 zuCH^6TRzP#xbafs#jW6q2A9$vUwmvax1>k@jmj_{nb7yhv0XhYe&8WC%|Cd%CwwmY zh|LEdF>`zfwivvL!38*`Z_erYC+7E8;TI2z$MWv;=Be-VgqPe66KhK8sYu)~0{vaD zaM9xt(PI%Q-iVZ|iK(YMPjn7s51U64OFRk7E~b0pR*%P9$754Lv7b^ghG>V#QyEO9AQ2NGT+I87qcx zr(v3m$lpeNZ9tF$D^Wx*;C!|u`%78ci5%x`lcl-^y zJcIZsSmeN-GIIwaWOqWuTTDQofd=4HMa`p*%!OrFiCa?S0pTH|EA(DKxE5x*@DNfU zdRn81pg0$}XomPyfb2@VqRH=!p;ptq(_@KD$l>Jiyhc<5&TkDj_Ou<Iy$zt)Pxip67NilUXXv*Ttv>3wN=TD_d$%4y$|I}H({s_K_db@CGHc0<%n&8SDzg2un*o)&F)5&|BiqxfOx|qeT5L7{cvJay=QjO^jWMg};h%cv}>??S}PYXdHnL z0XYx+Zy36P08f^%e?Wk4r0i`3-y%R)HRANeqNf%6cN%uwi316%#!7JGpEqNm)=jid zvK$h!f}36TJzY$1=012j)*6f1r)#P{`QqkQroG9&gnb-x0|Mpvo&4En*1D%e`4OUV zNw~*gof1Rvn#ANWFQ1Y^5Y`K6xF^Co6^1WzN^0^%E}v51i;|KWJ*KuP6~2HYn6Y=u zlm^3EN*dYQF{Q(>o|5W%6;t6Dj)3I>IR2CYUyPJg+tbm*9_={f?&yn#on>9#lnGNJ zgDIF$KBCKDh^e*TvIKJT6g1&77tKhoCsaQ;iyGM?AOh}-liT#qP zL=0Qp@KwFcR1&@ek+Apd;v*I~iR2GgY*HDCOuww1G01yLERYM!NWR7Da0gYNuq}>%HaXhiE#fzjTVi z-+|I^$?xs^#6z-U3VLNFO|PVT9d{@a_*P7bqNYS7JOvk1ilk3Q?T_lo8KI-6L=V$+ zE8Vy64n+cp8sm?gDid?n&syDg;kx+QeTusj{M?O^)9Jk(cPaRRVTO{-`^`P({fzmyZH^;!!;c%Ltt`B}${W(tV|ODEvjdWIk$YJ^U}FNb5Yx zxDh&jN|Z&HZlyh@v^!LmA2k6Zx6)HvgQzhhbS%cU)1Igd#B3*p#_@50$+@4cDGO<) z%->A>^*0lPK+!@oqetkN+oBkMolrUkr{;5CJ)6BmLC5!{+@atH^CnJ-AOw^xG(2I1 zhB!Uo_c`xS_={*3K58n3GjR{NLve45@`5-R{BsixW3`OFjl&23QvrU+u%n~<7h^}~ zO^L$jZFJwBI~4w6@%enz-3S?-*031mnMNAkz3_@qvxjHE^gZ(e=cKy@< delta 9212 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 +
+

支付设置 (Payment)

+
+ + +
+

+ 开启后,/ticket 页面将开放访问。 +

+
+ + +
+ +

微信支付配置 (WeChat Pay V3)

+ +
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+

数据库设置

@@ -390,6 +435,10 @@
+ +

+ 提示:切换到新数据库后,点击“初始化/迁移结构”可自动创建表结构(不会删除现有数据)。 +

@@ -535,6 +584,18 @@ // Checkin Config document.getElementById('enable_ticket_validation').checked = config.enable_ticket_validation !== false; + // Payment Config + document.getElementById('enable_payment').checked = config.enable_payment === true; + document.getElementById('payment_amount').value = config.payment_amount || 0.01; + + const wx = config.wechat_pay_config || {}; + document.getElementById('wx_appid').value = wx.appid || ''; + document.getElementById('wx_mchid').value = wx.mchid || ''; + document.getElementById('wx_api_v3_key').value = wx.api_v3_key || ''; + document.getElementById('wx_serial_no').value = wx.serial_no || ''; + document.getElementById('wx_private_key_path').value = wx.private_key_path || ''; + document.getElementById('wx_notify_url').value = wx.notify_url || ''; + // Seating Config document.getElementById('enable_seating').checked = config.enable_seating !== false; // Default true document.getElementById('total_tables').value = config.total_tables || 14; @@ -649,6 +710,18 @@ // Checkin Config enable_ticket_validation: document.getElementById('enable_ticket_validation').checked, + // Payment Config + enable_payment: document.getElementById('enable_payment').checked, + payment_amount: parseFloat(document.getElementById('payment_amount').value), + wechat_pay_config: { + appid: document.getElementById('wx_appid').value, + mchid: document.getElementById('wx_mchid').value, + api_v3_key: document.getElementById('wx_api_v3_key').value, + serial_no: document.getElementById('wx_serial_no').value, + private_key_path: document.getElementById('wx_private_key_path').value, + notify_url: document.getElementById('wx_notify_url').value + }, + // Seating Config enable_seating: document.getElementById('enable_seating').checked, total_tables: parseInt(document.getElementById('total_tables').value), @@ -748,6 +821,24 @@ } } + async function initDatabase() { + if (!confirm('确定要在当前配置的数据库中初始化/迁移表结构吗?\n(此操作安全,不会删除现有数据)')) return; + + try { + const res = await fetch('/api/admin/init-db', { + method: 'POST' + }); + const data = await res.json(); + if (res.ok) { + showMessage('数据库结构初始化/迁移成功', 'success'); + } else { + showMessage('初始化失败: ' + data.message, 'error'); + } + } catch (e) { + showMessage('网络错误', 'error'); + } + } + async function resetDatabase() { if (!confirm('确定要重置数据库吗?所有数据将被清空!')) return; diff --git a/templates/index.html b/templates/index.html index b559e43..c9a3362 100644 --- a/templates/index.html +++ b/templates/index.html @@ -490,6 +490,17 @@ + + {% if config.enable_payment %} + + {% endif %}
diff --git a/templates/ticket.html b/templates/ticket.html new file mode 100644 index 0000000..cfd60cb --- /dev/null +++ b/templates/ticket.html @@ -0,0 +1,305 @@ + + + + + + 购票报名 - {{ config.event_title }} + + + +
+
+

{{ config.event_title }}

+
在线报名通道
+
+ +
+
+ 报名费用 ¥{{ config.payment_amount }} +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+ +
+
+
+ + + + \ No newline at end of file