+
-
内容管理
- {RESOURCE_CONFIGS.map((r) => (
-
- ))}
-
+
-
-
+ {/* 给下面那个 fixed 区块让位,避免遮住最后几个菜单 */}
+
-
{children}
+ {/*
+ 数据源区:独立的 fixed 元素,钉在视口左下角。
+ 它不在侧边栏里,也不参与任何 flex 布局,因此页面长短、导航多少、窗口高低都影响不到它。
+ */}
+
+
查看的数据源
+
+ {(['production', 'develop'] as DataSource[]).map((key) => {
+ const disabled = key === 'develop' && !developAvailable;
+ return (
+
+ );
+ })}
+
+
+ 只影响你自己的查看与编辑,不影响小程序
+
+
+
+ 线上小程序数据源
+
+
+
+
+
+ {ENV_LABEL[miniEnv]}
+
+
+
+
+
+
+
+
+
+ {miniEnv === 'develop' && (
+
+ ⚠ 线上小程序当前读的是开发库
+ ——所有用户打开小程序看到的都是开发库数据,测完请及时切回生产库。
+
+ )}
+ {miniEnv !== 'develop' && viewEnv === 'develop' && (
+
+ 你正在查看开发库的数据(仅影响你自己,小程序仍在读生产库)
+
+ )}
+ {children}
+
+
+ {confirmOpen && (
+
+
+
确认切换线上小程序数据源?
+
+
+ 即将把线上小程序从
+ {ENV_LABEL[miniEnv]}
+ 切换到
+ {ENV_LABEL[nextMiniEnv]}。
+
+ {nextMiniEnv === 'develop' ? (
+
+ 切换后,所有用户在微信里打开小程序看到的都是开发库数据
+ (旧开发库:132 个用户、3 门课程,首页两个栏目为空)。
+ 他们会以为课程丢失,请务必在测试结束后切回生产库。
+
+ ) : (
+
+ 将恢复为生产库,用户看到的即真实数据。
+
+ )}
+ {error &&
{error}
}
+
+
+
+
+
+
+
+ )}
);
}
diff --git a/yelaymaths_admin/src/lib/api.ts b/yelaymaths_admin/src/lib/api.ts
index 8e700eb..76bbf61 100644
--- a/yelaymaths_admin/src/lib/api.ts
+++ b/yelaymaths_admin/src/lib/api.ts
@@ -1,8 +1,16 @@
'use client';
import { clearToken, getToken } from './auth';
+import { getViewEnv } from './env';
-const BASE = (process.env.NEXT_PUBLIC_API_BASE_URL ?? 'http://127.0.0.1:3000').replace(/\/+$/, '');
+/**
+ * 服务端地址。`NEXT_PUBLIC_*` 是**构建时写死**的,所以这个兜底值必须指向真实部署地址——
+ * 之前兜底写了 127.0.0.1:3000,改成「本机构建、上传产物」之后,
+ * 构建时读不到环境变量就落到这个兜底值,结果线上后台在拿访问者的电脑当服务器,全部请求失败。
+ *
+ * 需要指向别的环境时,构建前设置 NEXT_PUBLIC_API_BASE_URL 覆盖即可。
+ */
+const BASE = (process.env.NEXT_PUBLIC_API_BASE_URL || 'https://yelaymaths-api.yeomai.site').replace(/\/+$/, '');
export interface ApiFailure {
code: number;
@@ -20,6 +28,8 @@ async function request