From 6d61a336d618ca4448d635264a85f9a8175dac2e Mon Sep 17 00:00:00 2001 From: yml2213 Date: Thu, 11 Jun 2026 08:00:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E9=A1=B5=E9=9D=A2=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 22 ++++----- backend/.env.example | 3 ++ backend/.env.prod.example | 3 ++ deploy/README.md | 4 +- deploy/caddy/Caddyfile | 6 +++ deploy/caddy/Dockerfile | 3 ++ deploy/docker-compose.prod.yml | 2 + .../features/admin/views/AdminChatsView.vue | 3 +- .../admin/views/AdminDashboardView.vue | 19 ++++---- .../admin/views/AdminFinanceDetailsView.vue | 3 +- .../admin/views/AdminListingDetailView.vue | 3 +- .../admin/views/AdminListingReviewView.vue | 3 +- .../admin/views/AdminListingsView.vue | 3 +- .../features/admin/views/AdminLoginView.vue | 3 +- .../admin/views/AdminOrderDetailView.vue | 3 +- .../features/admin/views/AdminOrdersView.vue | 3 +- .../admin/views/AdminPaymentsView.vue | 3 +- .../admin/views/AdminWalletLedgerView.vue | 3 +- .../composables/useDesktopNotification.ts | 3 +- frontend/src/layouts/AdminLayout.vue | 45 +++++++++--------- frontend/src/router/adminRoutes.ts | 46 ++++++++++--------- frontend/src/router/index.ts | 7 +-- frontend/src/router/mobileHost.ts | 6 ++- frontend/src/shared/utils/adminPath.ts | 23 ++++++++++ frontend/src/shared/utils/authStorage.ts | 4 +- scripts/deploy-prod.sh | 13 +++++- scripts/dev.sh | 3 +- 27 files changed, 157 insertions(+), 85 deletions(-) create mode 100644 frontend/src/shared/utils/adminPath.ts diff --git a/README.md b/README.md index 71b7261..03a0986 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ 前端地址:`http://localhost:5173` -后台地址:`http://localhost:5173/admin/login`,开发态默认管理员为 `admin / admin123456`。 +后台地址默认:`http://localhost:5173/admin/login`。可通过 `VITE_ADMIN_BASE_PATH` 调整后台页面入口。 如需拆分调试,可手动执行: @@ -55,19 +55,19 @@ npm run dev - 文件上传已接入 MinIO,发布账号资产截图和申诉证据可上传 JPG、PNG、WebP 或 PDF。 - 如果本机有代理工具占用 `127.0.0.1:9000`,MinIO 开发地址使用 `http://localhost:9000`。 - 钱包账务当前为开发态模拟流水,可通过 `GET /api/wallet/balance` 和 `GET /api/wallet/ledger` 查看。 -- 后台资金流水已接入,页面为 `http://localhost:5173/admin/wallet-ledger`,支持按用户、订单和业务类型查询。 +- 后台资金流水已接入,支持按用户、订单和业务类型查询。 - 站内信已支持订单关键节点自动写入,可通过 `GET /api/notifications` 查看。 - 订单群聊已支持支付成功后自动创建,租客、号主和客服可在移动端消息页进入会话。 -- 申诉仲裁已支持订单双方发起申诉、开发态后台落账处理,后台页面为 `http://localhost:5173/admin/disputes`。 -- 系统配置已支持默认配置初始化和后台编辑,页面为 `http://localhost:5173/admin/system-configs`,更新会写入审计日志。 -- 后台已使用独立登录、图形验证码和独立管理 UI,页面为 `http://localhost:5173/admin/login`;开发态默认管理员为 `admin / admin123456`。 -- 后台仪表盘已接入真实统计数据,页面为 `http://localhost:5173/admin/dashboard`。 -- 用户管理后台已接入,页面为 `http://localhost:5173/admin/users`,支持冻结和解冻用户。 -- 订单管理后台已接入,页面为 `http://localhost:5173/admin/orders`,支持查看全量订单和交接记录。 -- 商品管理后台已接入,页面为 `http://localhost:5173/admin/listings`,支持查看全量商品、商品详情、强制下架和标记异常。 +- 申诉仲裁已支持订单双方发起申诉、开发态后台落账处理。 +- 系统配置已支持默认配置初始化和后台编辑,更新会写入审计日志。 +- 后台已使用独立登录、图形验证码和独立管理 UI,页面入口由 `VITE_ADMIN_BASE_PATH` 控制。 +- 后台仪表盘已接入真实统计数据。 +- 用户管理后台已接入,支持冻结和解冻用户。 +- 订单管理后台已接入,支持查看全量订单和交接记录。 +- 商品管理后台已接入,支持查看全量商品、商品详情、强制下架和标记异常。 - 订单详情后台已支持客服关闭和标记异常,相关操作会写入审计日志并通知双方。 -- 商品审核后台已接入,页面为 `http://localhost:5173/admin/listings/review`,审核员可查看账号资产截图后通过或拒绝。 -- 审计日志后台已接入,页面为 `http://localhost:5173/admin/audit-logs`,支持查看高风险操作明细。 +- 商品审核后台已接入,审核员可查看账号资产截图后通过或拒绝。 +- 审计日志后台已接入,支持查看高风险操作明细。 ## 文档 diff --git a/backend/.env.example b/backend/.env.example index b4e7ff2..58792c0 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -14,6 +14,9 @@ REDIS_DB=0 JWT_SECRET=change-me +# 前端后台页面入口;本地默认 /admin,生产建议改成不公开的单段路径。 +VITE_ADMIN_BASE_PATH=/admin + # 首次启动且管理员表为空时,按以下变量创建首个超级管理员。 # 本地开发可自行填写,生产环境请使用随机强密码,创建后建议从 .env 移除。 ADMIN_BOOTSTRAP_USERNAME= diff --git a/backend/.env.prod.example b/backend/.env.prod.example index 152cf96..f495ab7 100644 --- a/backend/.env.prod.example +++ b/backend/.env.prod.example @@ -19,6 +19,9 @@ REDIS_DB=0 JWT_SECRET=change-to-a-long-random-secret +# 前端后台页面入口;生产请改成不公开的单段路径,不要使用 /admin。 +VITE_ADMIN_BASE_PATH=/manage-7x9k2p + # 首次启动且管理员表为空时创建首个超级管理员;生产密码至少 12 位且包含字母和数字。 # 创建成功后建议从 .env 移除,后续管理员通过后台维护。 ADMIN_BOOTSTRAP_USERNAME=change-admin-username diff --git a/deploy/README.md b/deploy/README.md index a90acdd..d63ae1b 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -108,8 +108,8 @@ curl https://你的域名/api/health 浏览器访问: ```text -https://hfb.221329.cc.cd -https://hfb.221329.cc.cd/admin/login +https://你的域名 +https://你的域名/你配置的后台入口/login ``` Caddy 证书和 ACME 账号数据保存在 Docker 卷 `caddy_data`、`caddy_config` 中。不要随意删除这两个卷,否则 Caddy 会重新申请证书,频繁重建可能触发证书签发频率限制。 diff --git a/deploy/caddy/Caddyfile b/deploy/caddy/Caddyfile index 2e7f2e8..dff2704 100644 --- a/deploy/caddy/Caddyfile +++ b/deploy/caddy/Caddyfile @@ -48,6 +48,12 @@ } } + # 生产后台页面使用构建时配置的隐藏入口,旧 /admin 入口直接返回 404。 + @legacy_admin path /admin /admin/* + handle @legacy_admin { + respond 404 + } + # 其余流量返回前端静态资源,未命中的路径交给 SPA 处理。 handle { root * /srv/dist diff --git a/deploy/caddy/Dockerfile b/deploy/caddy/Dockerfile index b118227..8ce75ba 100644 --- a/deploy/caddy/Dockerfile +++ b/deploy/caddy/Dockerfile @@ -1,6 +1,9 @@ # 第一阶段:构建前端静态资源 FROM node:24-alpine AS build +ARG VITE_ADMIN_BASE_PATH=/manage-7x9k2p +ENV VITE_ADMIN_BASE_PATH=${VITE_ADMIN_BASE_PATH} + WORKDIR /src COPY frontend/package*.json ./ RUN npm install diff --git a/deploy/docker-compose.prod.yml b/deploy/docker-compose.prod.yml index 50e713a..76daf0e 100644 --- a/deploy/docker-compose.prod.yml +++ b/deploy/docker-compose.prod.yml @@ -3,6 +3,8 @@ services: build: context: .. dockerfile: deploy/caddy/Dockerfile + args: + VITE_ADMIN_BASE_PATH: ${VITE_ADMIN_BASE_PATH:-/manage-7x9k2p} restart: unless-stopped environment: TZ: Asia/Shanghai diff --git a/frontend/src/features/admin/views/AdminChatsView.vue b/frontend/src/features/admin/views/AdminChatsView.vue index 7b2a1bb..0e17a9a 100644 --- a/frontend/src/features/admin/views/AdminChatsView.vue +++ b/frontend/src/features/admin/views/AdminChatsView.vue @@ -19,6 +19,7 @@ import ChatAttachmentImage from '@/components/ChatAttachmentImage.vue' import { useChatSSE, type ChatEvent } from '@/features/chats/composables/useChatSSE' import { useDesktopNotification } from '@/features/chats/composables/useDesktopNotification' import NotificationSettings from '@/features/chats/components/NotificationSettings.vue' +import { adminPath } from '@/shared/utils/adminPath' import { formatDateMinute } from '@/shared/utils/time' import TransferDialog from '../components/TransferDialog.vue' import QuickReplyDialog from '../components/QuickReplyDialog.vue' @@ -407,7 +408,7 @@ function getSupportName(item: ChatConversation) {
转接 - + 查看订单
diff --git a/frontend/src/features/admin/views/AdminDashboardView.vue b/frontend/src/features/admin/views/AdminDashboardView.vue index a316e68..ad3e67b 100644 --- a/frontend/src/features/admin/views/AdminDashboardView.vue +++ b/frontend/src/features/admin/views/AdminDashboardView.vue @@ -18,6 +18,7 @@ import { import { fetchAdminDashboard, type AdminDashboard } from '@/features/admin/api/adminDashboard' import { useAdminTable } from '@/features/admin/composables/useAdminTable' import { formatCentWithSymbol } from '@/shared/utils/money' +import { adminPath } from '@/shared/utils/adminPath' import { disputeStatusLabel, orderStatusLabel } from '@/shared/utils/statusLabels' import { formatDateTime } from '@/shared/utils/time' @@ -121,7 +122,7 @@ const {
- +
待仲裁申诉 需要处理的用户争议 @@ -130,7 +131,7 @@ const { dashboard.pending.disputes }} - +
待审核商品 新提交的商品审核 @@ -168,27 +169,27 @@ const {