Blame view

泰额版/Food Labeling Management App UniApp/src/utils/print/templateRenderer.ts 1.69 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
56
57
58
  import type {
    LabelTemplateData,
    StructuredEscTemplate,
    StructuredLabelTemplate,
    StructuredTscTemplate,
  } from './types/printer'
  
  function resolveTemplateValue (key: string, data: LabelTemplateData): string {
    const value = data[key]
    if (value == null) return ''
    return String(value)
  }
  
  export function applyTemplateData (content: string, data: LabelTemplateData = {}): string {
    return String(content || '').replace(/\{\{\s*([\w.-]+)\s*\}\}/g, (_, key: string) => resolveTemplateValue(key, data))
  }
  
  export function resolveTscTemplate (
    template: StructuredLabelTemplate,
    data: LabelTemplateData = {}
  ): StructuredTscTemplate {
    if (!template.tsc) {
      throw new Error(`Template "${template.key}" does not support TSC printers`)
    }
    return {
      ...template.tsc,
      items: template.tsc.items.map((item) => {
        if (item.type === 'text') {
          return { ...item, text: applyTemplateData(item.text, data) }
        }
        if (item.type === 'qrcode' || item.type === 'barcode') {
          return { ...item, value: applyTemplateData(item.value, data) }
        }
        return { ...item }
      }),
    }
  }
  
  export function resolveEscTemplate (
    template: StructuredLabelTemplate,
    data: LabelTemplateData = {}
  ): StructuredEscTemplate {
    if (!template.esc) {
      throw new Error(`Template "${template.key}" does not support ESC printers`)
    }
    return {
      ...template.esc,
      items: template.esc.items.map((item) => {
        if (item.type === 'text') {
          return { ...item, text: applyTemplateData(item.text, data) }
        }
        if (item.type === 'qrcode' || item.type === 'barcode') {
          return { ...item, value: applyTemplateData(item.value, data) }
        }
        return { ...item }
      }),
    }
  }