From 539eac217f3464e5121141bbf51ab02dcb71fdd2 Mon Sep 17 00:00:00 2001 From: JustSong Date: Sat, 22 Apr 2023 21:14:09 +0800 Subject: [PATCH] Rename to One API --- .github/workflows/docker-image-amd64.yml | 2 +- .github/workflows/docker-image-arm64.yml | 2 +- .github/workflows/linux-release.yml | 8 ++-- .github/workflows/macos-release.yml | 4 +- .github/workflows/windows-release.yml | 4 +- Dockerfile | 6 +-- README.en.md | 40 +++++++++---------- README.md | 44 ++++++++++----------- common/constants.go | 4 +- controller/file.go | 4 +- controller/github.go | 4 +- controller/misc.go | 4 +- controller/option.go | 4 +- controller/user.go | 4 +- controller/wechat.go | 4 +- go.mod | 2 +- main.go | 8 ++-- middleware/auth.go | 4 +- middleware/cors.go | 2 +- middleware/rate-limit.go | 2 +- middleware/turnstile-check.go | 2 +- model/file.go | 2 +- model/main.go | 2 +- model/option.go | 2 +- model/user.go | 2 +- router/api-router.go | 4 +- router/web-router.go | 6 +-- web/public/favicon.ico | Bin 3870 -> 4286 bytes web/public/index.html | 2 +- web/public/logo.png | Bin 5347 -> 8085 bytes web/src/components/Footer.js | 4 +- web/src/components/Header.js | 4 +- web/src/components/LoginForm.js | 6 +-- web/src/components/OtherSetting.js | 4 +- web/src/components/PasswordResetConfirm.js | 4 +- web/src/components/PasswordResetForm.js | 4 +- web/src/components/PersonalSetting.js | 4 +- web/src/components/RegisterForm.js | 4 +- web/src/pages/About/index.js | 4 +- 39 files changed, 108 insertions(+), 108 deletions(-) diff --git a/.github/workflows/docker-image-amd64.yml b/.github/workflows/docker-image-amd64.yml index 1a77775c..e3b8439a 100644 --- a/.github/workflows/docker-image-amd64.yml +++ b/.github/workflows/docker-image-amd64.yml @@ -42,7 +42,7 @@ jobs: uses: docker/metadata-action@v4 with: images: | - justsong/gin-template + justsong/one-api ghcr.io/${{ github.repository }} - name: Build and push Docker images diff --git a/.github/workflows/docker-image-arm64.yml b/.github/workflows/docker-image-arm64.yml index 5ffd1555..7304e5c9 100644 --- a/.github/workflows/docker-image-arm64.yml +++ b/.github/workflows/docker-image-arm64.yml @@ -48,7 +48,7 @@ jobs: uses: docker/metadata-action@v4 with: images: | - justsong/gin-template + justsong/one-api ghcr.io/${{ github.repository }} - name: Build and push Docker images diff --git a/.github/workflows/linux-release.yml b/.github/workflows/linux-release.yml index ac84675d..2696fbfb 100644 --- a/.github/workflows/linux-release.yml +++ b/.github/workflows/linux-release.yml @@ -30,20 +30,20 @@ jobs: - name: Build Backend (amd64) run: | go mod download - go build -ldflags "-s -w -X 'gin-template/common.Version=$(git describe --tags)' -extldflags '-static'" -o gin-template + go build -ldflags "-s -w -X 'one-api/common.Version=$(git describe --tags)' -extldflags '-static'" -o one-api - name: Build Backend (arm64) run: | sudo apt-get update sudo apt-get install gcc-aarch64-linux-gnu - CC=aarch64-linux-gnu-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm64 go build -ldflags "-s -w -X 'gin-template/common.Version=$(git describe --tags)' -extldflags '-static'" -o gin-template-arm64 + CC=aarch64-linux-gnu-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm64 go build -ldflags "-s -w -X 'one-api/common.Version=$(git describe --tags)' -extldflags '-static'" -o one-api-arm64 - name: Release uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: files: | - gin-template - gin-template-arm64 + one-api + one-api-arm64 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/macos-release.yml b/.github/workflows/macos-release.yml index 39850d86..7f4e48b1 100644 --- a/.github/workflows/macos-release.yml +++ b/.github/workflows/macos-release.yml @@ -30,11 +30,11 @@ jobs: - name: Build Backend run: | go mod download - go build -ldflags "-X 'gin-template/common.Version=$(git describe --tags)'" -o gin-template-macos + go build -ldflags "-X 'one-api/common.Version=$(git describe --tags)'" -o one-api-macos - name: Release uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: - files: gin-template-macos + files: one-api-macos env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/windows-release.yml b/.github/workflows/windows-release.yml index e9877f87..525f0524 100644 --- a/.github/workflows/windows-release.yml +++ b/.github/workflows/windows-release.yml @@ -33,11 +33,11 @@ jobs: - name: Build Backend run: | go mod download - go build -ldflags "-s -w -X 'gin-template/common.Version=$(git describe --tags)'" -o gin-template.exe + go build -ldflags "-s -w -X 'one-api/common.Version=$(git describe --tags)'" -o one-api.exe - name: Release uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: - files: gin-template.exe + files: one-api.exe env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 7b2dc9ae..a8df7683 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,7 @@ WORKDIR /build COPY . . COPY --from=builder /build/build ./web/build RUN go mod download -RUN go build -ldflags "-s -w -X 'gin-template/common.Version=$(cat VERSION)' -extldflags '-static'" -o gin-template +RUN go build -ldflags "-s -w -X 'one-api/common.Version=$(cat VERSION)' -extldflags '-static'" -o one-api FROM alpine @@ -25,7 +25,7 @@ RUN apk update \ && apk add --no-cache ca-certificates tzdata \ && update-ca-certificates 2>/dev/null || true ENV PORT=3000 -COPY --from=builder2 /build/gin-template / +COPY --from=builder2 /build/one-api / EXPOSE 3000 WORKDIR /data -ENTRYPOINT ["/gin-template"] +ENTRYPOINT ["/one-api"] diff --git a/README.en.md b/README.en.md index eb98bc16..7387244e 100644 --- a/README.en.md +++ b/README.en.md @@ -3,7 +3,7 @@

