@pisell/pisellos 2.2.301 → 2.2.303

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/model/strategy/adapter/dataVariant/evaluator.d.ts +18 -2
  2. package/dist/model/strategy/adapter/dataVariant/evaluator.js +287 -101
  3. package/dist/model/strategy/adapter/dataVariant/type.d.ts +25 -0
  4. package/dist/model/strategy/adapter/itemRule/adapter.d.ts +4 -1
  5. package/dist/model/strategy/adapter/itemRule/adapter.js +135 -35
  6. package/dist/model/strategy/adapter/itemRule/evaluator.d.ts +8 -1
  7. package/dist/model/strategy/adapter/itemRule/evaluator.js +25 -1
  8. package/dist/model/strategy/adapter/itemRule/type.d.ts +44 -0
  9. package/dist/model/strategy/adapter/itemRule/type.js +19 -1
  10. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +10 -7
  11. package/dist/modules/Discount/index.d.ts +2 -0
  12. package/dist/modules/Discount/index.js +41 -5
  13. package/dist/modules/Discount/types.d.ts +21 -0
  14. package/dist/modules/OpenData/index.d.ts +15 -2
  15. package/dist/modules/OpenData/index.js +307 -19
  16. package/dist/modules/OpenData/types.d.ts +55 -0
  17. package/dist/modules/OpenData/types.js +7 -1
  18. package/dist/modules/OpenData/utils.d.ts +21 -1
  19. package/dist/modules/OpenData/utils.js +138 -0
  20. package/dist/modules/Order/index.d.ts +50 -7
  21. package/dist/modules/Order/index.js +1690 -815
  22. package/dist/modules/Order/salesNotes.d.ts +31 -0
  23. package/dist/modules/Order/salesNotes.js +492 -0
  24. package/dist/modules/Order/types.d.ts +117 -10
  25. package/dist/modules/Order/types.js +6 -1
  26. package/dist/modules/Order/utils/virtualSettlement.d.ts +63 -0
  27. package/dist/modules/Order/utils/virtualSettlement.js +284 -0
  28. package/dist/modules/Order/utils.d.ts +5 -1
  29. package/dist/modules/Order/utils.js +138 -33
  30. package/dist/modules/Payment/walletpass.js +20 -21
  31. package/dist/modules/Product/types.d.ts +23 -0
  32. package/dist/modules/ProductList/index.d.ts +2 -1
  33. package/dist/modules/ProductList/index.js +100 -20
  34. package/dist/modules/ProductList/types.d.ts +10 -0
  35. package/dist/modules/Rules/index.d.ts +5 -0
  36. package/dist/modules/Rules/index.js +30 -14
  37. package/dist/modules/SalesSummary/index.d.ts +1 -0
  38. package/dist/modules/SalesSummary/index.js +4 -3
  39. package/dist/modules/SalesSummary/types.d.ts +1 -0
  40. package/dist/modules/SalesSummary/utils.d.ts +1 -0
  41. package/dist/modules/SalesSummary/utils.js +21 -1
  42. package/dist/plugins/request.d.ts +2 -1
  43. package/dist/plugins/request.js +4 -2
  44. package/dist/server/index.d.ts +21 -0
  45. package/dist/server/index.js +1774 -1285
  46. package/dist/server/modules/order/types.d.ts +50 -0
  47. package/dist/server/modules/order/types.js +2 -0
  48. package/dist/server/utils/small-ticket.d.ts +4 -1
  49. package/dist/server/utils/small-ticket.js +461 -96
  50. package/dist/solution/BaseSales/index.d.ts +26 -3
  51. package/dist/solution/BaseSales/index.js +1492 -873
  52. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +2 -0
  53. package/dist/solution/BaseSales/utils/parseSalesResponse.js +1 -1
  54. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
  55. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +72 -9
  56. package/dist/solution/BookingByStep/index.d.ts +1 -1
  57. package/dist/solution/BookingTicket/index.d.ts +8 -3
  58. package/dist/solution/BookingTicket/index.js +558 -443
  59. package/dist/solution/BookingTicket/utils/addProductDecision.js +2 -1
  60. package/dist/solution/BookingTicket/utils/orderCustomer.js +3 -2
  61. package/dist/solution/RegisterAndLogin/config.d.ts +9 -3
  62. package/dist/solution/RegisterAndLogin/config.js +95 -40
  63. package/dist/solution/RegisterAndLogin/index.js +4 -1
  64. package/dist/solution/Sales/index.d.ts +16 -1
  65. package/dist/solution/Sales/index.js +338 -63
  66. package/dist/solution/Sales/types.d.ts +10 -0
  67. package/dist/solution/ScanOrder/index.d.ts +1 -0
  68. package/dist/solution/ScanOrder/index.js +31 -27
  69. package/dist/solution/ScanOrder/utils.d.ts +1 -0
  70. package/dist/solution/ScanOrder/utils.js +2 -0
  71. package/dist/solution/UnifiedBookingSales/index.d.ts +20 -6
  72. package/dist/solution/UnifiedBookingSales/index.js +874 -527
  73. package/dist/solution/UnifiedBookingSales/types.d.ts +21 -2
  74. package/dist/solution/VenueBooking/index.d.ts +1 -0
  75. package/dist/solution/VenueBooking/index.js +8 -4
  76. package/lib/model/strategy/adapter/dataVariant/evaluator.d.ts +18 -2
  77. package/lib/model/strategy/adapter/dataVariant/evaluator.js +137 -6
  78. package/lib/model/strategy/adapter/dataVariant/type.d.ts +25 -0
  79. package/lib/model/strategy/adapter/itemRule/adapter.d.ts +4 -1
  80. package/lib/model/strategy/adapter/itemRule/adapter.js +73 -4
  81. package/lib/model/strategy/adapter/itemRule/evaluator.d.ts +8 -1
  82. package/lib/model/strategy/adapter/itemRule/evaluator.js +23 -1
  83. package/lib/model/strategy/adapter/itemRule/type.d.ts +44 -0
  84. package/lib/model/strategy/adapter/itemRule/type.js +19 -1
  85. package/lib/model/strategy/adapter/promotion/index.js +1 -46
  86. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +4 -0
  87. package/lib/modules/Discount/index.d.ts +2 -0
  88. package/lib/modules/Discount/index.js +34 -2
  89. package/lib/modules/Discount/types.d.ts +21 -0
  90. package/lib/modules/OpenData/index.d.ts +15 -2
  91. package/lib/modules/OpenData/index.js +230 -3
  92. package/lib/modules/OpenData/types.d.ts +55 -0
  93. package/lib/modules/OpenData/types.js +9 -1
  94. package/lib/modules/OpenData/utils.d.ts +21 -1
  95. package/lib/modules/OpenData/utils.js +126 -0
  96. package/lib/modules/Order/index.d.ts +50 -7
  97. package/lib/modules/Order/index.js +704 -64
  98. package/lib/modules/Order/salesNotes.d.ts +31 -0
  99. package/lib/modules/Order/salesNotes.js +382 -0
  100. package/lib/modules/Order/types.d.ts +117 -10
  101. package/lib/modules/Order/types.js +5 -1
  102. package/lib/modules/Order/utils/virtualSettlement.d.ts +63 -0
  103. package/lib/modules/Order/utils/virtualSettlement.js +262 -0
  104. package/lib/modules/Order/utils.d.ts +5 -1
  105. package/lib/modules/Order/utils.js +127 -21
  106. package/lib/modules/Payment/walletpass.js +14 -11
  107. package/lib/modules/Product/types.d.ts +23 -0
  108. package/lib/modules/ProductList/index.d.ts +2 -1
  109. package/lib/modules/ProductList/index.js +47 -2
  110. package/lib/modules/ProductList/types.d.ts +10 -0
  111. package/lib/modules/Rules/index.d.ts +5 -0
  112. package/lib/modules/Rules/index.js +22 -12
  113. package/lib/modules/SalesSummary/index.d.ts +1 -0
  114. package/lib/modules/SalesSummary/index.js +4 -2
  115. package/lib/modules/SalesSummary/types.d.ts +1 -0
  116. package/lib/modules/SalesSummary/utils.d.ts +1 -0
  117. package/lib/modules/SalesSummary/utils.js +17 -1
  118. package/lib/plugins/request.d.ts +2 -1
  119. package/lib/plugins/request.js +3 -2
  120. package/lib/server/index.d.ts +21 -0
  121. package/lib/server/index.js +492 -108
  122. package/lib/server/modules/order/types.d.ts +50 -0
  123. package/lib/server/modules/order/types.js +1 -0
  124. package/lib/server/utils/small-ticket.d.ts +4 -1
  125. package/lib/server/utils/small-ticket.js +427 -72
  126. package/lib/solution/BaseSales/index.d.ts +26 -3
  127. package/lib/solution/BaseSales/index.js +439 -30
  128. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +2 -0
  129. package/lib/solution/BaseSales/utils/parseSalesResponse.js +1 -1
  130. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
  131. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +38 -0
  132. package/lib/solution/BookingByStep/index.d.ts +1 -1
  133. package/lib/solution/BookingTicket/index.d.ts +8 -3
  134. package/lib/solution/BookingTicket/index.js +60 -15
  135. package/lib/solution/BookingTicket/utils/addProductDecision.js +1 -0
  136. package/lib/solution/BookingTicket/utils/orderCustomer.js +2 -1
  137. package/lib/solution/RegisterAndLogin/config.d.ts +9 -3
  138. package/lib/solution/RegisterAndLogin/config.js +49 -8
  139. package/lib/solution/RegisterAndLogin/index.js +4 -1
  140. package/lib/solution/Sales/index.d.ts +16 -1
  141. package/lib/solution/Sales/index.js +168 -1
  142. package/lib/solution/Sales/types.d.ts +10 -0
  143. package/lib/solution/ScanOrder/index.d.ts +1 -0
  144. package/lib/solution/ScanOrder/index.js +5 -1
  145. package/lib/solution/ScanOrder/utils.d.ts +1 -0
  146. package/lib/solution/ScanOrder/utils.js +1 -0
  147. package/lib/solution/UnifiedBookingSales/index.d.ts +20 -6
  148. package/lib/solution/UnifiedBookingSales/index.js +169 -16
  149. package/lib/solution/UnifiedBookingSales/types.d.ts +21 -2
  150. package/lib/solution/VenueBooking/index.d.ts +1 -0
  151. package/lib/solution/VenueBooking/index.js +5 -1
  152. package/package.json +1 -1
