From 578aab36c37ad149fc0c8eead342656eb3c2c56a Mon Sep 17 00:00:00 2001 From: nyne Date: Thu, 15 May 2025 12:47:15 +0800 Subject: [PATCH] serve frontend --- .gitignore | 3 +- build.py | 15 ++ frontend/index.html | 34 ++++- frontend/public/favicon.ico | Bin 0 -> 5238 bytes frontend/public/icon-192.png | Bin 0 -> 15454 bytes frontend/src/app.ts | 11 +- frontend/src/components/alert.tsx | 2 +- frontend/src/components/navigator.tsx | 2 +- frontend/src/network/models.ts | 2 + frontend/src/pages/home_page.tsx | 6 + frontend/src/pages/login_page.tsx | 6 +- frontend/src/pages/manage_page.tsx | 28 ++-- .../src/pages/manage_server_config_page.tsx | 8 +- frontend/src/pages/publish_page.tsx | 130 +++++++++-------- frontend/src/pages/register_page.tsx | 6 +- frontend/src/pages/resource_details_page.tsx | 135 +++++++++--------- frontend/src/pages/search_page.tsx | 4 +- frontend/src/pages/tagged_resources_page.tsx | 18 ++- frontend/src/pages/user_page.tsx | 4 + go.mod | 2 + go.sum | 13 ++ main.go | 2 + server/config/config.go | 18 +++ server/middleware/frontend_middleware.go | 106 ++++++++++++++ 24 files changed, 400 insertions(+), 155 deletions(-) create mode 100644 build.py create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/public/icon-192.png create mode 100644 server/middleware/frontend_middleware.go diff --git a/.gitignore b/.gitignore index cfab598..1ee2d97 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea *.iml test.db -.idea/ \ No newline at end of file +.idea/ +build/ \ No newline at end of file diff --git a/build.py b/build.py new file mode 100644 index 0000000..fc07bfa --- /dev/null +++ b/build.py @@ -0,0 +1,15 @@ +import subprocess +import os +import shutil + +if os.path.exists("build"): + shutil.rmtree("build") +os.mkdir("build") + +subprocess.run(["go", "build", "-o", "build/", "main.go"]) + +os.chdir("./frontend") +subprocess.run(["npm", "install"], shell=True) +subprocess.run(["npm", "run", "build"], shell=True) +os.chdir("..") +shutil.copytree("./frontend/dist", "./build/static") \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html index 1bd99ac..2fdecbf 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,11 +1,41 @@ - + + + + + - Vite + React + TS + + + + + + + + + + + + + + + + + + + + + + + {{Title}} +
diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..01b2076619aaaa12e66f62d577a55151c3e4ac9e GIT binary patch literal 5238 zcmbVP`*Txu7LPmp0shQS{Ish)%C4eTEVKg3y9lKgc1IZ>+i};`(HUpgacA9Kw}`j` z(yUSnRoaF&ZRrF12q1_rM0CWyn>Nks=3Uw*P2037EuTH-dvn8WlG}&hnLK)voOAj) zpYu7NtJB@1`<3qAdv)}x)7`g3r~5U%E?XA+o33ZmwfpEAz17iW`W`>iq3iRVj~}&U z7CzEfa_pgA>yZb|`0ww!@!sk#>!DR$CGW0k&z$S`MeF*DKYq-D|2^7=*h6L< zd7uaHbBweuyt}Fs|5?#qoGM1i!rYD4I0 z8iD(#an!sdLBT_*gYl@`E|pYll~BIf0mBX_q-*0CwntHOz=isk+^Bg@LjB7w1YJ|; zX&HgKj)N<^N@{kxtX11x;22!T#W(y2+NUt;yDj1j+oA}2r!YjXhW&OK(-zy>1lt-XM256>iGJfgYey)fb;8d)cwJY`U7tCG=yQj zGKSCp;m7Gs)_4r&X-lpzvnkhy^EqBQMy!r&hX!%0Co1Y^Ov|=7lK4?bTxTA&>jVqOFFg9k%uA`a`84~6V{6Q9G&4cwJnP8&zwHhlPU~(v zw7Sc1XjNza;oq2-{=zg#KO(ed9!t`FDJs*Krf(?fF`%TF~NUfsod2FfpM z$;u96!ToLNNdXsl;a^!-mz-GFuV-F=M4H3er%&$#YuE9IWeq&KhIEi>P~jlg5Yxni zq(`J_dXBZgwBl>0*4ffduCunXW}cw@q6W&(HHiFFLmUUnKPL_=I!K#4S`V)5NLxq^ zC0W*t(~sLiJPXC^tvE?F6lKWTy;vNS-5_vS-VrKT-jy*|4W%1xX(bzMA=dlTSypfj zC)ZPc#vvny!`c`QiF{Z94h2+$77kalu!QEgm38ft4f4)8on;d>Fb-TpDjZnv7Q+Yb zMJhg&KjF}`j-1(K7ux#C2Aj||(FZjS#D^lnr22UYJikG^wb@6)`f8HMG3}dooJ_hJ{`S-smKiM-;Uwz zGmZu617lE`EiE-}llS!5E%L4|e^T}hWwiSnU-rUsaTHVIGq^o*2llVVQ2T;Ai4PUO zccAxDSk%DSuqUWE;J~qm&6@haI$6Elm2adyP`ORsCk7P`{g+1LFb8SJR_&K?ispj7 z5YL74`ZxmJlS%q8XpP2y*LOLrsSm8xHQ63RHG2fAf$QL%rr=PyOTv}E2gL5@fb3m< zE)R;G%~+_9gE(=ccu07fndv(iFi+yrJ3gG)XrW$c=p^lnbJ^}TWhbj~NaRCjbts;W zb4&EU*S+XQJ(8HsM15dyshmLfgxDAJ=tHoMJQ{nwnph3&)f61s%R+*49Fu)o^IyCuB~G$N z)jjWq?aMLY;n^_DsJX2Tv&kn_tpPz@3J24l{E)th#Q)EJ(=XAD zica#rXvimhY7UG1(Xkm=iIY{&Nb+oI_y_h;jeETY&fl;{?t_8@^WkPuF#dlru9yE7 zfLb3??Te<@yoe0TJ>VaIb7UY%ADELd|6m|*o8QPDIfuQr?AO&eeEHTbOor~x7V|;T zhs1qx{rKRldifq@PX9oD^8CJAOBIjKHKf9!A7Df2q)xsCSn5UO^QZayWU zwJeCRNB)d;@{4~5P`b@NuYX`q%R8Vs&u`=!8tHyR#zF2y90!#?{BWG-LC(eZQ~cmF zWQpS1k-^yRp5H&{*IJC6n@>xgKfU>BKlpx!?^TldkgN|^-VBJoOi*t=|7!qRdoz`P zU_Z&eTFx#%Qw@5$*P$912W>vERxA2Yn@f6;;|A?-vAYxbkjg(WAJ|u`bMt%lU#7f3 ztBeEHKsco0gO)xd?u$hK5ciYht5f+euEDfFkVZ9xhz|)kB=A9{ldRQ=`$F*#YJCu% zmVGsOd(NeGO#25is1KpJ`9Qd9=%kiD2wzR!UMsKqdJKow#quH1Kg9V!zM8$gI>&tP znGeiKg%3OzsraCUgTe>))f{WSd|IE2*<6G^D14|SPs_eqEAC>i$8<7Z-WR^M*?UuX Rn6{d1mx28xd)kG@|38se_^AK@ literal 0 HcmV?d00001 diff --git a/frontend/public/icon-192.png b/frontend/public/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..f28463115814b8e5b118ba3b1931e4774cb070e0 GIT binary patch literal 15454 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 Un3?lbNdN!<07*qoM6N<$g5s>D761SM literal 0 HcmV?d00001 diff --git a/frontend/src/app.ts b/frontend/src/app.ts index 849a831..20147e6 100644 --- a/frontend/src/app.ts +++ b/frontend/src/app.ts @@ -1,12 +1,19 @@ import {User} from "./network/models.ts"; +interface MyWindow extends Window { + serverName?: string; + cloudflareTurnstileSiteKey?: string; +} + class App { - appName = "资源库" + appName = "Nysoure" user: User | null = null; token: string | null = null; + cloudflareTurnstileSiteKey: string | null = null; + constructor() { this.init(); } @@ -20,6 +27,8 @@ class App { if (tokenJson) { this.token = JSON.parse(tokenJson); } + this.appName = (window as MyWindow).serverName || this.appName; + this.cloudflareTurnstileSiteKey = (window as MyWindow).cloudflareTurnstileSiteKey || null; } saveData() { diff --git a/frontend/src/components/alert.tsx b/frontend/src/components/alert.tsx index 0999d4d..8ac81e8 100644 --- a/frontend/src/components/alert.tsx +++ b/frontend/src/components/alert.tsx @@ -10,7 +10,7 @@ export function ErrorAlert({ message, className }: { message: string, className? export function InfoAlert({ message, className }: { message: string, className?: string }) { return
- + {message} diff --git a/frontend/src/components/navigator.tsx b/frontend/src/components/navigator.tsx index 773fd39..562cea7 100644 --- a/frontend/src/components/navigator.tsx +++ b/frontend/src/components/navigator.tsx @@ -32,7 +32,7 @@ export default function Navigator() { { - app.isAdmin() &&
}) @@ -125,7 +129,7 @@ export default function PublishPage() {
@@ -139,67 +143,67 @@ export default function PublishPage() {

{ setTags([...tags, tag]) - }}/> + }} />

{t("Description")}

-