{"version":3,"file":"lodop.mjs","sources":["../../../../packages/abc/lodop/lodop.service.ts","../../../../packages/abc/lodop/lodop.module.ts","../../../../packages/abc/lodop/lodop.ts"],"sourcesContent":["import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { Observable, of, Subject } from 'rxjs';\n\nimport { AlainConfigService, AlainLodopConfig } from '@delon/util/config';\nimport { LazyService } from '@delon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { Lodop, LodopPrintResult, LodopResult } from './lodop.types';\n\n@Injectable({ providedIn: 'root' })\nexport class LodopService implements OnDestroy {\n  private readonly scriptSrv = inject(LazyService);\n  private readonly cogSrv = inject(AlainConfigService);\n\n  private defaultConfig: AlainLodopConfig;\n  private _cog!: AlainLodopConfig;\n  private pending = false;\n  private _lodop: Lodop | null = null;\n  private _init = new Subject<LodopResult>();\n  private _events = new Subject<LodopPrintResult>();\n  private printBuffer: NzSafeAny[] = [];\n\n  constructor() {\n    this.defaultConfig = this.cogSrv.merge('lodop', {\n      url: 'http://localhost:8443/CLodopfuncs.js',\n      name: 'CLODOP',\n      companyName: '',\n      checkMaxCount: 100\n    })!;\n    this.cog = this.defaultConfig;\n  }\n\n  /**\n   * Get or set configuration, **Note:** Resetting will invert and reload script resources\n   *\n   * 获取或重新设置配置，**注：**重新设置会倒置重新加载脚本资源\n   */\n  get cog(): AlainLodopConfig {\n    return this._cog;\n  }\n  set cog(value: AlainLodopConfig) {\n    this._cog = {\n      ...this.defaultConfig,\n      ...value\n    };\n  }\n\n  /**\n   * Event change notification\n   *\n   * 事件变更通知\n   */\n  get events(): Observable<LodopPrintResult> {\n    return this._events.asObservable();\n  }\n\n  /**\n   * Get lodop object\n   *\n   * 获取 lodop 对象\n   */\n  get lodop(): Observable<LodopResult> {\n    if (this._lodop) return of({ ok: true, lodop: this._lodop } as LodopResult);\n    if (this.pending) return this._init.asObservable();\n\n    this.request();\n\n    return this._init.asObservable();\n  }\n\n  /**\n   * Get printer list\n   *\n   * 获取打印机列表\n   */\n  get printer(): string[] {\n    this.check();\n    const ret: string[] = [];\n    const count = this._lodop!.GET_PRINTER_COUNT();\n    for (let index = 0; index < count; index++) {\n      ret.push(this._lodop!.GET_PRINTER_NAME(index));\n    }\n    return ret;\n  }\n\n  private check(): void {\n    if (!this._lodop) throw new Error(`请务必先调用 lodop 获取对象`);\n  }\n\n  private request(): void {\n    this.pending = true;\n    const urlObj = new URL(this.cog.url!);\n    urlObj.searchParams.set('name', this.cog.name!);\n    const url = urlObj.toString();\n\n    let checkMaxCount = this.cog.checkMaxCount as number;\n    const onResolve = (status: NzSafeAny, error?: NzSafeAny): void => {\n      this._init.next({\n        ok: status === 'ok',\n        status,\n        error,\n        lodop: this._lodop!\n      });\n    };\n    const checkStatus = (): void => {\n      --checkMaxCount;\n      if (this._lodop!.webskt && this._lodop!.webskt.readyState === 1) {\n        onResolve('ok');\n      } else {\n        if (checkMaxCount < 0) {\n          onResolve('check-limit');\n          return;\n        }\n        setTimeout(() => checkStatus(), 100);\n      }\n    };\n\n    this.scriptSrv.loadScript(url).then((res: NzSafeAny) => {\n      if (res.status !== 'ok') {\n        this.pending = false;\n        onResolve('script-load-error', res[0]);\n        return;\n      }\n      const win = window as NzSafeAny;\n      if (Object.prototype.hasOwnProperty.call(win, this.cog.name!)) {\n        this._lodop = win[this.cog.name!] as Lodop;\n      }\n      if (this._lodop === null) {\n        onResolve('load-variable-name-error', { name: this.cog.name });\n        return;\n      }\n      this._lodop.SET_LICENSES(this.cog.companyName!, this.cog.license!, this.cog.licenseA, this.cog.licenseB);\n      checkStatus();\n    });\n  }\n\n  /**\n   * Reset lodop object\n   *\n   * 重置 lodop 对象\n   */\n  reset(): void {\n    this._lodop = null;\n    this.pending = false;\n    this.request();\n  }\n\n  /**\n   * Attach code to the `lodop` object, the string class supports dynamic parameters of `{{key}}`,\n   * **Note:** The code refers to the string data generated by the print design\n   *\n   * 附加代码至 `lodop` 对象上，字符串类支持 `{{key}}` 的动态参数，**注：** 代码是指打印设计所产生字符串数据\n   */\n  attachCode(code: string, contextObj?: NzSafeAny, parser?: RegExp): void {\n    this.check();\n    if (!parser) parser = /LODOP\\.([^(]+)\\(([^\\n]+)?\\);/i;\n    code.split('\\n').forEach(line => {\n      const res = parser!.exec(line.trim());\n      if (!res) return;\n      const fn = this._lodop![res[1]];\n      if (fn) {\n        let arr: NzSafeAny[] | null = null;\n        try {\n          const fakeFn = new Function(`return [${res[2]}]`);\n          arr = fakeFn();\n        } catch {}\n\n        if (arr != null && Array.isArray(arr) && contextObj) {\n          for (let i = 0; i < arr.length; i++) {\n            if (typeof arr[i] === 'string') {\n              arr[i] = (arr[i] as string).replace(/{{(.*?)}}/g, (_match, key) => contextObj[key.trim()] ?? '');\n            }\n          }\n        }\n        fn.apply(this._lodop, arr!);\n      }\n    });\n  }\n\n  /**\n   * The code is automatically returned after opening the print design and closing,\n   * **Note:** Automatically listen for the `On_Return` event, and it will be removed after running\n   *\n   * 打开打印设计关闭后自动返回代码，**注：** 自动监听 `On_Return` 事件，运行后会移除\n   */\n  design(): Promise<string> {\n    this.check();\n    const tid = this._lodop!.PRINT_DESIGN();\n    return new Promise(resolve => {\n      this._lodop!.On_Return = (taskID: string, value: boolean | string) => {\n        if (tid !== taskID) return;\n        this._lodop!.On_Return = null;\n        resolve(`${value}`);\n      };\n    });\n  }\n  private printDo(): void {\n    const data = this.printBuffer.shift();\n    if (!data) return;\n    this.attachCode(data.code, data.item, data.parser);\n    const tid = this._lodop!.PRINT();\n    this._lodop!.On_Return = (taskID: string, value: boolean | string) => {\n      if (tid !== taskID) return;\n      this._lodop!.On_Return = null;\n      this._events.next({\n        ok: value === true,\n        error: value === true ? null : value,\n        ...data\n      });\n      this.printDo();\n    };\n  }\n\n  /**\n   * Print immediately, generally used for batch printing\n   *\n   * 立即打印，一般用于批量套打\n   */\n  print(code: string, contextObj: NzSafeAny, parser?: RegExp): void {\n    this.check();\n    if (contextObj) {\n      this.printBuffer.push(\n        ...(Array.isArray(contextObj) ? contextObj : [contextObj]).map(item => {\n          return { code, parser, item };\n        })\n      );\n    }\n    this.printDo();\n  }\n\n  ngOnDestroy(): void {\n    this._init.unsubscribe();\n    this._events.unsubscribe();\n  }\n}\n","import { NgModule } from '@angular/core';\n\n@NgModule({})\nexport class LodopModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}