@@ -8,6 +8,49 @@ export interface MultiLangObject {
8
8
  original?: string;
9
9
  [key: string]: string | undefined;
10
10
  }
11
+ export declare const INVOICE_MODULE_KEYS: readonly ["reference", "brand", "custom_1", "order", "handover", "customer", "line_groups", "settlement", "custom_2", "payment", "card", "total_savings", "custom_3", "barcode"];
12
+ export type InvoiceModuleKey = (typeof INVOICE_MODULE_KEYS)[number];
13
+ /**
14
+ * Documents Registry 中的 Invoice 模块配置。
15
+ *
16
+ * 模块 key、显隐值及模块私有字段均由 Registry/Native 约定,OS 不做枚举收窄或改写。
17
+ */
18
+ export interface InvoiceTemplateModuleConfig {
19
+ key: string;
20
+ is_show?: unknown;
21
+ [key: string]: unknown;
22
+ }
23
+ export interface InvoiceModuleConfig extends InvoiceTemplateModuleConfig {
24
+ }
25
+ export interface InvoiceLayoutConfig {
26
+ locale?: string;
27
+ module: InvoiceModuleConfig[];
28
+ }
29
+ export interface InvoiceTemplateSettings {
30
+ template: string;
31
+ language: Record<string, number>;
32
+ modules: InvoiceTemplateModuleConfig[];
33
+ [key: string]: unknown;
34
+ }
35
+ export interface InvoiceDocumentResponse {
36
+ data?: {
37
+ id?: number | string;
38
+ deleted_at?: string | null;
39
+ data?: {
40
+ template_settings?: unknown;
41
+ };
42
+ };
43
+ }
44
+ export type RawInvoiceEditConfig = string | {
45
+ language?: unknown;
46
+ modules?: unknown;
47
+ [key: string]: unknown;
48
+ };
49
+ export type RawInvoiceLayoutConfig = string | {
50
+ locale?: unknown;
51
+ module?: unknown[];
52
+ [key: string]: unknown;
53
+ };
11
54
  export interface OpenDataConfig {
12
55
  'basic.enable'?: boolean;
13
56
  'basic.code'?: string | null;
@@ -45,11 +88,23 @@ export interface OpenDataConfig {
45
88
  label: string;
46
89
  value: number;
47
90
  }>;
91
+ 'documents.invoice_template'?: string | number;
92
+ 'documents.invoice_edit'?: RawInvoiceEditConfig;
93
+ /** @deprecated 仅保留旧调用方的类型兼容,Invoice 读取逻辑不再消费该字段。 */
94
+ 'documents.invoice'?: RawInvoiceLayoutConfig;
95
+ /** @deprecated Invoice 读取逻辑只消费扁平的 documents.invoice_* 字段。 */
96
+ documents?: {
97
+ invoice?: RawInvoiceLayoutConfig;
98
+ };
48
99
  [key: string]: any;
49
100
  }
