Compare commits

...

1 Commits

Author SHA1 Message Date
hanhan 76ba61d5bb fix(1.0.8)修复构建bug:修复适配餐点类型 2026-07-03 21:58:23 +08:00
2 changed files with 201 additions and 194 deletions
+31 -28
View File
@@ -42,19 +42,19 @@ interface WeeklyMenu {
// 餐食类型配置
const MEAL_TYPES = [
{ code: MealTypeCode.BREAKFAST, label: "早餐" },
{ code: MealTypeCode.FRUIT, label: "早点/水果餐" },
{ code: MealTypeCode.LUNCH, label: "中餐" },
{ code: MealTypeCode.SPECIAL, label: "体弱儿餐" },
{ code: MealTypeCode.SNACK, label: "午点" },
{code: MealTypeCode.BREAKFAST, label: "早餐"},
{code: MealTypeCode.FRUIT, label: "早点/水果餐"},
{code: MealTypeCode.LUNCH, label: "中餐"},
{code: MealTypeCode.SPECIAL, label: "体弱儿餐"},
{code: MealTypeCode.SNACK, label: "午点"},
];
const WEEK_DAYS = [
{ code: 1, label: "周一" },
{ code: 2, label: "周二" },
{ code: 3, label: "周三" },
{ code: 4, label: "周四" },
{ code: 5, label: "周五" },
{code: 1, label: "周一"},
{code: 2, label: "周二"},
{code: 3, label: "周三"},
{code: 4, label: "周四"},
{code: 5, label: "周五"},
];
/**
@@ -128,11 +128,14 @@ function splitCellContent(content: string): string[] {
* 确定餐食类型
*/
function getMealType(mealName: string): MealTypeCode | null {
if (mealName.includes("早") && !mealName.includes("早点")) return MealTypeCode.BREAKFAST;
if (mealName.includes("水果") || mealName.includes("早点")) return MealTypeCode.FRUIT;
if (mealName.includes("") || mealName.includes("餐")) return MealTypeCode.LUNCH;
if (mealName.includes("点") || mealName.includes("点心")) return MealTypeCode.SNACK;
if (mealName.includes("体弱") || mealName.includes("")) return MealTypeCode.SPECIAL;
const header = mealName.trim();
if (header.includes("早餐") || header.includes("餐")) return MealTypeCode.BREAKFAST;
if (header.includes("点") || header.includes("水果餐") || header.includes("早 点") || header.includes("早点/水果餐")) return MealTypeCode.FRUIT;
if (header.includes("中餐") || header.includes("中 餐")) return MealTypeCode.LUNCH;
if (header.includes("午点") || header.includes("午 点")) return MealTypeCode.SNACK;
if (header.includes("体弱儿餐") || header.includes("体弱儿")) return MealTypeCode.SPECIAL;
return null;
}
@@ -178,7 +181,7 @@ function transformTableToWeeklyMenu(tableData: string[][][]): WeeklyMenu {
mealCode: mealType,
dishList: mealItems.map((item, idx) => ({
id: `${dayIndex + 1}-${mealType}-${idx + 1}`,
name: { zh: item },
name: {zh: item},
})),
});
}
@@ -191,7 +194,7 @@ function transformTableToWeeklyMenu(tableData: string[][][]): WeeklyMenu {
(m) => m.dayCode === day.code && m.mealCode === meal.code
);
if (!exists) {
meals.push({ dayCode: day.code, mealCode: meal.code, dishList: [] });
meals.push({dayCode: day.code, mealCode: meal.code, dishList: []});
}
}
}
@@ -199,16 +202,16 @@ function transformTableToWeeklyMenu(tableData: string[][][]): WeeklyMenu {
// 构建 days 数组,使用实际解析出的星期
const days = weekdays
.filter(Boolean)
.map((name, index) => ({ code: index + 1, name: { zh: name } }));
.map((name, index) => ({code: index + 1, name: {zh: name}}));
return {
menuId: `menu-${Date.now()}`,
weekNumber: "",
title: { zh: "食谱", en: "Recipe" },
title: {zh: "食谱", en: "Recipe"},
days: days,
mealCategories: MEAL_TYPES.map((m, i) => ({
code: m.code,
name: { zh: m.label },
name: {zh: m.label},
sort: i + 1,
})),
meals: meals.sort((a, b) => {
@@ -229,11 +232,11 @@ function createEmptyMenu(): WeeklyMenu {
return {
menuId: `menu-${Date.now()}`,
weekNumber: "",
title: { zh: "食谱", en: "Recipe" },
days: WEEK_DAYS.map((d) => ({ code: d.code, name: { zh: d.label } })),
title: {zh: "食谱", en: "Recipe"},
days: WEEK_DAYS.map((d) => ({code: d.code, name: {zh: d.label}})),
mealCategories: MEAL_TYPES.map((m, i) => ({
code: m.code,
name: { zh: m.label },
name: {zh: m.label},
sort: i + 1,
})),
meals: [],
@@ -246,11 +249,11 @@ export async function POST(request: NextRequest) {
const file = formData.get("file") as File | null;
if (!file) {
return NextResponse.json({ error: "未上传文件" }, { status: 400 });
return NextResponse.json({error: "未上传文件"}, {status: 400});
}
if (!file.name.endsWith(".docx")) {
return NextResponse.json({ error: "仅支持 .docx 格式" }, { status: 400 });
return NextResponse.json({error: "仅支持 .docx 格式"}, {status: 400});
}
// 读取文件为 ArrayBuffer
@@ -258,7 +261,7 @@ export async function POST(request: NextRequest) {
const buffer = Buffer.from(arrayBuffer);
// 使用 mammoth 转换为 HTML(保留表格结构)
const { value: htmlContent } = await mammoth.convertToHtml({ buffer });
const {value: htmlContent} = await mammoth.convertToHtml({buffer});
// 使用 cheerio 提取表格数据
const tableData = extractRawDataFromHtml(htmlContent);
@@ -273,8 +276,8 @@ export async function POST(request: NextRequest) {
} catch (error) {
console.error("Parse error:", error);
return NextResponse.json(
{ error: "文件解析失败", details: String(error) },
{ status: 500 }
{error: "文件解析失败", details: String(error)},
{status: 500}
);
}
}
+4
View File
@@ -1,3 +1,7 @@
allowBuilds:
msw: true
sharp: true
unrs-resolver: true
ignoredBuiltDependencies:
- sharp
- unrs-resolver