@pisell/pisellos 2.2.188 → 2.2.189

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 (34) hide show
  1. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  2. package/dist/modules/Order/index.d.ts +1 -0
  3. package/dist/modules/Order/index.js +32 -24
  4. package/dist/modules/Order/types.d.ts +1 -0
  5. package/dist/modules/Order/utils.js +3 -1
  6. package/dist/solution/BaseSales/index.js +20 -21
  7. package/dist/solution/BookingByStep/index.d.ts +1 -1
  8. package/dist/solution/BookingTicket/index.d.ts +15 -0
  9. package/dist/solution/BookingTicket/index.js +117 -6
  10. package/dist/solution/BookingTicket/types.d.ts +48 -0
  11. package/dist/solution/BookingTicket/types.js +5 -1
  12. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  13. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +394 -0
  14. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  15. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.js +56 -0
  16. package/dist/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  17. package/dist/solution/BookingTicket/utils/scan/scanProductValues.js +150 -0
  18. package/lib/model/strategy/adapter/promotion/index.js +49 -0
  19. package/lib/modules/Order/index.d.ts +1 -0
  20. package/lib/modules/Order/index.js +10 -5
  21. package/lib/modules/Order/types.d.ts +1 -0
  22. package/lib/modules/Order/utils.js +1 -0
  23. package/lib/solution/BaseSales/index.js +0 -1
  24. package/lib/solution/BookingByStep/index.d.ts +1 -1
  25. package/lib/solution/BookingTicket/index.d.ts +15 -0
  26. package/lib/solution/BookingTicket/index.js +56 -0
  27. package/lib/solution/BookingTicket/types.d.ts +48 -0
  28. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  29. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +166 -0
  30. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  31. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +51 -0
  32. package/lib/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  33. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +127 -0
  34. package/package.json +1 -1