- gin-template logo + one-api logo

@@ -15,28 +15,28 @@ _✨ Template for Gin & React projects ✨_

- - license + + license - - release + + release - - release + + release - GoReportCard + GoReportCard

- Download + Download · - Tutorial + Tutorial · - Feedback + Feedback · - Demo + Demo

## Features @@ -54,23 +54,23 @@ _✨ Template for Gin & React projects ✨_ ## Deployment ### Manual deployment -1. Download built binary from [GitHub Releases](https://github.com/songquanpeng/gin-template/releases/latest) or build from source: +1. Download built binary from [GitHub Releases](https://github.com/songquanpeng/one-api/releases/latest) or build from source: ```shell - git clone https://github.com/songquanpeng/gin-template.git + git clone https://github.com/songquanpeng/one-api.git go mod download - go build -ldflags "-s -w" -o gin-template + go build -ldflags "-s -w" -o one-api ```` 2. Run it: ```shell - chmod u+x gin-template - ./gin-template --port 3000 --log-dir ./logs + chmod u+x one-api + ./one-api --port 3000 --log-dir ./logs ``` 3. Visit [http://localhost:3000/](http://localhost:3000/) and login. The username for the initial account is `root` and the password is `123456`. ### Deploy with Docker -Execute: `docker run -d --restart always -p 3000:3000 -v /home/ubuntu/data/gin-template:/data -v /etc/ssl/certs:/etc/ssl/certs:ro justsong/gin-template` +Execute: `docker run -d --restart always -p 3000:3000 -v /home/ubuntu/data/one-api:/data -v /etc/ssl/certs:/etc/ssl/certs:ro justsong/one-api` -Data will be saved in `/home/ubuntu/data/gin-template`. +Data will be saved in `/home/ubuntu/data/one-api`. ## Configurations The system works out of the box. @@ -85,7 +85,7 @@ After the system starts, use `root` user to log in to the system and do further 2. `SESSION_SECRET`: when set, a fixed session key will be used so that the logged-in users' cookie remains valid across system reboots. + Example: `SESSION_SECRET=random_string` 3. `SQL_DSN`: when set, the target SQL database will be used instead of SQLite. - + Example: `SQL_DSN=root:123456@tcp(localhost:3306)/gin-template` + + Example: `SQL_DSN=root:123456@tcp(localhost:3306)/one-api` ### Command line Arguments 1. `--port `: specify the port number, the default value is `3000`. diff --git a/README.md b/README.md index ca31553d..316f7ed4 100644 --- a/README.md +++ b/README.md @@ -3,40 +3,40 @@

