修复巡检报告隐私字段并记录 Wave4-5 公网验证(05-29-frontend-ux-wave4-5-finance-admin-refresh)

这个提交包含在:
2026-05-29 09:37:57 +08:00
父节点 bfb1cb6e65
当前提交 41b9c2236e
共修改 40 个文件,包含 1919 行新增和 20 行删除
+18 -19
查看文件
@@ -8,8 +8,8 @@ function present(key) {
return Boolean(process.env[key]?.trim());
}
function maskedPresence(keys) {
return Object.fromEntries(keys.map((key) => [key, present(key)]));
function readinessMap(entries) {
return Object.fromEntries(entries.map(([label, isReady]) => [label, Boolean(isReady)]));
}
function existingFileFrom(keys) {
@@ -56,13 +56,11 @@ async function fetchJson(url) {
}
function buildStaticChecks() {
const liveSmokeKeys = [
"LIVE_SMOKE_ADMIN_IDENTIFIER",
"LIVE_SMOKE_ADMIN_PASSWORD",
"LIVE_SMOKE_EMPLOYEE_IDENTIFIER",
"LIVE_SMOKE_EMPLOYEE_PASSWORD",
];
const liveSmokeReady = liveSmokeKeys.every(present);
const adminCredentialReady = present("LIVE_SMOKE_ADMIN_IDENTIFIER") && present("LIVE_SMOKE_ADMIN_PASSWORD");
const employeeCredentialReady = present("LIVE_SMOKE_EMPLOYEE_IDENTIFIER") && present("LIVE_SMOKE_EMPLOYEE_PASSWORD");
const managerCredentialReady = present("LIVE_SMOKE_MANAGER_IDENTIFIER") && present("LIVE_SMOKE_MANAGER_PASSWORD");
const financeCredentialReady = present("LIVE_SMOKE_FINANCE_IDENTIFIER") && present("LIVE_SMOKE_FINANCE_PASSWORD");
const liveSmokeReady = adminCredentialReady && employeeCredentialReady;
const ocrUserReady = (
(present("PLAYWRIGHT_OCR_LIVE_IDENTIFIER") && present("PLAYWRIGHT_OCR_LIVE_PASSWORD")) ||
(present("LIVE_SMOKE_EMPLOYEE_IDENTIFIER") && present("LIVE_SMOKE_EMPLOYEE_PASSWORD"))
@@ -76,13 +74,14 @@ function buildStaticChecks() {
return {
baseUrl,
liveSmokeReady,
liveSmoke: maskedPresence(liveSmokeKeys),
liveSmokeOptional: maskedPresence([
"LIVE_EXPECT_WECOM_STATUS",
"LIVE_SMOKE_MANAGER_IDENTIFIER",
"LIVE_SMOKE_MANAGER_PASSWORD",
"LIVE_SMOKE_FINANCE_IDENTIFIER",
"LIVE_SMOKE_FINANCE_PASSWORD",
liveSmoke: readinessMap([
["adminCredentialReady", adminCredentialReady],
["employeeCredentialReady", employeeCredentialReady],
]),
liveSmokeOptional: readinessMap([
["expectedWecomStatusReady", present("LIVE_EXPECT_WECOM_STATUS")],
["managerCredentialReady", managerCredentialReady],
["financeCredentialReady", financeCredentialReady],
]),
liveOcrReady: ocrUserReady && invoiceSampleReady,
liveOcr: {
@@ -100,13 +99,13 @@ function buildStaticChecks() {
function addMissing(checks) {
if (!checks.liveSmokeReady) {
for (const [key, value] of Object.entries(checks.liveSmoke)) {
if (!value) checks.missing.push(key);
for (const [label, value] of Object.entries(checks.liveSmoke)) {
if (!value) checks.missing.push(label);
}
}
if (!checks.liveOcr.userReady) {
checks.missing.push("PLAYWRIGHT_OCR_LIVE_IDENTIFIER/PASSWORD 或 LIVE_SMOKE_EMPLOYEE_*");
checks.missing.push("ocrOrEmployeeCredentialReady");
}
if (!checks.liveOcr.invoiceSampleReady) {
checks.missing.push("PLAYWRIGHT_OCR_LIVE_FILE 或 PLAYWRIGHT_OCR_LIVE_DIR 中的 PDF 样票");