50
101
  export interface OpenDataState {
51
102
  data: OpenDataConfig | null;
52
103
  lastFetchedAt: number | null;
104
+ invoiceTemplateSettings?: InvoiceTemplateSettings | null;
105
+ invoiceTemplateTarget?: string | null;
106
+ invoiceTemplateDocumentId?: string | null;
107
+ invoiceTemplateCacheKey?: string | null;
53
108
  }
54
109
  export interface OpenDataFetchParams {
55
110
  scope: string;
@@ -1 +1,7 @@
1
- export {};
1
+ export var INVOICE_MODULE_KEYS = ['reference', 'brand', 'custom_1', 'order', 'handover', 'customer', 'line_groups', 'settlement', 'custom_2', 'payment', 'card', 'total_savings', 'custom_3', 'barcode'];
2
+
3
+ /**
4
+ * Documents Registry 中的 Invoice 模块配置。
5
+ *
6
+ * 模块 key、显隐值及模块私有字段均由 Registry/Native 约定,OS 不做枚举收窄或改写。
7
+ */
@@ -1,2 +1,22 @@
1
- import type { OpenDataAvailabilityResult, ComputeAvailabilityParams } from './types';
1
+ import type { OpenDataConfig, OpenDataAvailabilityResult, ComputeAvailabilityParams, InvoiceLayoutConfig, InvoiceTemplateSettings } from './types';
2
+ export declare function getDefaultInvoiceLayoutConfig(): InvoiceLayoutConfig;
3
+ export declare function getDefaultInvoiceTemplateSettings(): InvoiceTemplateSettings;
4
+ /**
5
+ * 将非 DEFAULT Invoice 模板启用的语言转换为 small_ticket_data locale。
6
+ * cn_en 是中英组合打印模式,因此展开为 en 与 zh_CN 两份数据。
7
+ */
8
+ export declare function resolveInvoiceReceiptLocales(settings?: InvoiceTemplateSettings | null): string[];
9
+ /**
10
+ * 规范化已经提取出的公开 template_settings 值,供打印入口复用。
11
+ */
12
+ export declare function normalizeRawInvoiceTemplateSettings(value: unknown): InvoiceTemplateSettings;
13
+ /**
14
+ * 从 OpenData Documents section 的两个扁平字段中构造 Native Invoice 配置。
15
+ */
16
+ export declare function normalizeInvoiceTemplateSettings(config: OpenDataConfig | null | undefined): InvoiceTemplateSettings;
17
+ export declare function normalizeInvoiceLayoutFromTemplateSettings(settings: InvoiceTemplateSettings | null | undefined): InvoiceLayoutConfig;
18
+ /**
19
+ * 将 invoice_edit.modules 原样投影为 Web Invoice 使用的 module 字段。
20
+ */
21
+ export declare function normalizeInvoiceLayoutConfig(config: OpenDataConfig | null | undefined): InvoiceLayoutConfig;
2
22
  export declare function computeAvailability(params: ComputeAvailabilityParams): OpenDataAvailabilityResult;
@@ -1,6 +1,144 @@
1
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
5
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
7
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
8
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
9
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
10
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
11
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
1
12
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
13
  import dayjs from 'dayjs';
3
14
  import { getDateIsInSchedule } from "../Schedule/getDateIsInSchedule";
15
+ import { INVOICE_MODULE_KEYS } from "./types";
16
+ function isRecord(value) {
17
+ return !!value && _typeof(value) === 'object' && !Array.isArray(value);
18
+ }
19
+ function parseInvoiceRecord(value) {
20
+ var parsed = value;
21
+ if (typeof parsed === 'string') {
22
+ try {
23
+ parsed = JSON.parse(parsed);
24
+ } catch (_unused) {
25
+ return null;
26
+ }
27
+ }
28
+ return isRecord(parsed) ? parsed : null;
29
+ }
30
+ export function getDefaultInvoiceLayoutConfig() {
31
+ return {
32
+ module: INVOICE_MODULE_KEYS.map(function (key) {
33
+ return {
34
+ key: key,
35
+ is_show: 1
36
+ };
37
+ })
38
+ };
39
+ }
40
+ export function getDefaultInvoiceTemplateSettings() {
41
+ return {
42
+ template: 'DEFAULT',
43
+ language: {},
44
+ modules: []
45
+ };
46
+ }
47
+ var INVOICE_RECEIPT_LOCALE_ORDER = ['en', 'zh_CN', 'zh_HK', 'ja', 'pt'];
48
+ var INVOICE_RECEIPT_LOCALE_MAPPING = {
49
+ en: ['en'],
50
+ zh_cn: ['zh_CN'],
51
+ zh_hk: ['zh_HK'],
52
+ ja: ['ja'],
53
+ pt: ['pt'],
54
+ cn_en: ['en', 'zh_CN']
55
+ };
56
+
57
+ /**
58
+ * 将非 DEFAULT Invoice 模板启用的语言转换为 small_ticket_data locale。
59
+ * cn_en 是中英组合打印模式,因此展开为 en 与 zh_CN 两份数据。
60
+ */
61
+ export function resolveInvoiceReceiptLocales(settings) {
62
+ if (typeof (settings === null || settings === void 0 ? void 0 : settings.template) !== 'string' || settings.template.trim().length === 0 || settings.template.trim().toUpperCase() === 'DEFAULT' || !isRecord(settings.language)) {
63
+ return [];
64
+ }
65
+ var enabledLocales = new Set();
66
+ Object.entries(settings.language).forEach(function (_ref) {
67
+ var _INVOICE_RECEIPT_LOCA;
68
+ var _ref2 = _slicedToArray(_ref, 2),
69
+ rawKey = _ref2[0],
70
+ count = _ref2[1];
71
+ if (typeof count !== 'number' || !Number.isFinite(count) || count <= 0) {
72
+ return;
73
+ }
74
+ var key = rawKey.trim().toLowerCase().replace(/-/g, '_');
75
+ (_INVOICE_RECEIPT_LOCA = INVOICE_RECEIPT_LOCALE_MAPPING[key]) === null || _INVOICE_RECEIPT_LOCA === void 0 || _INVOICE_RECEIPT_LOCA.forEach(function (locale) {
76
+ enabledLocales.add(locale);
77
+ });
78
+ });
79
+ return INVOICE_RECEIPT_LOCALE_ORDER.filter(function (locale) {
80
+ return enabledLocales.has(locale);
81
+ });
82
+ }
83
+ function normalizeInvoiceTemplate(value) {
84
+ if (typeof value !== 'string' || value.trim().length === 0) return 'DEFAULT';
85
+ return value.trim().toUpperCase() === 'DEFAULT' ? 'DEFAULT' : value;
86
+ }
87
+ function normalizeInvoiceLanguage(value) {
88
+ if (!isRecord(value)) return {};
89
+ if (Object.values(value).some(function (item) {
90
+ return typeof item !== 'number';
91
+ })) return {};
92
+ return _objectSpread({}, value);
93
+ }
94
+ function normalizeInvoiceModules(value) {
95
+ if (!Array.isArray(value)) return [];
96
+ if (value.some(function (item) {
97
+ return !isRecord(item) || typeof item.key !== 'string';
98
+ })) {
99
+ return [];
100
+ }
101
+ return value.map(function (item) {
102
+ return _objectSpread({}, item);
103
+ });
104
+ }
105
+
106
+ /**
107
+ * 规范化已经提取出的公开 template_settings 值,供打印入口复用。
108
+ */
109
+ export function normalizeRawInvoiceTemplateSettings(value) {
110
+ var parsed = parseInvoiceRecord(value);
111
+ if (!parsed) return getDefaultInvoiceTemplateSettings();
112
+ return _objectSpread(_objectSpread({}, parsed), {}, {
113
+ template: normalizeInvoiceTemplate(parsed.template),
114
+ language: normalizeInvoiceLanguage(parsed.language),
115
+ modules: normalizeInvoiceModules(parsed.modules)
116
+ });
117
+ }
118
+
119
+ /**
120
+ * 从 OpenData Documents section 的两个扁平字段中构造 Native Invoice 配置。
121
+ */
122
+ export function normalizeInvoiceTemplateSettings(config) {
123
+ var parsedEdit = parseInvoiceRecord(config === null || config === void 0 ? void 0 : config['documents.invoice_edit']);
124
+ return normalizeRawInvoiceTemplateSettings(_objectSpread(_objectSpread({}, parsedEdit !== null && parsedEdit !== void 0 ? parsedEdit : {}), {}, {
125
+ template: normalizeInvoiceTemplate(config === null || config === void 0 ? void 0 : config['documents.invoice_template'])
126
+ }));
127
+ }
128
+ export function normalizeInvoiceLayoutFromTemplateSettings(settings) {
129
+ var modules = normalizeRawInvoiceTemplateSettings(settings).modules;
130
+ if (modules.length === 0) return getDefaultInvoiceLayoutConfig();
131
+ return {
132
+ module: modules
133
+ };
134
+ }
135
+
136
+ /**
137
+ * 将 invoice_edit.modules 原样投影为 Web Invoice 使用的 module 字段。
138
+ */
139
+ export function normalizeInvoiceLayoutConfig(config) {
140
+ return normalizeInvoiceLayoutFromTemplateSettings(normalizeInvoiceTemplateSettings(config));
141
+ }
4
142
  function toBoolean(value) {
5
143
  if (typeof value === 'boolean') return value;
6
144
  if (typeof value === 'string') return value === 'true' || value === '1';
@@ -3,7 +3,7 @@ import { BaseModule } from '../BaseModule';
3
3
  import { OrderModuleAPI, CommitOrderParams, UpdateOrderBookingParams, UpdateOrderProductParams, UpdateOrderProductQuantityParams, CancelOrderParams, ChangeBookingStatusParams, CheckoutOrderParams } from './types';
4
4
  import { CartItem } from '../Cart/types';
5
5
  import { type SubmitPayloadEnhancer } from './utils';
6
- import type { OrderAmountSnapshot, AddProductBookingInput, AddProductToOrderOptions, OrderIdentitySnapshot, OrderPaymentSource, OrderSnapshot, OrderSyncState, SyncPaymentsToOrderParams, SyncPaymentsToOrderResult, SubmitSalesOrderParams, OrderProduct, OrderProductIdentity, OrderSummary, OrderTempOrder, OrderPaymentData, OrderPaymentUpdateOptions, OrderPaymentUpdateResult, SendCustomerPayLinkParams, UpdateTempOrderCustomerInput, OrderCustomerPatch, OrderCustomerView, ReplaceTempOrderOptions, OrderPromotionEvaluator, OrderGiftSelectResolver, OrderUnfulfilledPromotion, OrderLastGiftActions, RemoveProductsFromOrderOptions } from './types';
6
+ import type { OrderAmountSnapshot, AddProductBookingInput, AddProductToOrderOptions, OrderIdentitySnapshot, OrderPaymentSource, OrderSnapshot, OrderSyncState, SyncPaymentsToOrderParams, SyncPaymentsToOrderResult, SubmitSalesOrderParams, OrderProduct, OrderProductIdentity, OrderSummary, OrderTempOrder, OrderPaymentData, OrderPaymentUpdateOptions, OrderPaymentUpdateResult, SendCustomerPayLinkParams, UpdateTempOrderCustomerInput, OrderCustomerPatch, OrderCustomerView, ReplaceTempOrderOptions, OrderPromotionEvaluator, OrderGiftSelectResolver, OrderUnfulfilledPromotion, OrderLastGiftActions, RemoveProductsFromOrderOptions, SalesNote, SalesNotesMutationSnapshot, SetSalesNoteInput, PickupReferenceMode, ShopServiceData, ShopServiceType } from './types';
7
7
  import type { ICustomer } from '../AccountList/types';
8
8
  import type { Discount } from '../Discount/types';
9
9
  import { UnavailableReason } from '../Rules/types';
@@ -29,8 +29,10 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
29
29
  private promotionEvaluator;
30
30
  /** 赠品选择 resolver;由 SDK host bridge 注入 */
31
31
  private giftSelectResolver;
32
- /** applyPromotion 递归保护 flag(写路径同步调 applyPromotion,禁止重入) */
32
+ /** 促销评估递归保护 flag(写路径同步评估促销,禁止重入) */
33
33
  private isApplyingPromotion;
34
+ /** 保持旧事件语义:同步事件监听器内触发的订单写入不得递归评估促销。 */
35
+ private isEmittingPromotionApplied;
34
36
  /** 商品曾应用过客户券卡,客户变更剥离后需强制跑一次 calcDiscount 复位价格 */
35
37
  private hasActiveCustomerBoundDiscount;
36
38
  /** 最近一次 applyPromotion 的未满足促销提示 */
@@ -60,6 +62,8 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
60
62
  * orderModule.updateOtherParams({ cacheId: 'cache-2', channel: 'pos' });
61
63
  */
62
64
  updateOtherParams(params: Record<string, any>): void;
65
+ /** PC/H5 属于在线店铺;其它或缺失平台统一沿用 POS 行为。 */
66
+ isOnlineStorePlatform(): boolean;
63
67
  /**
64
68
  * 记录信息日志
65
69
  */
@@ -82,6 +86,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
82
86
  }): Promise<Discount[]>;