- gin-template logo + one-api logo

-# Gin 项目模板 +# Gin One API _✨ 用于 Gin & React 项目的模板 ✨_

- - license + + license - - release + + release - - release + + release - - GoReportCard + + GoReportCard

- 程序下载 + 程序下载 · - 部署教程 + 部署教程 · - 意见反馈 + 意见反馈 · - 在线演示 + 在线演示

## 功能 @@ -54,25 +54,25 @@ _✨ 用于 Gin & React 项目的模板 ✨_ ## 部署 ### 手动部署 -1. 从 [GitHub Releases](https://github.com/songquanpeng/gin-template/releases/latest) 下载可执行文件或者从源码编译: +1. 从 [GitHub Releases](https://github.com/songquanpeng/one-api/releases/latest) 下载可执行文件或者从源码编译: ```shell - git clone https://github.com/songquanpeng/gin-template.git + git clone https://github.com/songquanpeng/one-api.git go mod download - go build -ldflags "-s -w" -o gin-template + go build -ldflags "-s -w" -o one-api ```` 2. 运行: ```shell - chmod u+x gin-template - ./gin-template --port 3000 --log-dir ./logs + chmod u+x one-api + ./one-api --port 3000 --log-dir ./logs ``` 3. 访问 [http://localhost:3000/](http://localhost:3000/) 并登录。初始账号用户名为 `root`,密码为 `123456`。 更加详细的部署教程[参见此处](https://iamazing.cn/page/how-to-deploy-a-website)。 ### 基于 Docker 进行部署 -执行:`docker run -d --restart always -p 3000:3000 -v /home/ubuntu/data/gin-template:/data -v /etc/ssl/certs:/etc/ssl/certs:ro justsong/gin-template` +执行:`docker run -d --restart always -p 3000:3000 -v /home/ubuntu/data/one-api:/data -v /etc/ssl/certs:/etc/ssl/certs:ro justsong/one-api` -数据将会保存在宿主机的 `/home/ubuntu/data/gin-template` 目录。 +数据将会保存在宿主机的 `/home/ubuntu/data/one-api` 目录。 ## 配置 系统本身开箱即用。 @@ -87,7 +87,7 @@ _✨ 用于 Gin & React 项目的模板 ✨_ 2. `SESSION_SECRET`:设置之后将使用固定的会话密钥,这样系统重新启动后已登录用户的 cookie 将依旧有效。 + 例子:`SESSION_SECRET=random_string` 3. `SQL_DSN`:设置之后将使用指定数据库而非 SQLite。 - + 例子:`SQL_DSN=root:123456@tcp(localhost:3306)/gin-template` + + 例子:`SQL_DSN=root:123456@tcp(localhost:3306)/one-api` ### 命令行参数 1. `--port `: 指定服务器监听的端口号,默认为 `3000`。 diff --git a/common/constants.go b/common/constants.go index 15bdba0c..f3294a42 100644 --- a/common/constants.go +++ b/common/constants.go @@ -8,14 +8,14 @@ import ( var StartTime = time.Now().Unix() // unit: second var Version = "v0.0.0" // this hard coding will be replaced automatically when building, no need to manually change -var SystemName = "项目模板" +var SystemName = "One API" var ServerAddress = "http://localhost:3000" var Footer = "" // Any options with "Secret", "Token" in its key won't be return by GetOptions var SessionSecret = uuid.New().String() -var SQLitePath = "gin-template.db" +var SQLitePath = "one-api.db" var OptionMap map[string]string var OptionMapRWMutex sync.RWMutex diff --git a/controller/file.go b/controller/file.go index 0c1e2efb..64523622 100644 --- a/controller/file.go +++ b/controller/file.go @@ -2,10 +2,10 @@ package controller import ( "fmt" - "gin-template/common" - "gin-template/model" "github.com/gin-gonic/gin" "net/http" + "one-api/common" + "one-api/model" "path/filepath" "strconv" "strings" diff --git a/controller/github.go b/controller/github.go index 780de43b..93c2e8d3 100644 --- a/controller/github.go +++ b/controller/github.go @@ -5,11 +5,11 @@ import ( "encoding/json" "errors" "fmt" - "gin-template/common" - "gin-template/model" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" "net/http" + "one-api/common" + "one-api/model" "strconv" "time" ) diff --git a/controller/misc.go b/controller/misc.go index 8cda624c..aa5a77f8 100644 --- a/controller/misc.go +++ b/controller/misc.go @@ -3,10 +3,10 @@ package controller import ( "encoding/json" "fmt" - "gin-template/common" - "gin-template/model" "github.com/gin-gonic/gin" "net/http" + "one-api/common" + "one-api/model" ) func GetStatus(c *gin.Context) { diff --git a/controller/option.go b/controller/option.go index 394f2896..b5b675c6 100644 --- a/controller/option.go +++ b/controller/option.go @@ -2,10 +2,10 @@ package controller import ( "encoding/json" - "gin-template/common" - "gin-template/model" "github.com/gin-gonic/gin" "net/http" + "one-api/common" + "one-api/model" "strings" ) diff --git a/controller/user.go b/controller/user.go index 7cbef9f7..ce5f2862 100644 --- a/controller/user.go +++ b/controller/user.go @@ -2,12 +2,12 @@ package controller import ( "encoding/json" - "gin-template/common" - "gin-template/model" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" "github.com/google/uuid" "net/http" + "one-api/common" + "one-api/model" "strconv" "strings" ) diff --git a/controller/wechat.go b/controller/wechat.go index f7d8dfc2..5620e8d3 100644 --- a/controller/wechat.go +++ b/controller/wechat.go @@ -4,10 +4,10 @@ import ( "encoding/json" "errors" "fmt" - "gin-template/common" - "gin-template/model" "github.com/gin-gonic/gin" "net/http" + "one-api/common" + "one-api/model" "strconv" "time" ) diff --git a/go.mod b/go.mod index 047dabb2..7da19284 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module gin-template +module one-api // +heroku goVersion go1.18 go 1.18 diff --git a/main.go b/main.go index 42fadbbb..3fd87c1c 100644 --- a/main.go +++ b/main.go @@ -2,16 +2,16 @@ package main import ( "embed" - "gin-template/common" - "gin-template/middleware" - "gin-template/model" - "gin-template/router" "github.com/gin-contrib/gzip" "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-contrib/sessions/redis" "github.com/gin-gonic/gin" "log" + "one-api/common" + "one-api/middleware" + "one-api/model" + "one-api/router" "os" "strconv" ) diff --git a/middleware/auth.go b/middleware/auth.go index 488bf02b..427217e2 100644 --- a/middleware/auth.go +++ b/middleware/auth.go @@ -1,11 +1,11 @@ package middleware import ( - "gin-template/common" - "gin-template/model" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" "net/http" + "one-api/common" + "one-api/model" ) func authHelper(c *gin.Context, minRole int) { diff --git a/middleware/cors.go b/middleware/cors.go index 170cca3e..39c05697 100644 --- a/middleware/cors.go +++ b/middleware/cors.go @@ -7,6 +7,6 @@ import ( func CORS() gin.HandlerFunc { config := cors.DefaultConfig() - config.AllowOrigins = []string{"https://gin-template.vercel.app", "http://localhost:3000/"} + config.AllowOrigins = []string{"https://one-api.vercel.app", "http://localhost:3000/"} return cors.New(config) } diff --git a/middleware/rate-limit.go b/middleware/rate-limit.go index 410ed19e..8e5cff6c 100644 --- a/middleware/rate-limit.go +++ b/middleware/rate-limit.go @@ -3,9 +3,9 @@ package middleware import ( "context" "fmt" - "gin-template/common" "github.com/gin-gonic/gin" "net/http" + "one-api/common" "time" ) diff --git a/middleware/turnstile-check.go b/middleware/turnstile-check.go index b7401b79..26688810 100644 --- a/middleware/turnstile-check.go +++ b/middleware/turnstile-check.go @@ -2,11 +2,11 @@ package middleware import ( "encoding/json" - "gin-template/common" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" "net/http" "net/url" + "one-api/common" ) type turnstileCheckResponse struct { diff --git a/model/file.go b/model/file.go index 2ff7a1f8..390b2e2e 100644 --- a/model/file.go +++ b/model/file.go @@ -1,9 +1,9 @@ package model import ( - "gin-template/common" _ "gorm.io/driver/sqlite" "gorm.io/gorm" + "one-api/common" "os" "path" ) diff --git a/model/main.go b/model/main.go index 0a64651f..d8f7ac3a 100644 --- a/model/main.go +++ b/model/main.go @@ -1,10 +1,10 @@ package model import ( - "gin-template/common" "gorm.io/driver/mysql" "gorm.io/driver/sqlite" "gorm.io/gorm" + "one-api/common" "os" ) diff --git a/model/option.go b/model/option.go index 881d0282..a30a8b1d 100644 --- a/model/option.go +++ b/model/option.go @@ -1,7 +1,7 @@ package model import ( - "gin-template/common" + "one-api/common" "strconv" "strings" ) diff --git a/model/user.go b/model/user.go index b5dd9900..496417b4 100644 --- a/model/user.go +++ b/model/user.go @@ -2,7 +2,7 @@ package model import ( "errors" - "gin-template/common" + "one-api/common" "strings" ) diff --git a/router/api-router.go b/router/api-router.go index e43665af..57775431 100644 --- a/router/api-router.go +++ b/router/api-router.go @@ -1,9 +1,9 @@ package router import ( - "gin-template/controller" - "gin-template/middleware" "github.com/gin-gonic/gin" + "one-api/controller" + "one-api/middleware" ) func SetApiRouter(router *gin.Engine) { diff --git a/router/web-router.go b/router/web-router.go index 1cb06633..8201b09e 100644 --- a/router/web-router.go +++ b/router/web-router.go @@ -2,12 +2,12 @@ package router import ( "embed" - "gin-template/common" - "gin-template/controller" - "gin-template/middleware" "github.com/gin-contrib/static" "github.com/gin-gonic/gin" "net/http" + "one-api/common" + "one-api/controller" + "one-api/middleware" ) func setWebRouter(router *gin.Engine, buildFS embed.FS, indexPage []byte) { diff --git a/web/public/favicon.ico b/web/public/favicon.ico index a11777cc471a4344702741ab1c8a588998b1311a..c2c8de0c5435fe2ffd94ef6da10fa2662cd9ea17 100644 GIT binary patch literal 4286 zcmcK5f2@^r9KiAC+*_U7FZW6~P3jh@`708|s#_stq~%w{YHS)?zeHKdJr#E}G5Uj< zG0jq=#@JY~drMOMW1_Nf?hXB}tDm>rI^OT&e(l-WJ#IC9>~;G-&-p&zAD{2%c|=iy z|H{iF|3>eXMbSl36!ihOq6&CF7yR}=MT&7IV+{`A6pmptUPXT-a4upPgVvxCSu|ij z4mDkSuMRWO5oa6idGK01ggKan+4v34u@%o^1g^sMn1oeuZCZ>DIFo2a=TZ0s=GM9L z{mH$D(Oix_W%q8Mzc2$uIGt!qC-+(p=iGzUcoT19EgaY1cH%``f&3`uhPiV7TJ%Os z;WMuLc$2sI*E(tk!@YW*p8xwe2G`*^OoL?~k4{{ygMHpWKO|8o2JwUYJ%KdLMWJv_ zcjHSqzMRW@VZAhSH4}c{$MrG{^oP7?&Gi!4cLnlm#`7~5LlIw>dv@>Uz-P_LYp`~W z(eMm>N5Z*TzYic@6Fs^1oP2&H;^Eo7gxxrbE(E z{k#q_oW^ndgf2}t-P_|$_rl(+#cgmc&esbeT+c$dzwS*p!~8#ReLk#-kmqk{hjosj z?Hn7B!aev3-jnBi7d#i|Tm-*4=H2{X2xB%1%^&)d(`OSJ@f3`k;r@TeXNcGKRIbCb zG;=lVT0Advdj#t-7F96+&Fw!v#$5WiuZ=J~zdsQ6yNh;n`Sly;`5%OHj)OJ74&L** z3|gB1Ci+;DK4Vy?esfOZV>nNKeVKE|cYoG}^%0^ojVZ{W4lT{!pFX}1&Swo+3+{a> z;(2n8>9FPw!85Bup_tDP@$>gwJ)<8HA9n=T;hnSw9CtG=gOR`}Sa+^-8SaJkF%N~} zX?}42u4soR;l4a)|GyBzF}%M4{$@Kqu64e)>Atyci%Vec-D9Dc!w=Tc{rCW`{R^0f zA{dur3*7TeSOeDnNQ5Y*;hEUSXN^lyhZnpk5U$N<4#PPfLnnl|n8tF1oH(X6;2H)X zg!6v`$MPFu*f#_7YhF_b;kf3>_3gm(=!p=;GzQ~SoPxD}I}CHw-2R)J|5y4tzR&yn zc-)8eaGa&M4%SbIJ~UpzUbt`Vg!c_=z=D z*Nw363UonxG?#zZZZ2CPL=PHO*nte3s{xL;1(VSkhBF;@;jK9 zkf*M+YZ2com$^vr_Zlq0VeCTw_nTX}ckCGdI!?Ski?|+-?Qji8;Tk>LJ7BcM%W!=A z`~uI;e1%BT7=(Us%y@LnS}3QA9M8)JgYLechAIm-IM3y+zpt4Vzd;!=wObm zfi&VZ$7L?c`Rl&IxgDbIdf$aPuEsvN#{HOu5}Z!B{wZ*8p7~r{fc&uEMEL!2o_x;l zd+&GrboNcRf1@3(MKE{1$7?VR!!Qt|VV(aB=dFd`oayiz{UEM}wR^VV8m7Xt2z&D# zGS|Kz-gAA{K%DzRZ%Icz2Iz2DdCRvv%NoG>1WTq@NA~PX1G@VXW z6em&@9TFusQv1WB9+g8YYbz@z)?_AhpI<*9DsJo+B^yhlQVw!RHY&|#tGj3a29D#m A;s5{u literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/web/public/index.html b/web/public/index.html index ea91592b..b7134f53 100644 --- a/web/public/index.html +++ b/web/public/index.html @@ -9,7 +9,7 @@ name="description" content="Web site created using create-react-app" /> - 项目模板 + One API diff --git a/web/public/logo.png b/web/public/logo.png index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0f237a226583e08f89f14a15d86aa330a11151ae 100644 GIT binary patch literal 8085 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 literal 5347 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 X@eDJUQo;Ye2mwlRs { {Footer === '' ? (
- 项目模板 {process.env.REACT_APP_VERSION}{' '} + One API {process.env.REACT_APP_VERSION}{' '} 由{' '} diff --git a/web/src/components/Header.js b/web/src/components/Header.js index c7da2ce4..0b9707bd 100644 --- a/web/src/components/Header.js +++ b/web/src/components/Header.js @@ -105,7 +105,7 @@ const Header = () => { style={{ marginRight: '0.75em' }} />
- 项目模板 + One API
@@ -159,7 +159,7 @@ const Header = () => { logo
- 项目模板 + One API
{renderButtons(false)} diff --git a/web/src/components/LoginForm.js b/web/src/components/LoginForm.js index 015a6547..d54c811f 100644 --- a/web/src/components/LoginForm.js +++ b/web/src/components/LoginForm.js @@ -90,7 +90,7 @@ const LoginForm = () => { return ( -
+
用户登录
@@ -114,7 +114,7 @@ const LoginForm = () => { value={password} onChange={handleChange} /> - @@ -179,7 +179,7 @@ const LoginForm = () => { onChange={handleChange} />
@@ -194,7 +194,7 @@ const PersonalSetting = () => { <> )}