Blame view

泰额版/Food Labeling Management App UniApp/src/utils/labelPreview/nutritionDefaultsMerge.ts 1.73 KB
59e51671   “wangming”   1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
  /**
   * 将管理端保存的营养成分默认值 JSON 合并进 NUTRITION 元素 config(与 Web nutritionManualEntry 字段一致)。
   */
  export function applyNutritionDefaultJsonToConfig(
    baseCfg: Record<string, unknown>,
    jsonStr: string,
  ): Record<string, unknown> {
    const t = String(jsonStr ?? "").trim();
    if (!t.startsWith("{")) return baseCfg;
    let manual: Record<string, string> = {};
    try {
      manual = JSON.parse(t) as Record<string, string>;
    } catch {
      return baseCfg;
    }
    const out: Record<string, unknown> = { ...baseCfg };
    for (const [k, val] of Object.entries(manual)) {
      const v = String(val ?? "").trim();
      if (k === "calories") {
        if (v) out.calories = v;
        continue;
      }
      if (k === "servingsPerContainer") {
        out.servingsPerContainer = v;
        continue;
      }
      if (k === "servingSize") {
        out.servingSize = v;
        continue;
      }
      if (k.startsWith("extra:") && k.endsWith(":value")) {
        const id = k.slice("extra:".length, -":value".length);
        const arr = Array.isArray(out.extraNutrients)
          ? ([...(out.extraNutrients as Record<string, unknown>[])])
          : [];
        const idx = arr.findIndex((row) => String((row as any).id ?? "") === id);
        if (idx >= 0) {
          arr[idx] = { ...arr[idx], value: v };
        }
        out.extraNutrients = arr;
        continue;
      }
      const fr = Array.isArray(out.fixedNutrients)
        ? ([...(out.fixedNutrients as Record<string, unknown>[])])
        : [];
      const idx = fr.findIndex((row) => String((row as any).key ?? "").trim() === k);
      if (idx >= 0) {
        fr[idx] = { ...fr[idx], value: v };
      } else {
        fr.push({ key: k, label: k, value: v, unit: "" });
      }
      out.fixedNutrients = fr;
    }
    return out;
  }