@@ -0,0 +1,394 @@
1
+ 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
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
3
+ 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); }
4
+ 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; }
5
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
6
+ 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; }
7
+ 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; }
8
+ 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; }
9
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
10
+ 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); }
11
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
12
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
13
+ import { buildRequiresDetailPayload } from "../addProductDecision";
14
+ import { isWalkInCustomer } from "../cartView";
15
+ import { countScanVariantMatches, genScanProductValues, isScanProductBundle, isScanProductOption } from "./scanProductValues";
16
+
17
+ /** applyGlobalScan 所需的 BookingTicket 运行时能力 */
18
+ /**
19
+ * 处理单条扫码商品的加车决策(含弹窗链)。
20
+ */
21
+ function processScannedProductItem(_x, _x2, _x3, _x4) {
22
+ return _processScannedProductItem.apply(this, arguments);
23
+ }
24
+ function _processScannedProductItem() {
25
+ _processScannedProductItem = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(host, item, code, bridge) {
26
+ var ctx, values, itemWithSelection, decision;
27
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
28
+ while (1) switch (_context.prev = _context.next) {
29
+ case 0:
30
+ ctx = host.buildAddProductCtx();
31
+ if (!(isScanProductBundle(item) || isScanProductOption(item))) {
32
+ _context.next = 3;
33
+ break;
34
+ }
35
+ return _context.abrupt("return", runRequiresDetailFlow(host, item, ctx, bridge));
36
+ case 3:
37
+ if (!(countScanVariantMatches(item, code) >= 2)) {
38
+ _context.next = 5;
39
+ break;
40
+ }
41
+ return _context.abrupt("return", runRequiresDetailFlow(host, item, ctx, bridge));
42
+ case 5:
43
+ values = genScanProductValues(item, code);
44
+ itemWithSelection = _objectSpread(_objectSpread({}, item), {}, {
45
+ cartDetailValue: values
46
+ });
47
+ decision = host.decideAddProduct(itemWithSelection, ctx);
48
+ return _context.abrupt("return", runAddProductDecision(host, item, decision, ctx, bridge));
49
+ case 9:
50
+ case "end":
51
+ return _context.stop();
52
+ }
53
+ }, _callee);
54
+ }));
55
+ return _processScannedProductItem.apply(this, arguments);
56
+ }
57
+ function runRequiresDetailFlow(_x5, _x6, _x7, _x8) {
58
+ return _runRequiresDetailFlow.apply(this, arguments);
59
+ }
60
+ function _runRequiresDetailFlow() {
61
+ _runRequiresDetailFlow = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(host, item, ctx, bridge) {
62
+ var _ref, _payload$productData;
63
+ var payload, detailResult;
64
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
65
+ while (1) switch (_context2.prev = _context2.next) {
66
+ case 0:
67
+ if (bridge !== null && bridge !== void 0 && bridge.openProductDetail) {
68
+ _context2.next = 2;
69
+ break;
70
+ }
71
+ return _context2.abrupt("return", 'pending');
72
+ case 2:
73
+ payload = buildRequiresDetailPayload(item, ctx);
74
+ _context2.next = 5;
75
+ return bridge.openProductDetail(payload);
76
+ case 5:
77
+ detailResult = _context2.sent;
78
+ if (detailResult) {
79
+ _context2.next = 8;
80
+ break;
81
+ }
82
+ return _context2.abrupt("return", 'cancelled');
83
+ case 8:
84
+ if (bridge.confirmDetail) {
85
+ _context2.next = 10;
86
+ break;
87
+ }
88
+ return _context2.abrupt("return", 'pending');
89
+ case 10:
90
+ _context2.next = 12;
91
+ return bridge.confirmDetail({
92
+ item: (_ref = (_payload$productData = payload.productData) !== null && _payload$productData !== void 0 ? _payload$productData : payload.item) !== null && _ref !== void 0 ? _ref : item,
93
+ detailResult: detailResult
94
+ });
95
+ case 12:
96
+ return _context2.abrupt("return", 'added');
97
+ case 13:
98
+ case "end":
99
+ return _context2.stop();
100
+ }
101
+ }, _callee2);
102
+ }));
103
+ return _runRequiresDetailFlow.apply(this, arguments);
104
+ }
105
+ function runAddProductDecision(_x9, _x10, _x11, _x12, _x13) {
106
+ return _runAddProductDecision.apply(this, arguments);
107
+ }
108
+ /**
109
+ * 应用全局扫码格式化结果:设客户 / 加车 / 开单 / 弹窗链。
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * const result = await applyGlobalScan(bookingTicket, formatted, bridge);
114
+ * ```
115
+ */
116
+ function _runAddProductDecision() {
117
+ _runAddProductDecision = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(host, catalogItem, decision, ctx, bridge) {
118
+ var transformed, edited;
119
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
120
+ while (1) switch (_context3.prev = _context3.next) {
121
+ case 0:
122
+ if (!(decision.action === 'add')) {
123
+ _context3.next = 5;
124
+ break;
125
+ }
126
+ transformed = host.transformDetailToProductAndBooking({
127
+ item: catalogItem,
128
+ cacheItem: decision.cacheItem,
129
+ options: ctx
130
+ });
131
+ _context3.next = 4;
132
+ return host.addProductToOrder(transformed.product, transformed.booking);
133
+ case 4:
134
+ return _context3.abrupt("return", 'added');
135
+ case 5:
136
+ if (!(decision.action === 'requiresDetail')) {
137
+ _context3.next = 7;
138
+ break;
139
+ }
140
+ return _context3.abrupt("return", runRequiresDetailFlow(host, catalogItem, ctx, bridge));
141
+ case 7:
142
+ if (!(decision.action === 'requiresBookingEdit')) {
143
+ _context3.next = 20;
144
+ break;
145
+ }
146
+ if (bridge !== null && bridge !== void 0 && bridge.openBookingEdit) {
147
+ _context3.next = 10;
148
+ break;
149
+ }
150
+ return _context3.abrupt("return", 'pending');
151
+ case 10:
152
+ _context3.next = 12;
153
+ return bridge.openBookingEdit(decision.payload);
154
+ case 12:
155
+ edited = _context3.sent;
156
+ if (edited) {
157
+ _context3.next = 15;
158
+ break;
159
+ }
160
+ return _context3.abrupt("return", 'cancelled');
161
+ case 15:
162
+ if (bridge.confirmBookingEdit) {
163
+ _context3.next = 17;
164
+ break;
165
+ }
166
+ return _context3.abrupt("return", 'pending');
167
+ case 17:
168
+ _context3.next = 19;
169
+ return bridge.confirmBookingEdit({
170
+ cacheItem: edited
171
+ });
172
+ case 19:
173
+ return _context3.abrupt("return", 'added');
174
+ case 20:
175
+ return _context3.abrupt("return", 'pending');
176
+ case 21:
177
+ case "end":
178
+ return _context3.stop();
179
+ }
180
+ }, _callee3);
181
+ }));
182
+ return _runAddProductDecision.apply(this, arguments);
183
+ }
184
+ export function applyGlobalScan(_x14, _x15, _x16) {
185
+ return _applyGlobalScan.apply(this, arguments);
186
+ }
187
+ function _applyGlobalScan() {
188
+ _applyGlobalScan = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(host, formatted, bridge) {
189
+ var searchType, data, scanCode, _bridge$onNotify2, _bridge$onNotify, _bridge$onNotify4, _bridge$onNotify3, snapshot, result, list, _bridge$onNotify5, addedCount, _iterator, _step, _item, outcome, _bridge$onNotify6, _data$order_id, orderId, _bridge$onNotify7;
190
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
191
+ while (1) switch (_context4.prev = _context4.next) {
192
+ case 0:
193
+ searchType = formatted.searchType, data = formatted.data, scanCode = formatted.scanCode;
194
+ debugger;
195
+ if (!(searchType === 'wallet')) {
196
+ _context4.next = 9;
197
+ break;
198
+ }
199
+ if (data) {
200
+ _context4.next = 6;
201
+ break;
202
+ }
203
+ bridge === null || bridge === void 0 || (_bridge$onNotify = bridge.onNotify) === null || _bridge$onNotify === void 0 || _bridge$onNotify.call(bridge, 'fail', 'pisell2.text.scan-global-failed');
204
+ return _context4.abrupt("return", {
205
+ status: 'failed',
206
+ reason: 'invalid_data'
207
+ });
208
+ case 6:
209
+ host.setOrderCustomer(data);
210
+ bridge === null || bridge === void 0 || (_bridge$onNotify2 = bridge.onNotify) === null || _bridge$onNotify2 === void 0 || _bridge$onNotify2.call(bridge, 'success', 'pisell2.text.add-client-success');
211
+ return _context4.abrupt("return", {
212
+ status: 'success',
213
+ kind: 'customer'
214
+ });
215
+ case 9:
216
+ if (!(searchType === 'walletPass')) {
217
+ _context4.next = 26;
218
+ break;
219
+ }
220
+ if (data) {
221
+ _context4.next = 13;
222
+ break;
223
+ }
224
+ bridge === null || bridge === void 0 || (_bridge$onNotify3 = bridge.onNotify) === null || _bridge$onNotify3 === void 0 || _bridge$onNotify3.call(bridge, 'fail', 'pisell2.text.scan-global-failed');
225
+ return _context4.abrupt("return", {
226
+ status: 'failed',
227
+ reason: 'invalid_data'
228
+ });
229
+ case 13:
230
+ snapshot = host.getOrderCustomerSnapshot();
231
+ if (!isWalkInCustomer(snapshot)) {
232
+ _context4.next = 23;
233
+ break;
234
+ }
235
+ if (bridge !== null && bridge !== void 0 && bridge.applyPromotionCode) {
236
+ _context4.next = 17;
237
+ break;
238
+ }
239
+ return _context4.abrupt("return", {
240
+ status: 'failed',
241
+ reason: 'no_bridge'
242
+ });
243
+ case 17:
244
+ _context4.next = 19;
245
+ return bridge.applyPromotionCode(scanCode);
246
+ case 19:
247
+ result = _context4.sent;
248
+ if (!(result !== null && result !== void 0 && result.isAvailable)) {
249
+ _context4.next = 22;
250
+ break;
251
+ }
252
+ return _context4.abrupt("return", {
253
+ status: 'success',
254
+ kind: 'promotion'
255
+ });
256
+ case 22:
257
+ return _context4.abrupt("return", {
258
+ status: 'failed',
259
+ reason: 'invalid_data'
260
+ });
261
+ case 23:
262
+ host.setOrderCustomer(data);
263
+ bridge === null || bridge === void 0 || (_bridge$onNotify4 = bridge.onNotify) === null || _bridge$onNotify4 === void 0 || _bridge$onNotify4.call(bridge, 'success', 'pisell2.text.add-client-success');
264
+ return _context4.abrupt("return", {
265
+ status: 'success',
266
+ kind: 'customer'
267
+ });
268
+ case 26:
269
+ if (!(searchType === 'product' || searchType === 'local_product')) {
270
+ _context4.next = 59;
271
+ break;
272
+ }
273
+ list = data === null || data === void 0 ? void 0 : data.list;
274
+ if (!(!Array.isArray(list) || list.length === 0)) {
275
+ _context4.next = 31;
276
+ break;
277
+ }
278
+ bridge === null || bridge === void 0 || (_bridge$onNotify5 = bridge.onNotify) === null || _bridge$onNotify5 === void 0 || _bridge$onNotify5.call(bridge, 'fail', 'pisell2.text.scan-global-failed');
279
+ return _context4.abrupt("return", {
280
+ status: 'failed',
281
+ reason: 'invalid_data'
282
+ });
283
+ case 31:
284
+ addedCount = 0;
285
+ _iterator = _createForOfIteratorHelper(list);
286
+ _context4.prev = 33;
287
+ _iterator.s();
288
+ case 35:
289
+ if ((_step = _iterator.n()).done) {
290
+ _context4.next = 47;
291
+ break;
292
+ }
293
+ _item = _step.value;
294
+ _context4.next = 39;
295
+ return processScannedProductItem(host, _item, scanCode, bridge);
296
+ case 39:
297
+ outcome = _context4.sent;
298
+ if (outcome === 'added') {
299
+ addedCount += 1;
300
+ }
301
+ if (!(outcome === 'cancelled')) {
302
+ _context4.next = 43;
303
+ break;
304
+ }
305
+ return _context4.abrupt("return", {
306
+ status: 'cancelled'
307
+ });
308
+ case 43:
309
+ if (!(outcome === 'pending')) {
310
+ _context4.next = 45;
311
+ break;
312
+ }
313
+ return _context4.abrupt("return", {
314
+ status: 'pending',
315
+ kind: 'requiresDetail'
316
+ });
317
+ case 45:
318
+ _context4.next = 35;
319
+ break;
320
+ case 47:
321
+ _context4.next = 52;
322
+ break;
323
+ case 49:
324
+ _context4.prev = 49;
325
+ _context4.t0 = _context4["catch"](33);
326
+ _iterator.e(_context4.t0);
327
+ case 52:
328
+ _context4.prev = 52;
329
+ _iterator.f();
330
+ return _context4.finish(52);
331
+ case 55:
332
+ if (!(addedCount > 0)) {
333
+ _context4.next = 58;
334
+ break;
335
+ }
336
+ bridge === null || bridge === void 0 || (_bridge$onNotify6 = bridge.onNotify) === null || _bridge$onNotify6 === void 0 || _bridge$onNotify6.call(bridge, 'success');
337
+ return _context4.abrupt("return", {
338
+ status: 'success',
339
+ kind: 'products',
340
+ meta: {
341
+ count: addedCount
342
+ }
343
+ });
344
+ case 58:
345
+ return _context4.abrupt("return", {
346
+ status: 'failed',
347
+ reason: 'no_bridge'
348
+ });
349
+ case 59:
350
+ if (!(searchType === 'order')) {
351
+ _context4.next = 68;
352
+ break;
353
+ }
354
+ orderId = (_data$order_id = data === null || data === void 0 ? void 0 : data.order_id) !== null && _data$order_id !== void 0 ? _data$order_id : data === null || data === void 0 ? void 0 : data.id;
355
+ if (orderId) {
356
+ _context4.next = 64;
357
+ break;
358
+ }
359
+ bridge === null || bridge === void 0 || (_bridge$onNotify7 = bridge.onNotify) === null || _bridge$onNotify7 === void 0 || _bridge$onNotify7.call(bridge, 'fail', 'pisell2.text.scan-global-failed');
360
+ return _context4.abrupt("return", {
361
+ status: 'failed',
362
+ reason: 'invalid_data'
363
+ });
364
+ case 64:
365
+ if (bridge !== null && bridge !== void 0 && bridge.openOrder) {
366
+ _context4.next = 66;
367
+ break;
368
+ }
369
+ return _context4.abrupt("return", {
370
+ status: 'pending',
371
+ kind: 'openOrder'
372
+ });
373
+ case 66:
374
+ bridge.openOrder({
375
+ order_id: Number(orderId),
376
+ business_code: host.getBusinessCode()
377
+ });
378
+ return _context4.abrupt("return", {
379
+ status: 'pending',
380
+ kind: 'openOrder'
381
+ });
382
+ case 68:
383
+ return _context4.abrupt("return", {
384
+ status: 'failed',
385
+ reason: 'invalid_data'
386
+ });
387
+ case 69:
388
+ case "end":
389
+ return _context4.stop();
390
+ }
391
+ }, _callee4, null, [[33, 49, 52, 55]]);
392
+ }));
393
+ return _applyGlobalScan.apply(this, arguments);
394
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * 全局扫码搜索结果格式化(对齐 ticketBooking `formatScanGlobal`)。
3
+ */
4
+ export type GlobalScanSearchType = 'customer' | 'wallet' | 'walletPass' | 'product' | 'local_product' | 'order';
5
+ export interface GlobalScanFormattedResult {
6
+ searchType: GlobalScanSearchType;
7
+ data: any;
8
+ scanCode: string;
9
+ }
10
+ interface RawScanSearchResult {
11
+ searchType?: GlobalScanSearchType;
12
+ response?: {
13
+ status?: boolean;
14
+ code?: number;
15
+ message?: string;
16
+ data?: any;
17
+ };
18
+ }
19
+ /**
20
+ * 将 handleGlobalScan 返回的原始结构格式化为 UI/OS 统一结构。
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * const formatted = formatGlobalScanResult(
25
+ * { searchType: 'wallet', response: { code: 200, data: { customer: {...} } } },
26
+ * 'WL123',
27
+ * );
28
+ * // => { searchType: 'wallet', data: customerObj, scanCode: 'WL123' }
29
+ * ```
30
+ */
31
+ export declare function formatGlobalScanResult(raw: RawScanSearchResult | null | undefined, scanCode: string): GlobalScanFormattedResult | null;
32
+ export {};
@@ -0,0 +1,56 @@
1
+ /**
2
+ * 全局扫码搜索结果格式化(对齐 ticketBooking `formatScanGlobal`)。
3
+ */
4
+
5
+ /**
6
+ * 将 handleGlobalScan 返回的原始结构格式化为 UI/OS 统一结构。
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * const formatted = formatGlobalScanResult(
11
+ * { searchType: 'wallet', response: { code: 200, data: { customer: {...} } } },
12
+ * 'WL123',
13
+ * );
14
+ * // => { searchType: 'wallet', data: customerObj, scanCode: 'WL123' }
15
+ * ```
16
+ */
17
+ export function formatGlobalScanResult(raw, scanCode) {
18
+ if (!(raw !== null && raw !== void 0 && raw.searchType)) return null;
19
+ var searchType = raw.searchType;
20
+ var _ref = raw.response || {},
21
+ resultData = _ref.data,
22
+ code = _ref.code;
23
+ if (code !== 200 && searchType !== 'local_product') {
24
+ return null;
25
+ }
26
+ if (searchType === 'wallet') {
27
+ return {
28
+ searchType: searchType,
29
+ data: resultData === null || resultData === void 0 ? void 0 : resultData.customer,
30
+ scanCode: scanCode
31
+ };
32
+ }
33
+ if (searchType === 'walletPass') {
34
+ var _resultData$;
35
+ return {
36
+ searchType: searchType,
37
+ data: resultData === null || resultData === void 0 || (_resultData$ = resultData[0]) === null || _resultData$ === void 0 ? void 0 : _resultData$.customer,
38
+ scanCode: scanCode
39
+ };
40
+ }
41
+ if (searchType === 'product' || searchType === 'local_product') {
42
+ return {
43
+ searchType: searchType,
44
+ data: resultData,
45
+ scanCode: scanCode
46
+ };
47
+ }
48
+ if (searchType === 'order') {
49
+ return {
50
+ searchType: searchType,
51
+ data: resultData,
52
+ scanCode: scanCode
53
+ };
54
+ }
55
+ return null;
56
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 扫码商品条码预选规格纯函数(对齐 ticketBooking addServiceVariant/utils)。
3
+ */
4
+ /** 套餐商品 */
5
+ export declare function isScanProductBundle(item: any): boolean;
6
+ /** 单规格 / 选项组商品 */
7
+ export declare function isScanProductOption(item: any): boolean;
8
+ /**
9
+ * 根据条码匹配 variant,生成 cartDetailValue(对齐 ticketBooking `genValues`)。
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const values = genScanProductValues(catalogItem, '6901234567890');
14
+ * const itemWithSelection = { ...catalogItem, cartDetailValue: values };
15
+ * ```
16
+ */
17
+ export declare function genScanProductValues(item: any, code: string): Record<string, any>;
18
+ /**
19
+ * 统计条码命中的 variant 数量(多命中时需弹窗选择)。
20
+ */
21
+ export declare function countScanVariantMatches(item: any, code: string): number;