V1-V6 收口移动视口与 PDF 发票上传

这个提交包含在:
2026-05-10 23:30:13 +08:00
父节点 3c9cd3aa41
当前提交 491b42a232
共修改 47 个文件,包含 387 行新增和 244 行删除
+30 -3
查看文件
@@ -1,5 +1,6 @@
#!/usr/bin/env node
import { existsSync } from "node:fs";
import { existsSync, readdirSync, statSync } from "node:fs";
import { extname } from "node:path";
const baseUrl = (process.env.LIVE_SMOKE_BASE_URL || "https://oa.hyinda.com").trim().replace(/\/$/, "");
@@ -16,6 +17,28 @@ function existingFileFrom(keys) {
return values.find((value) => existsSync(value)) || "";
}
function isPdfFile(value) {
if (!value || !existsSync(value)) {
return false;
}
try {
return statSync(value).isFile() && extname(value).toLowerCase() === ".pdf";
} catch {
return false;
}
}
function hasPdfFileInDir(value) {
if (!value || !existsSync(value)) {
return false;
}
try {
return statSync(value).isDirectory() && readdirSync(value).some((entry) => extname(entry).toLowerCase() === ".pdf");
} catch {
return false;
}
}
async function fetchJson(url) {
try {
const response = await fetch(url, { signal: AbortSignal.timeout(10_000) });
@@ -46,7 +69,9 @@ function buildStaticChecks() {
);
const invoiceFile = existingFileFrom(["PLAYWRIGHT_OCR_LIVE_FILE", "LIVE_OCR_INVOICE_FILE"]);
const invoiceBatchDir = process.env.PLAYWRIGHT_OCR_LIVE_DIR?.trim() || "";
const invoiceSampleReady = Boolean(invoiceFile) || (Boolean(invoiceBatchDir) && existsSync(invoiceBatchDir));
const invoiceFileReady = isPdfFile(invoiceFile);
const invoiceBatchDirReady = hasPdfFileInDir(invoiceBatchDir);
const invoiceSampleReady = invoiceFileReady || invoiceBatchDirReady;
return {
baseUrl,
@@ -64,7 +89,9 @@ function buildStaticChecks() {
userReady: ocrUserReady,
invoiceSampleReady,
invoiceFileProvided: Boolean(invoiceFile),
invoiceFileReady,
invoiceBatchDirProvided: Boolean(invoiceBatchDir),
invoiceBatchDirReady,
allowDuplicate: process.env.PLAYWRIGHT_OCR_ALLOW_DUPLICATE === "1",
},
missing: [],
@@ -82,7 +109,7 @@ function addMissing(checks) {
checks.missing.push("PLAYWRIGHT_OCR_LIVE_IDENTIFIER/PASSWORD 或 LIVE_SMOKE_EMPLOYEE_*");
}
if (!checks.liveOcr.invoiceSampleReady) {
checks.missing.push("PLAYWRIGHT_OCR_LIVE_FILE 或 PLAYWRIGHT_OCR_LIVE_DIR");
checks.missing.push("PLAYWRIGHT_OCR_LIVE_FILE 或 PLAYWRIGHT_OCR_LIVE_DIR 中的 PDF 样票");
}
}
+2 -3
查看文件
@@ -29,9 +29,8 @@ const checklist = [
"移动首页无 PC 侧边栏或桌面表格",
"报销草稿可新建、编辑、删除",
"报销详情不出现 draft/bound/费用类型 code/绑定整单/发票池/OCR",
"拍照上传打开摄像头",
"选择图片支持 JPG/PNG/WEBP",
"选择 PDF 不打开摄像头并可选中文件",
"PDF 发票上传入口不打开摄像头并可选中文件",
"发票上传不出现拍照或图片入口",
"真实发票上传后有识别中、终态和耗时记录",
"重复、已使用或识别失败发票显示可理解原因",
"审批待办可查看并操作",