83
87
  getDiscountList(): Discount[];
84
88
  getAvailableWalletIds(): number[];
89
+ getVirtualCurrencyList(): import("../Discount/types").VirtualCurrencyAsset[];
85
90
  private syncScannedDiscountsToOriginalDiscountList;
86
91
  private ensureEditDiscountConfigForProductChange;
87
92
  scanCode(code: string, customerId?: number): Promise<{
@@ -121,7 +126,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
121
126
  */
122
127
  appendPromotionTags<T extends Record<string, any>>(products: T[]): T[];
123
128
  /**
124
- * 应用购物车促销:计算 → 差异化赠品 → 写回 tempOrder.products → emit onPromotionApplied。
129
+ * 只执行购物车促销评估与赠品写回,不发布稳定态事件。
125
130
  *
126
131
  * 调用时机:写路径(add/update/remove/clear/setCustomer)末尾自动触发;外部一般无需手动调。
127
132
  *
@@ -129,8 +134,13 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
129
134
  * - 不调用任何公开 CRUD API(如 removeProductFromOrder),全部内部 mutate tempOrder.products,避免事件风暴;
130
135
  * - 用 `isApplyingPromotion` 防递归;
131
136
  * - 多选项赠品依赖 giftSelectResolver,未注入则跳过且 console.warn;
132
- * - 不主动调用 applyDiscount / recalculateSummary,调用方负责跟进。
137
+ * - 不主动调用 applyDiscount / recalculateSummary,调用方负责跟进;
138
+ * - 返回的 payload 只能在 applyDiscount(商品写路径还需 summary/persist)完成后发布。
133
139
  */
140
+ private evaluatePromotion;
141
+ /** 发布促销稳定态;products 必须读取折扣计算后的当前数组。 */
142
+ private emitPromotionApplied;
143
+ /** 公开入口:促销、折扣、summary 与持久化完成后发布稳定态事件。 */
134
144
  applyPromotion(): Promise<void>;
135
145
  /** 最近一次 applyPromotion 输出的未满足促销列表 */
136
146
  getUnfulfilledPromotions(): OrderUnfulfilledPromotion[];
@@ -166,6 +176,8 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
166
176
  consumeSessionStorageRestore(): Record<string, any> | null;
167
177
  notifyTempOrderChanged(): void;
168
178
  private createDefaultTempOrderInstance;
179
+ private clearTempOrderPointCardSnapshot;
180
+ private writePointCardSnapshotFromPrepareConfig;
169
181
  private createExternalSaleNumber;
170
182
  private ensureExternalSaleNumber;
171
183
  private ensureRequestUniqueIdempotencyToken;
@@ -301,9 +313,24 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
301
313
  updateTempOrderNote(note: string, sync: boolean): string | Promise<string>;
302
314
  syncTempOrderNoteToRemote(orderId: number | string, note: string): Promise<string>;
303
315
  getTempOrderNote(): string;
316
+ private ensureSalesNotesRuntimeState;
317
+ private ensureSalesNotesLoadedForMutation;
318
+ private normalizeSalesNoteUuid;
319
+ private getSalesNotePrimaryRelation;
320
+ private removeSalesNotesForMissingProductLines;
321
+ private setSalesNoteOnTempOrder;
322
+ getSalesNotes(): SalesNote[];
323
+ createSalesNotesMutationSnapshot(): SalesNotesMutationSnapshot;
324
+ restoreSalesNotesMutationSnapshot(snapshot: SalesNotesMutationSnapshot): void;
325
+ setSalesNote(input: SetSalesNoteInput): Promise<SalesNote>;
326
+ removeSalesNote(uuid: string): Promise<void>;
327
+ clearSalesNotes(): Promise<void>;
304
328
  updateTempOrderShopDiscount(amount: string | number): string;
305
329
  updateTempOrderDepositAmount(amount: string | number): OrderSummary;
306
330
  updateTempOrderBuzzer(buzzer: string): string;
331
+ private updateTempOrderShopServiceData;
332
+ updateTempOrderPickupReferenceMode(mode: PickupReferenceMode): ShopServiceData;
333
+ updateTempOrderServiceType(serviceType: ShopServiceType): ShopServiceData;
307
334
  updateTempOrderContactsInfo(contactsInfo: Record<string, any> | null): Record<string, any> | null;
308
335
  private buildTempOrderCustomer;
309
336
  private isCustomerBoundDiscount;
@@ -385,6 +412,13 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
385
412
  * this.hasLinkedBookingUid({ metadata: { booking_uid: 'booking-1' } });
386
413
  */
387
414
  private hasLinkedBookingUid;
415
+ private isMultiCurrencySettlementEnabled;
416
+ private isActiveVirtualSettlementOrder;
417
+ private shouldUseVirtualSettlementSummary;
418
+ private normalizeVirtualSettlementProductIfEnabled;
419
+ private assertAndLockProductSettlement;
420
+ private syncTempOrderSettlementState;
421
+ private prepareVirtualSettlementTempOrder;
388
422
  /**
389
423
  * 预约商品加车后的统一收尾:促销、折扣、summary 重算与持久化(批量拆行时只调用一次)。
390
424
  *
@@ -405,6 +439,11 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
405
439
  * if (pending) await pending;
406
440
  */
407
441
  private appendProductLineToTempOrder;
442
+ /**
443
+ * booking 数量拆行时,若 Holder 数量与拆行数严格一致,则按下标分配。
444
+ * 数量不一致时保持旧数据,避免猜测 Holder 与商品份数的对应关系。
445
+ */
446
+ private createSplitBookingLine;
408
447
  /**
409
448
  * 添加商品行。带 booking 时强制独立行;num>1 时拆成多条 num=1 的 product+booking(对齐 BookingByStep / ticketBooking addService)。
410
449
  *
@@ -454,9 +493,13 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
454
493
  removeProductFromOrder(identity: OrderProductIdentity, options?: RemoveProductsFromOrderOptions): Promise<OrderProduct[]>;
455
494
  /**
456
495
  * 仅清空购物车行(products / bookings),不重置整单。
457
- * 用于「仅清空商品」;客户、备注、支付等协议字段保持不变。
496
+ * 普通整单 note 保持不变;以商品行为主体的 Sales Notes 同步删除。
458
497
  */
459
498
  clearOrderCartLines(): Promise<OrderTempOrder>;
499
+ /**
500
+ * 切换购物车结算单位时清理所有会影响新币种的订单状态,但保留当前客户。
501
+ */
502
+ clearOrderForSettlementSwitch(): Promise<OrderTempOrder>;
460
503
  buildCurrentSubmitPayloadForLocalPrint(params?: {
461
504
  cacheId?: string;
462
505
  platform?: string;
@@ -514,7 +557,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
514
557
  generateIdempotencyToken(): string;
515
558
  syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
516
559
  createOrder(params: CommitOrderParams['query']): {
517
- type: "appointment_booking" | "virtual";
560
+ type: "virtual" | "appointment_booking";
518
561
  platform: string;
519
562
  sales_channel: string;
520
563
  order_sales_channel: string;
@@ -591,4 +634,4 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
591
634
  getOrderInfo(order_id: number): Promise<any>;
592
635
  getVouchers(): any[];
593
636
  }
594
- export type { AddProductToOrderOptions, RemoveProductsFromOrderOptions, UpdateOrderBookingParams, UpdateOrderProductParams, UpdateOrderProductQuantityParams, } from './types';
637
+ export type { AddProductToOrderOptions, OrderMetaList, PointCardSnapshotItem, RemoveProductsFromOrderOptions, SalesNote, SalesNoteDraftInput, SalesNoteLocalizedSelection, SalesNoteLocalizedText, SalesNoteRelation, SalesNoteTextInput, SetSalesNoteInput, UpdateOrderBookingParams, UpdateOrderProductParams, UpdateOrderProductQuantityParams, } from './types';