@pisell/pisellos 0.0.229 → 0.0.231
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.
- package/dist/modules/Order/index.d.ts +13 -2
- package/dist/modules/Order/index.js +84 -1
- package/dist/modules/Order/types.d.ts +43 -0
- package/dist/modules/Order/types.js +8 -0
- package/dist/modules/Payment/cash.d.ts +8 -0
- package/dist/modules/Payment/cash.js +20 -1
- package/dist/modules/Payment/cashRecommendationAlgorithm.d.ts +22 -0
- package/dist/modules/Payment/cashRecommendationAlgorithm.js +423 -0
- package/dist/modules/Payment/eftpos.js +1 -1
- package/dist/modules/Payment/index.d.ts +57 -94
- package/dist/modules/Payment/index.js +810 -1109
- package/dist/modules/Payment/mx51.d.ts +0 -0
- package/dist/modules/Payment/mx51.js +0 -0
- package/dist/modules/Payment/types.d.ts +358 -50
- package/dist/modules/Payment/types.js +103 -4
- package/dist/modules/Payment/utils.d.ts +17 -0
- package/dist/modules/Payment/utils.js +62 -0
- package/dist/modules/Payment/walletpass.d.ts +96 -0
- package/dist/modules/Payment/walletpass.js +492 -0
- package/dist/modules/Schedule/index.d.ts +9 -0
- package/dist/modules/Schedule/index.js +60 -0
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/dist/solution/Checkout/appointmentDemo.json +1 -0
- package/dist/solution/Checkout/index.d.ts +415 -0
- package/dist/solution/Checkout/index.js +3622 -0
- package/dist/solution/Checkout/types.d.ts +737 -0
- package/dist/solution/Checkout/types.js +137 -0
- package/dist/solution/Checkout/utils/index.d.ts +73 -0
- package/dist/{modules/Payment/wallet.js → solution/Checkout/utils/index.js} +363 -70
- package/dist/solution/index.d.ts +1 -0
- package/dist/solution/index.js +2 -1
- package/lib/modules/Order/index.d.ts +13 -2
- package/lib/modules/Order/index.js +58 -1
- package/lib/modules/Order/types.d.ts +43 -0
- package/lib/modules/Payment/cash.d.ts +8 -0
- package/lib/modules/Payment/cash.js +14 -1
- package/lib/modules/Payment/cashRecommendationAlgorithm.d.ts +22 -0
- package/lib/modules/Payment/cashRecommendationAlgorithm.js +342 -0
- package/lib/modules/Payment/eftpos.js +1 -1
- package/lib/modules/Payment/index.d.ts +57 -94
- package/lib/modules/Payment/index.js +363 -525
- package/lib/modules/Payment/mx51.d.ts +0 -0
- package/lib/modules/Payment/mx51.js +0 -0
- package/lib/modules/Payment/types.d.ts +358 -50
- package/lib/modules/Payment/types.js +37 -2
- package/lib/modules/Payment/utils.d.ts +17 -0
- package/lib/modules/Payment/utils.js +67 -0
- package/lib/modules/Payment/walletpass.d.ts +96 -0
- package/lib/modules/Payment/walletpass.js +304 -0
- package/lib/modules/Schedule/index.d.ts +9 -0
- package/lib/modules/Schedule/index.js +36 -0
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/lib/solution/Checkout/appointmentDemo.json +1 -0
- package/lib/solution/Checkout/index.d.ts +415 -0
- package/lib/solution/Checkout/index.js +2107 -0
- package/lib/solution/Checkout/types.d.ts +737 -0
- package/lib/solution/Checkout/types.js +80 -0
- package/lib/solution/Checkout/utils/index.d.ts +73 -0
- package/lib/solution/Checkout/utils/index.js +266 -0
- package/lib/solution/index.d.ts +1 -0
- package/lib/solution/index.js +3 -1
- package/package.json +1 -1
- package/dist/modules/Payment/wallet.d.ts +0 -11
- package/lib/modules/Payment/wallet.d.ts +0 -11
- package/lib/modules/Payment/wallet.js +0 -51
|
@@ -0,0 +1,3622 @@
|
|
|
1
|
+
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; } } }; }
|
|
2
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
3
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
+
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); }
|
|
5
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
6
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
7
|
+
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; }
|
|
8
|
+
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); }
|
|
9
|
+
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; }
|
|
10
|
+
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; }
|
|
11
|
+
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; }
|
|
12
|
+
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); } }
|
|
13
|
+
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); }); }; }
|
|
14
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
15
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
16
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
17
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
18
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
19
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
20
|
+
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
|
21
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
22
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
23
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
24
|
+
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; }
|
|
25
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
26
|
+
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); }
|
|
27
|
+
import { BaseModule } from "../../modules/BaseModule";
|
|
28
|
+
import { OrderModule } from "../../modules/Order";
|
|
29
|
+
import { PaymentModule } from "../../modules/Payment";
|
|
30
|
+
import { CheckoutStatus, CheckoutStep, CheckoutHooks, CheckoutErrorType } from "./types";
|
|
31
|
+
import { PaymentStatus, PaymentMethodType } from "../../modules/Payment/types";
|
|
32
|
+
import { validateCheckoutData, createCheckoutError, calculateProgress } from "./utils";
|
|
33
|
+
export * from "./types";
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 结账解决方案实现
|
|
37
|
+
*
|
|
38
|
+
* 整合订单处理和支付功能,提供完整的结账流程管理。
|
|
39
|
+
* 支持多种支付方式,提供实时状态跟踪和错误处理。
|
|
40
|
+
*/
|
|
41
|
+
export var CheckoutImpl = /*#__PURE__*/function (_BaseModule) {
|
|
42
|
+
_inherits(CheckoutImpl, _BaseModule);
|
|
43
|
+
var _super = _createSuper(CheckoutImpl);
|
|
44
|
+
function CheckoutImpl(name, version) {
|
|
45
|
+
var _this;
|
|
46
|
+
_classCallCheck(this, CheckoutImpl);
|
|
47
|
+
_this = _super.call(this, name || 'checkout', version || '1.0.0');
|
|
48
|
+
_defineProperty(_assertThisInitialized(_this), "defaultName", 'checkout');
|
|
49
|
+
_defineProperty(_assertThisInitialized(_this), "defaultVersion", '1.0.0');
|
|
50
|
+
_defineProperty(_assertThisInitialized(_this), "isSolution", true);
|
|
51
|
+
_defineProperty(_assertThisInitialized(_this), "request", void 0);
|
|
52
|
+
_defineProperty(_assertThisInitialized(_this), "store", void 0);
|
|
53
|
+
_defineProperty(_assertThisInitialized(_this), "otherParams", {});
|
|
54
|
+
// 直接挂载的模块
|
|
55
|
+
_defineProperty(_assertThisInitialized(_this), "order", void 0);
|
|
56
|
+
_defineProperty(_assertThisInitialized(_this), "payment", void 0);
|
|
57
|
+
return _this;
|
|
58
|
+
}
|
|
59
|
+
_createClass(CheckoutImpl, [{
|
|
60
|
+
key: "initialize",
|
|
61
|
+
value: function () {
|
|
62
|
+
var _initialize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(core, options) {
|
|
63
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
64
|
+
while (1) switch (_context.prev = _context.next) {
|
|
65
|
+
case 0:
|
|
66
|
+
this.core = core;
|
|
67
|
+
this.otherParams = options.otherParams || {};
|
|
68
|
+
|
|
69
|
+
// 获取依赖的插件
|
|
70
|
+
this.request = core.getPlugin('request');
|
|
71
|
+
if (this.request) {
|
|
72
|
+
_context.next = 5;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
throw new Error('Checkout 解决方案需要 request 插件支持');
|
|
76
|
+
case 5:
|
|
77
|
+
// 初始化模块
|
|
78
|
+
this.order = new OrderModule();
|
|
79
|
+
this.payment = new PaymentModule();
|
|
80
|
+
|
|
81
|
+
// 初始化状态
|
|
82
|
+
this.store = {
|
|
83
|
+
status: CheckoutStatus.Initializing,
|
|
84
|
+
step: CheckoutStep.OrderConfirmation,
|
|
85
|
+
cartItems: [],
|
|
86
|
+
paymentMethods: [],
|
|
87
|
+
stateAmount: '0.00',
|
|
88
|
+
cartSummary: undefined,
|
|
89
|
+
isOrderSynced: false,
|
|
90
|
+
currentCustomer: undefined
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
// 注册并初始化子模块
|
|
94
|
+
_context.next = 10;
|
|
95
|
+
return this.initializeSubModules(core, options);
|
|
96
|
+
case 10:
|
|
97
|
+
_context.next = 12;
|
|
98
|
+
return this.preloadPaymentMethods();
|
|
99
|
+
case 12:
|
|
100
|
+
_context.next = 14;
|
|
101
|
+
return this.setStatus(CheckoutStatus.Ready);
|
|
102
|
+
case 14:
|
|
103
|
+
console.log('[Checkout] 初始化完成');
|
|
104
|
+
_context.next = 17;
|
|
105
|
+
return this.core.effects.emit(CheckoutHooks.OnCheckoutInitialized, {
|
|
106
|
+
timestamp: Date.now()
|
|
107
|
+
});
|
|
108
|
+
case 17:
|
|
109
|
+
case "end":
|
|
110
|
+
return _context.stop();
|
|
111
|
+
}
|
|
112
|
+
}, _callee, this);
|
|
113
|
+
}));
|
|
114
|
+
function initialize(_x, _x2) {
|
|
115
|
+
return _initialize.apply(this, arguments);
|
|
116
|
+
}
|
|
117
|
+
return initialize;
|
|
118
|
+
}()
|
|
119
|
+
/**
|
|
120
|
+
* 初始化子模块
|
|
121
|
+
*/
|
|
122
|
+
}, {
|
|
123
|
+
key: "initializeSubModules",
|
|
124
|
+
value: (function () {
|
|
125
|
+
var _initializeSubModules = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(core, options) {
|
|
126
|
+
var _options$store, _options$store2;
|
|
127
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
128
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
129
|
+
case 0:
|
|
130
|
+
// 初始化订单模块
|
|
131
|
+
core.registerModule(this.order, {
|
|
132
|
+
store: ((_options$store = options.store) === null || _options$store === void 0 ? void 0 : _options$store.order) || {},
|
|
133
|
+
otherParams: _objectSpread(_objectSpread({}, this.otherParams), {}, {
|
|
134
|
+
parentModule: this.name
|
|
135
|
+
})
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// 初始化支付模块
|
|
139
|
+
core.registerModule(this.payment, {
|
|
140
|
+
store: ((_options$store2 = options.store) === null || _options$store2 === void 0 ? void 0 : _options$store2.payment) || {},
|
|
141
|
+
otherParams: _objectSpread(_objectSpread({}, this.otherParams), {}, {
|
|
142
|
+
parentModule: this.name
|
|
143
|
+
})
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
// 监听支付模块事件
|
|
147
|
+
this.setupPaymentEventListeners();
|
|
148
|
+
case 3:
|
|
149
|
+
case "end":
|
|
150
|
+
return _context2.stop();
|
|
151
|
+
}
|
|
152
|
+
}, _callee2, this);
|
|
153
|
+
}));
|
|
154
|
+
function initializeSubModules(_x3, _x4) {
|
|
155
|
+
return _initializeSubModules.apply(this, arguments);
|
|
156
|
+
}
|
|
157
|
+
return initializeSubModules;
|
|
158
|
+
}()
|
|
159
|
+
/**
|
|
160
|
+
* 设置支付模块事件监听
|
|
161
|
+
*/
|
|
162
|
+
)
|
|
163
|
+
}, {
|
|
164
|
+
key: "setupPaymentEventListeners",
|
|
165
|
+
value: function setupPaymentEventListeners() {
|
|
166
|
+
var _this2 = this;
|
|
167
|
+
// 监听支付成功事件
|
|
168
|
+
this.core.effects.on('payment:onPaymentSyncSuccess', /*#__PURE__*/function () {
|
|
169
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(data) {
|
|
170
|
+
var _this2$store$currentO;
|
|
171
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
172
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
173
|
+
case 0:
|
|
174
|
+
if (!(((_this2$store$currentO = _this2.store.currentOrder) === null || _this2$store$currentO === void 0 ? void 0 : _this2$store$currentO.uuid) === data.orderUuid)) {
|
|
175
|
+
_context3.next = 3;
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
_context3.next = 3;
|
|
179
|
+
return _this2.handlePaymentSuccess(data);
|
|
180
|
+
case 3:
|
|
181
|
+
case "end":
|
|
182
|
+
return _context3.stop();
|
|
183
|
+
}
|
|
184
|
+
}, _callee3);
|
|
185
|
+
}));
|
|
186
|
+
return function (_x5) {
|
|
187
|
+
return _ref.apply(this, arguments);
|
|
188
|
+
};
|
|
189
|
+
}());
|
|
190
|
+
|
|
191
|
+
// 监听支付失败事件
|
|
192
|
+
this.core.effects.on('payment:onPaymentSyncError', /*#__PURE__*/function () {
|
|
193
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(data) {
|
|
194
|
+
var _this2$store$currentO2;
|
|
195
|
+
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
196
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
197
|
+
case 0:
|
|
198
|
+
if (!(((_this2$store$currentO2 = _this2.store.currentOrder) === null || _this2$store$currentO2 === void 0 ? void 0 : _this2$store$currentO2.uuid) === data.orderUuid)) {
|
|
199
|
+
_context4.next = 3;
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
_context4.next = 3;
|
|
203
|
+
return _this2.handlePaymentError(data);
|
|
204
|
+
case 3:
|
|
205
|
+
case "end":
|
|
206
|
+
return _context4.stop();
|
|
207
|
+
}
|
|
208
|
+
}, _callee4);
|
|
209
|
+
}));
|
|
210
|
+
return function (_x6) {
|
|
211
|
+
return _ref2.apply(this, arguments);
|
|
212
|
+
};
|
|
213
|
+
}());
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* 初始化结账流程
|
|
218
|
+
*/
|
|
219
|
+
}, {
|
|
220
|
+
key: "initializeCheckoutAsync",
|
|
221
|
+
value: (function () {
|
|
222
|
+
var _initializeCheckoutAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(params) {
|
|
223
|
+
var validation;
|
|
224
|
+
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
225
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
226
|
+
case 0:
|
|
227
|
+
_context5.prev = 0;
|
|
228
|
+
_context5.next = 3;
|
|
229
|
+
return this.setStatus(CheckoutStatus.Initializing);
|
|
230
|
+
case 3:
|
|
231
|
+
_context5.next = 5;
|
|
232
|
+
return this.validateCheckoutParams(params);
|
|
233
|
+
case 5:
|
|
234
|
+
validation = _context5.sent;
|
|
235
|
+
if (validation.valid) {
|
|
236
|
+
_context5.next = 8;
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, "\u53C2\u6570\u9A8C\u8BC1\u5931\u8D25: ".concat(validation.errors.join(', ')));
|
|
240
|
+
case 8:
|
|
241
|
+
// 保存购物车数据
|
|
242
|
+
this.store.cartItems = params.cartItems;
|
|
243
|
+
|
|
244
|
+
// 设置为就绪状态
|
|
245
|
+
_context5.next = 11;
|
|
246
|
+
return this.setStatus(CheckoutStatus.Ready);
|
|
247
|
+
case 11:
|
|
248
|
+
_context5.next = 13;
|
|
249
|
+
return this.setStep(CheckoutStep.OrderConfirmation);
|
|
250
|
+
case 13:
|
|
251
|
+
console.log('[Checkout] 结账流程初始化完成');
|
|
252
|
+
_context5.next = 21;
|
|
253
|
+
break;
|
|
254
|
+
case 16:
|
|
255
|
+
_context5.prev = 16;
|
|
256
|
+
_context5.t0 = _context5["catch"](0);
|
|
257
|
+
_context5.next = 20;
|
|
258
|
+
return this.handleError(_context5.t0, CheckoutErrorType.UnknownError);
|
|
259
|
+
case 20:
|
|
260
|
+
throw _context5.t0;
|
|
261
|
+
case 21:
|
|
262
|
+
case "end":
|
|
263
|
+
return _context5.stop();
|
|
264
|
+
}
|
|
265
|
+
}, _callee5, this, [[0, 16]]);
|
|
266
|
+
}));
|
|
267
|
+
function initializeCheckoutAsync(_x7) {
|
|
268
|
+
return _initializeCheckoutAsync.apply(this, arguments);
|
|
269
|
+
}
|
|
270
|
+
return initializeCheckoutAsync;
|
|
271
|
+
}())
|
|
272
|
+
}, {
|
|
273
|
+
key: "getProductListByOrder",
|
|
274
|
+
value: function getProductListByOrder() {
|
|
275
|
+
var _this$store$currentOr;
|
|
276
|
+
if (!this.store.currentOrder) {
|
|
277
|
+
return [];
|
|
278
|
+
}
|
|
279
|
+
var productList = (_this$store$currentOr = this.store.currentOrder.order_info) === null || _this$store$currentOr === void 0 ? void 0 : _this$store$currentOr.original_order_data.bookings.map(function (item) {
|
|
280
|
+
return {
|
|
281
|
+
product_id: item.product.product_id,
|
|
282
|
+
product_variant_id: item.product.product_variant_id,
|
|
283
|
+
quantity: item.product.num,
|
|
284
|
+
selling_price: item.product.price - (item.product.discount_amount || 0)
|
|
285
|
+
};
|
|
286
|
+
});
|
|
287
|
+
return productList;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* 创建本地订单 (前端模拟下单流程)
|
|
292
|
+
*
|
|
293
|
+
* 此方法用于在前端模拟整个下单流程,创建一个本地的虚拟订单。
|
|
294
|
+
* 用户在购物车点击下单时,会把购物车参数传递给此方法,
|
|
295
|
+
* 方法会记录参数并创建本地虚拟订单,然后用 Payment 模块管理支付流程。
|
|
296
|
+
*/
|
|
297
|
+
}, {
|
|
298
|
+
key: "createLocalOrderAsync",
|
|
299
|
+
value: (function () {
|
|
300
|
+
var _createLocalOrderAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(params) {
|
|
301
|
+
var _params$totalInfo, _params$totalInfo2, _this$store$currentCu, validation, localOrderId, amountInfo, customerInfo, paymentOrder, walletBusinessData, walletData;
|
|
302
|
+
return _regeneratorRuntime().wrap(function _callee6$(_context6) {
|
|
303
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
304
|
+
case 0:
|
|
305
|
+
_context6.prev = 0;
|
|
306
|
+
_context6.next = 3;
|
|
307
|
+
return this.setStatus(CheckoutStatus.CreatingOrder);
|
|
308
|
+
case 3:
|
|
309
|
+
_context6.next = 5;
|
|
310
|
+
return this.validateLocalOrderData(params.orderData);
|
|
311
|
+
case 5:
|
|
312
|
+
validation = _context6.sent;
|
|
313
|
+
if (validation.valid) {
|
|
314
|
+
_context6.next = 8;
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, "\u8BA2\u5355\u6570\u636E\u9A8C\u8BC1\u5931\u8D25: ".concat(validation.errors.join(', ')));
|
|
318
|
+
case 8:
|
|
319
|
+
// 生成本地虚拟订单ID (后续可以被真实订单ID替换)
|
|
320
|
+
localOrderId = this.generateLocalOrderId(); // 从购物车小计数据中提取金额信息
|
|
321
|
+
amountInfo = this.extractAmountFromCartSummary(params.cartSummary); // TODO: 外面传的是 pos ,但是现在 后端只有 shop 和 kiosk
|
|
322
|
+
params.orderData.platform = 'pos';
|
|
323
|
+
// 补充 created_at 时间 (YYYY-MM-DD hh:mm:ss 格式)
|
|
324
|
+
params.orderData.created_at = this.formatDateTime(new Date());
|
|
325
|
+
// 补充税费信息
|
|
326
|
+
params.orderData.surcharge_fee = (_params$totalInfo = params.totalInfo) === null || _params$totalInfo === void 0 || (_params$totalInfo = _params$totalInfo.total) === null || _params$totalInfo === void 0 ? void 0 : _params$totalInfo.paySurchargeFee;
|
|
327
|
+
// 补充订单折扣信息
|
|
328
|
+
params.orderData.shop_discount = (_params$totalInfo2 = params.totalInfo) === null || _params$totalInfo2 === void 0 || (_params$totalInfo2 = _params$totalInfo2.total) === null || _params$totalInfo2 === void 0 ? void 0 : _params$totalInfo2.shopDiscount;
|
|
329
|
+
|
|
330
|
+
// 保存原始订单数据和小计数据到状态中
|
|
331
|
+
this.store.localOrderData = params.orderData;
|
|
332
|
+
this.store.cartSummary = params.cartSummary;
|
|
333
|
+
|
|
334
|
+
// 提取并保存客户信息(如果有)
|
|
335
|
+
customerInfo = {
|
|
336
|
+
customer_id: params.orderData.customer_id,
|
|
337
|
+
customer_name: params.orderData.customer_name
|
|
338
|
+
}; // 只有在有客户信息时才存储
|
|
339
|
+
if (customerInfo.customer_id || customerInfo.customer_name) {
|
|
340
|
+
this.store.currentCustomer = customerInfo;
|
|
341
|
+
console.log('[Checkout] 保存客户信息:', customerInfo);
|
|
342
|
+
} else {
|
|
343
|
+
this.store.currentCustomer = undefined;
|
|
344
|
+
console.log('[Checkout] 未提供客户信息');
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// 创建支付订单对象
|
|
348
|
+
_context6.next = 20;
|
|
349
|
+
return this.payment.createPaymentOrderAsync({
|
|
350
|
+
order_id: localOrderId,
|
|
351
|
+
total_amount: amountInfo.totalAmount,
|
|
352
|
+
is_deposit: params.orderData.is_deposit || 0,
|
|
353
|
+
deposit_amount: amountInfo.depositAmount || '0.00',
|
|
354
|
+
order_info: {
|
|
355
|
+
original_order_data: params.orderData,
|
|
356
|
+
cart_summary: params.cartSummary,
|
|
357
|
+
created_at: new Date().toISOString(),
|
|
358
|
+
platform: params.orderData.platform,
|
|
359
|
+
type: params.orderData.type,
|
|
360
|
+
schedule_date: params.orderData.schedule_date,
|
|
361
|
+
shop_note: params.orderData.shop_note,
|
|
362
|
+
amount_breakdown: amountInfo
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
case 20:
|
|
366
|
+
paymentOrder = _context6.sent;
|
|
367
|
+
this.store.currentOrder = paymentOrder;
|
|
368
|
+
|
|
369
|
+
// 准备钱包初始化的业务数据
|
|
370
|
+
walletBusinessData = {
|
|
371
|
+
customer_id: (_this$store$currentCu = this.store.currentCustomer) !== null && _this$store$currentCu !== void 0 && _this$store$currentCu.customer_id ? Number(this.store.currentCustomer.customer_id) : undefined,
|
|
372
|
+
amountInfo: {
|
|
373
|
+
totalAmount: amountInfo.totalAmount,
|
|
374
|
+
subTotal: amountInfo.subTotal
|
|
375
|
+
},
|
|
376
|
+
products: this.getProductListByOrder()
|
|
377
|
+
}; // 调用WalletPass模块的业务数据初始化函数
|
|
378
|
+
_context6.next = 25;
|
|
379
|
+
return this.payment.wallet.initializeWalletDataFromBusinessAsync(walletBusinessData);
|
|
380
|
+
case 25:
|
|
381
|
+
walletData = _context6.sent;
|
|
382
|
+
console.log(walletData.walletRecommendList, 'walletRecommendList');
|
|
383
|
+
console.log(walletData.userIdentificationCodes, 'userIdentificationCodes');
|
|
384
|
+
_context6.next = 30;
|
|
385
|
+
return this.setStatus(CheckoutStatus.OrderCreated);
|
|
386
|
+
case 30:
|
|
387
|
+
_context6.next = 32;
|
|
388
|
+
return this.setStep(CheckoutStep.PaymentMethod);
|
|
389
|
+
case 32:
|
|
390
|
+
if (!params.autoPayment) {
|
|
391
|
+
_context6.next = 35;
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
394
|
+
_context6.next = 35;
|
|
395
|
+
return this.setStep(CheckoutStep.PaymentProcessing);
|
|
396
|
+
case 35:
|
|
397
|
+
_context6.next = 37;
|
|
398
|
+
return this.core.effects.emit(CheckoutHooks.OnOrderCreated, {
|
|
399
|
+
order: paymentOrder,
|
|
400
|
+
timestamp: Date.now()
|
|
401
|
+
});
|
|
402
|
+
case 37:
|
|
403
|
+
_context6.next = 39;
|
|
404
|
+
return this.updateStateAmountToRemaining();
|
|
405
|
+
case 39:
|
|
406
|
+
console.log('[Checkout] 本地订单创建成功:', {
|
|
407
|
+
localOrderId: localOrderId,
|
|
408
|
+
uuid: paymentOrder.uuid,
|
|
409
|
+
totalAmount: amountInfo.totalAmount,
|
|
410
|
+
subTotal: amountInfo.subTotal,
|
|
411
|
+
taxAmount: amountInfo.taxAmount,
|
|
412
|
+
stateAmount: this.store.stateAmount
|
|
413
|
+
});
|
|
414
|
+
return _context6.abrupt("return", paymentOrder);
|
|
415
|
+
case 43:
|
|
416
|
+
_context6.prev = 43;
|
|
417
|
+
_context6.t0 = _context6["catch"](0);
|
|
418
|
+
_context6.next = 47;
|
|
419
|
+
return this.handleError(_context6.t0, CheckoutErrorType.OrderCreationFailed);
|
|
420
|
+
case 47:
|
|
421
|
+
_context6.next = 49;
|
|
422
|
+
return this.core.effects.emit(CheckoutHooks.OnOrderCreationFailed, {
|
|
423
|
+
error: this.store.lastError,
|
|
424
|
+
timestamp: Date.now()
|
|
425
|
+
});
|
|
426
|
+
case 49:
|
|
427
|
+
throw _context6.t0;
|
|
428
|
+
case 50:
|
|
429
|
+
case "end":
|
|
430
|
+
return _context6.stop();
|
|
431
|
+
}
|
|
432
|
+
}, _callee6, this, [[0, 43]]);
|
|
433
|
+
}));
|
|
434
|
+
function createLocalOrderAsync(_x8) {
|
|
435
|
+
return _createLocalOrderAsync.apply(this, arguments);
|
|
436
|
+
}
|
|
437
|
+
return createLocalOrderAsync;
|
|
438
|
+
}()
|
|
439
|
+
/**
|
|
440
|
+
* 手动下单 (根据虚拟订单生成实际订单)
|
|
441
|
+
*
|
|
442
|
+
* 使用当前存储的本地订单数据调用 Order 模块创建真实订单
|
|
443
|
+
*/
|
|
444
|
+
)
|
|
445
|
+
}, {
|
|
446
|
+
key: "placeOrderAsync",
|
|
447
|
+
value: (function () {
|
|
448
|
+
var _placeOrderAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
|
|
449
|
+
var params,
|
|
450
|
+
_data,
|
|
451
|
+
orderData,
|
|
452
|
+
orderResponse,
|
|
453
|
+
realOrderId,
|
|
454
|
+
updatedOrder,
|
|
455
|
+
errorMessage,
|
|
456
|
+
_args7 = arguments;
|
|
457
|
+
return _regeneratorRuntime().wrap(function _callee7$(_context7) {
|
|
458
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
459
|
+
case 0:
|
|
460
|
+
params = _args7.length > 0 && _args7[0] !== undefined ? _args7[0] : {};
|
|
461
|
+
_context7.prev = 1;
|
|
462
|
+
if (this.store.localOrderData) {
|
|
463
|
+
_context7.next = 4;
|
|
464
|
+
break;
|
|
465
|
+
}
|
|
466
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, '没有找到本地订单数据,请先调用 createLocalOrderAsync 创建虚拟订单');
|
|
467
|
+
case 4:
|
|
468
|
+
if (this.store.currentOrder) {
|
|
469
|
+
_context7.next = 6;
|
|
470
|
+
break;
|
|
471
|
+
}
|
|
472
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, '没有找到当前订单,请先创建虚拟订单');
|
|
473
|
+
case 6:
|
|
474
|
+
console.log('[Checkout] 开始手动下单流程...');
|
|
475
|
+
_context7.next = 9;
|
|
476
|
+
return this.setStatus(CheckoutStatus.CreatingOrder);
|
|
477
|
+
case 9:
|
|
478
|
+
// 准备订单数据,使用 Order 模块期望的格式
|
|
479
|
+
orderData = {
|
|
480
|
+
cartItems: this.store.cartItems,
|
|
481
|
+
type: this.store.localOrderData.type,
|
|
482
|
+
platform: this.store.localOrderData.platform
|
|
483
|
+
}; // 调用 Order 模块提交订单
|
|
484
|
+
_context7.next = 12;
|
|
485
|
+
return this.order.submitOrder({
|
|
486
|
+
url: params.url,
|
|
487
|
+
// 可选的自定义 URL
|
|
488
|
+
query: orderData
|
|
489
|
+
});
|
|
490
|
+
case 12:
|
|
491
|
+
orderResponse = _context7.sent;
|
|
492
|
+
// 提取真实订单ID(假设返回格式包含 order_id)
|
|
493
|
+
realOrderId = (orderResponse === null || orderResponse === void 0 || (_data = orderResponse.data) === null || _data === void 0 ? void 0 : _data.order_id) || (orderResponse === null || orderResponse === void 0 ? void 0 : orderResponse.order_id);
|
|
494
|
+
if (realOrderId) {
|
|
495
|
+
_context7.next = 16;
|
|
496
|
+
break;
|
|
497
|
+
}
|
|
498
|
+
throw createCheckoutError(CheckoutErrorType.OrderCreationFailed, '订单创建成功但未返回订单ID');
|
|
499
|
+
case 16:
|
|
500
|
+
console.log('[Checkout] 真实订单创建成功:', realOrderId);
|
|
501
|
+
|
|
502
|
+
// 如果设置了自动替换订单ID,则替换虚拟订单ID
|
|
503
|
+
if (!(params.autoReplaceOrderId !== false)) {
|
|
504
|
+
_context7.next = 23;
|
|
505
|
+
break;
|
|
506
|
+
}
|
|
507
|
+
// 默认为 true
|
|
508
|
+
console.log('[Checkout] 自动替换虚拟订单ID为真实订单ID...');
|
|
509
|
+
_context7.next = 21;
|
|
510
|
+
return this.replaceLocalOrderIdAsync(realOrderId);
|
|
511
|
+
case 21:
|
|
512
|
+
updatedOrder = _context7.sent;
|
|
513
|
+
if (updatedOrder) {
|
|
514
|
+
console.log('[Checkout] 订单ID替换成功:', {
|
|
515
|
+
oldId: this.store.currentOrder.order_id,
|
|
516
|
+
newId: realOrderId
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
case 23:
|
|
520
|
+
_context7.next = 25;
|
|
521
|
+
return this.setStatus(CheckoutStatus.OrderCreated);
|
|
522
|
+
case 25:
|
|
523
|
+
_context7.next = 27;
|
|
524
|
+
return this.core.effects.emit(CheckoutHooks.OnOrderCreated, {
|
|
525
|
+
order: this.store.currentOrder,
|
|
526
|
+
timestamp: Date.now()
|
|
527
|
+
});
|
|
528
|
+
case 27:
|
|
529
|
+
// 标记订单已同步
|
|
530
|
+
this.store.isOrderSynced = true;
|
|
531
|
+
console.log('[Checkout] 手动下单流程完成');
|
|
532
|
+
return _context7.abrupt("return", {
|
|
533
|
+
success: true,
|
|
534
|
+
orderId: realOrderId
|
|
535
|
+
});
|
|
536
|
+
case 32:
|
|
537
|
+
_context7.prev = 32;
|
|
538
|
+
_context7.t0 = _context7["catch"](1);
|
|
539
|
+
// 处理 CheckoutError 对象
|
|
540
|
+
errorMessage = '下单失败';
|
|
541
|
+
if (_context7.t0 && _typeof(_context7.t0) === 'object' && 'message' in _context7.t0) {
|
|
542
|
+
errorMessage = _context7.t0.message;
|
|
543
|
+
} else if (_context7.t0 instanceof Error) {
|
|
544
|
+
errorMessage = _context7.t0.message;
|
|
545
|
+
}
|
|
546
|
+
console.error('[Checkout] 手动下单失败:', errorMessage);
|
|
547
|
+
_context7.next = 39;
|
|
548
|
+
return this.handleError(_context7.t0, CheckoutErrorType.OrderCreationFailed);
|
|
549
|
+
case 39:
|
|
550
|
+
return _context7.abrupt("return", {
|
|
551
|
+
success: false,
|
|
552
|
+
error: errorMessage
|
|
553
|
+
});
|
|
554
|
+
case 40:
|
|
555
|
+
case "end":
|
|
556
|
+
return _context7.stop();
|
|
557
|
+
}
|
|
558
|
+
}, _callee7, this, [[1, 32]]);
|
|
559
|
+
}));
|
|
560
|
+
function placeOrderAsync() {
|
|
561
|
+
return _placeOrderAsync.apply(this, arguments);
|
|
562
|
+
}
|
|
563
|
+
return placeOrderAsync;
|
|
564
|
+
}()
|
|
565
|
+
/**
|
|
566
|
+
* 创建订单
|
|
567
|
+
*/
|
|
568
|
+
)
|
|
569
|
+
}, {
|
|
570
|
+
key: "createOrderAsync",
|
|
571
|
+
value: (function () {
|
|
572
|
+
var _createOrderAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(params) {
|
|
573
|
+
var _data2, checkResult, orderResponse, paymentOrder;
|
|
574
|
+
return _regeneratorRuntime().wrap(function _callee8$(_context8) {
|
|
575
|
+
while (1) switch (_context8.prev = _context8.next) {
|
|
576
|
+
case 0:
|
|
577
|
+
_context8.prev = 0;
|
|
578
|
+
_context8.next = 3;
|
|
579
|
+
return this.setStatus(CheckoutStatus.CreatingOrder);
|
|
580
|
+
case 3:
|
|
581
|
+
// 验证购物车数据
|
|
582
|
+
checkResult = this.order.checkBeforeSubmitOrder({
|
|
583
|
+
cartItems: params.cartItems,
|
|
584
|
+
type: 'account' // 默认使用 account 类型
|
|
585
|
+
});
|
|
586
|
+
if (checkResult) {
|
|
587
|
+
_context8.next = 6;
|
|
588
|
+
break;
|
|
589
|
+
}
|
|
590
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, '购物车数据验证失败,请检查商品信息');
|
|
591
|
+
case 6:
|
|
592
|
+
_context8.next = 8;
|
|
593
|
+
return this.order.submitOrder({
|
|
594
|
+
query: {
|
|
595
|
+
cartItems: params.cartItems,
|
|
596
|
+
type: params.type || 'appointment_booking',
|
|
597
|
+
platform: params.platform || 'pc'
|
|
598
|
+
}
|
|
599
|
+
});
|
|
600
|
+
case 8:
|
|
601
|
+
orderResponse = _context8.sent;
|
|
602
|
+
_context8.next = 11;
|
|
603
|
+
return this.payment.createPaymentOrderAsync({
|
|
604
|
+
order_id: (orderResponse === null || orderResponse === void 0 || (_data2 = orderResponse.data) === null || _data2 === void 0 ? void 0 : _data2.order_id) || "order_".concat(Date.now()),
|
|
605
|
+
total_amount: this.calculateTotalAmount(params.cartItems),
|
|
606
|
+
order_info: orderResponse === null || orderResponse === void 0 ? void 0 : orderResponse.data
|
|
607
|
+
});
|
|
608
|
+
case 11:
|
|
609
|
+
paymentOrder = _context8.sent;
|
|
610
|
+
this.store.currentOrder = paymentOrder;
|
|
611
|
+
_context8.next = 15;
|
|
612
|
+
return this.setStatus(CheckoutStatus.OrderCreated);
|
|
613
|
+
case 15:
|
|
614
|
+
_context8.next = 17;
|
|
615
|
+
return this.setStep(CheckoutStep.PaymentMethod);
|
|
616
|
+
case 17:
|
|
617
|
+
_context8.next = 19;
|
|
618
|
+
return this.core.effects.emit(CheckoutHooks.OnOrderCreated, {
|
|
619
|
+
order: paymentOrder,
|
|
620
|
+
timestamp: Date.now()
|
|
621
|
+
});
|
|
622
|
+
case 19:
|
|
623
|
+
// 标记订单已同步(createOrderAsync 创建的是真实订单)
|
|
624
|
+
this.store.isOrderSynced = true;
|
|
625
|
+
|
|
626
|
+
// 自动设置 stateAmount 为剩余未支付金额
|
|
627
|
+
_context8.next = 22;
|
|
628
|
+
return this.updateStateAmountToRemaining();
|
|
629
|
+
case 22:
|
|
630
|
+
console.log('[Checkout] 订单创建成功:', paymentOrder.id);
|
|
631
|
+
return _context8.abrupt("return", paymentOrder);
|
|
632
|
+
case 26:
|
|
633
|
+
_context8.prev = 26;
|
|
634
|
+
_context8.t0 = _context8["catch"](0);
|
|
635
|
+
_context8.next = 30;
|
|
636
|
+
return this.handleError(_context8.t0, CheckoutErrorType.OrderCreationFailed);
|
|
637
|
+
case 30:
|
|
638
|
+
_context8.next = 32;
|
|
639
|
+
return this.core.effects.emit(CheckoutHooks.OnOrderCreationFailed, {
|
|
640
|
+
error: this.store.lastError,
|
|
641
|
+
timestamp: Date.now()
|
|
642
|
+
});
|
|
643
|
+
case 32:
|
|
644
|
+
throw _context8.t0;
|
|
645
|
+
case 33:
|
|
646
|
+
case "end":
|
|
647
|
+
return _context8.stop();
|
|
648
|
+
}
|
|
649
|
+
}, _callee8, this, [[0, 26]]);
|
|
650
|
+
}));
|
|
651
|
+
function createOrderAsync(_x9) {
|
|
652
|
+
return _createOrderAsync.apply(this, arguments);
|
|
653
|
+
}
|
|
654
|
+
return createOrderAsync;
|
|
655
|
+
}()
|
|
656
|
+
/**
|
|
657
|
+
* 处理支付
|
|
658
|
+
*/
|
|
659
|
+
)
|
|
660
|
+
}, {
|
|
661
|
+
key: "processPaymentAsync",
|
|
662
|
+
value: (function () {
|
|
663
|
+
var _processPaymentAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(params) {
|
|
664
|
+
var paymentMethod, paymentItem, result;
|
|
665
|
+
return _regeneratorRuntime().wrap(function _callee9$(_context9) {
|
|
666
|
+
while (1) switch (_context9.prev = _context9.next) {
|
|
667
|
+
case 0:
|
|
668
|
+
_context9.prev = 0;
|
|
669
|
+
if (this.store.currentOrder) {
|
|
670
|
+
_context9.next = 3;
|
|
671
|
+
break;
|
|
672
|
+
}
|
|
673
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, '未找到当前订单,请先创建订单');
|
|
674
|
+
case 3:
|
|
675
|
+
_context9.next = 5;
|
|
676
|
+
return this.setStatus(CheckoutStatus.ProcessingPayment);
|
|
677
|
+
case 5:
|
|
678
|
+
_context9.next = 7;
|
|
679
|
+
return this.setStep(CheckoutStep.PaymentProcessing);
|
|
680
|
+
case 7:
|
|
681
|
+
// 查找支付方式
|
|
682
|
+
paymentMethod = this.store.paymentMethods.find(function (method) {
|
|
683
|
+
return method.code === params.paymentMethodCode;
|
|
684
|
+
});
|
|
685
|
+
if (paymentMethod) {
|
|
686
|
+
_context9.next = 10;
|
|
687
|
+
break;
|
|
688
|
+
}
|
|
689
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, "\u672A\u627E\u5230\u652F\u4ED8\u65B9\u5F0F: ".concat(params.paymentMethodCode));
|
|
690
|
+
case 10:
|
|
691
|
+
// 创建支付项
|
|
692
|
+
paymentItem = {
|
|
693
|
+
code: paymentMethod.code,
|
|
694
|
+
name: paymentMethod.name,
|
|
695
|
+
type: paymentMethod.type,
|
|
696
|
+
amount: String(params.amount),
|
|
697
|
+
id: paymentMethod.id
|
|
698
|
+
}; // 添加支付项到订单
|
|
699
|
+
_context9.next = 13;
|
|
700
|
+
return this.payment.addPaymentItemAsync(this.store.currentOrder.uuid, paymentItem);
|
|
701
|
+
case 13:
|
|
702
|
+
_context9.next = 15;
|
|
703
|
+
return this.payment.submitPayAsync(this.store.currentOrder.uuid);
|
|
704
|
+
case 15:
|
|
705
|
+
result = _context9.sent;
|
|
706
|
+
_context9.next = 18;
|
|
707
|
+
return this.core.effects.emit(CheckoutHooks.OnPaymentStarted, {
|
|
708
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
709
|
+
paymentMethodCode: params.paymentMethodCode,
|
|
710
|
+
amount: String(params.amount),
|
|
711
|
+
timestamp: Date.now()
|
|
712
|
+
});
|
|
713
|
+
case 18:
|
|
714
|
+
if (!(result.status === 'success')) {
|
|
715
|
+
_context9.next = 27;
|
|
716
|
+
break;
|
|
717
|
+
}
|
|
718
|
+
_context9.next = 21;
|
|
719
|
+
return this.setStatus(CheckoutStatus.PaymentCompleted);
|
|
720
|
+
case 21:
|
|
721
|
+
_context9.next = 23;
|
|
722
|
+
return this.updateStateAmountToRemaining();
|
|
723
|
+
case 23:
|
|
724
|
+
_context9.next = 25;
|
|
725
|
+
return this.handlePaymentSuccess({
|
|
726
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
727
|
+
timestamp: Date.now()
|
|
728
|
+
});
|
|
729
|
+
case 25:
|
|
730
|
+
_context9.next = 28;
|
|
731
|
+
break;
|
|
732
|
+
case 27:
|
|
733
|
+
throw createCheckoutError(CheckoutErrorType.PaymentFailed, '支付处理失败,请重试');
|
|
734
|
+
case 28:
|
|
735
|
+
_context9.next = 35;
|
|
736
|
+
break;
|
|
737
|
+
case 30:
|
|
738
|
+
_context9.prev = 30;
|
|
739
|
+
_context9.t0 = _context9["catch"](0);
|
|
740
|
+
_context9.next = 34;
|
|
741
|
+
return this.handleError(_context9.t0, CheckoutErrorType.PaymentFailed);
|
|
742
|
+
case 34:
|
|
743
|
+
throw _context9.t0;
|
|
744
|
+
case 35:
|
|
745
|
+
case "end":
|
|
746
|
+
return _context9.stop();
|
|
747
|
+
}
|
|
748
|
+
}, _callee9, this, [[0, 30]]);
|
|
749
|
+
}));
|
|
750
|
+
function processPaymentAsync(_x10) {
|
|
751
|
+
return _processPaymentAsync.apply(this, arguments);
|
|
752
|
+
}
|
|
753
|
+
return processPaymentAsync;
|
|
754
|
+
}()
|
|
755
|
+
/**
|
|
756
|
+
* 完成结账
|
|
757
|
+
*/
|
|
758
|
+
)
|
|
759
|
+
}, {
|
|
760
|
+
key: "completeCheckoutAsync",
|
|
761
|
+
value: (function () {
|
|
762
|
+
var _completeCheckoutAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10() {
|
|
763
|
+
var order;
|
|
764
|
+
return _regeneratorRuntime().wrap(function _callee10$(_context10) {
|
|
765
|
+
while (1) switch (_context10.prev = _context10.next) {
|
|
766
|
+
case 0:
|
|
767
|
+
_context10.prev = 0;
|
|
768
|
+
if (this.store.currentOrder) {
|
|
769
|
+
_context10.next = 3;
|
|
770
|
+
break;
|
|
771
|
+
}
|
|
772
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, '未找到当前订单');
|
|
773
|
+
case 3:
|
|
774
|
+
_context10.next = 5;
|
|
775
|
+
return this.payment.getPaymentOrderByUuidAsync(this.store.currentOrder.uuid);
|
|
776
|
+
case 5:
|
|
777
|
+
order = _context10.sent;
|
|
778
|
+
if (!(!order || order.payment_status !== PaymentStatus.Finished)) {
|
|
779
|
+
_context10.next = 8;
|
|
780
|
+
break;
|
|
781
|
+
}
|
|
782
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, '订单支付未完成,无法完成结账');
|
|
783
|
+
case 8:
|
|
784
|
+
// 清理钱包模块的所有缓存数据
|
|
785
|
+
this.payment.wallet.clearAllCache();
|
|
786
|
+
_context10.next = 11;
|
|
787
|
+
return this.setStatus(CheckoutStatus.Completed);
|
|
788
|
+
case 11:
|
|
789
|
+
_context10.next = 13;
|
|
790
|
+
return this.setStep(CheckoutStep.Complete);
|
|
791
|
+
case 13:
|
|
792
|
+
_context10.next = 15;
|
|
793
|
+
return this.core.effects.emit(CheckoutHooks.OnCheckoutCompleted, {
|
|
794
|
+
orderId: order.id,
|
|
795
|
+
timestamp: Date.now()
|
|
796
|
+
});
|
|
797
|
+
case 15:
|
|
798
|
+
console.log('[Checkout] 结账流程完成:', order.id);
|
|
799
|
+
return _context10.abrupt("return", {
|
|
800
|
+
success: true,
|
|
801
|
+
orderId: String(order.id)
|
|
802
|
+
});
|
|
803
|
+
case 19:
|
|
804
|
+
_context10.prev = 19;
|
|
805
|
+
_context10.t0 = _context10["catch"](0);
|
|
806
|
+
_context10.next = 23;
|
|
807
|
+
return this.handleError(_context10.t0, CheckoutErrorType.UnknownError);
|
|
808
|
+
case 23:
|
|
809
|
+
return _context10.abrupt("return", {
|
|
810
|
+
success: false
|
|
811
|
+
});
|
|
812
|
+
case 24:
|
|
813
|
+
case "end":
|
|
814
|
+
return _context10.stop();
|
|
815
|
+
}
|
|
816
|
+
}, _callee10, this, [[0, 19]]);
|
|
817
|
+
}));
|
|
818
|
+
function completeCheckoutAsync() {
|
|
819
|
+
return _completeCheckoutAsync.apply(this, arguments);
|
|
820
|
+
}
|
|
821
|
+
return completeCheckoutAsync;
|
|
822
|
+
}()
|
|
823
|
+
/**
|
|
824
|
+
* 取消结账
|
|
825
|
+
*/
|
|
826
|
+
)
|
|
827
|
+
}, {
|
|
828
|
+
key: "cancelCheckoutAsync",
|
|
829
|
+
value: (function () {
|
|
830
|
+
var _cancelCheckoutAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11() {
|
|
831
|
+
return _regeneratorRuntime().wrap(function _callee11$(_context11) {
|
|
832
|
+
while (1) switch (_context11.prev = _context11.next) {
|
|
833
|
+
case 0:
|
|
834
|
+
_context11.prev = 0;
|
|
835
|
+
if (!this.store.currentOrder) {
|
|
836
|
+
_context11.next = 5;
|
|
837
|
+
break;
|
|
838
|
+
}
|
|
839
|
+
_context11.next = 4;
|
|
840
|
+
return this.payment.deletePaymentOrderAsync(this.store.currentOrder.uuid);
|
|
841
|
+
case 4:
|
|
842
|
+
this.store.currentOrder = undefined;
|
|
843
|
+
case 5:
|
|
844
|
+
// 清理状态数据
|
|
845
|
+
this.store.localOrderData = undefined;
|
|
846
|
+
this.store.cartSummary = undefined;
|
|
847
|
+
this.payment.wallet.clearAllCache();
|
|
848
|
+
this.store.cartItems = [];
|
|
849
|
+
this.store.stateAmount = '0.00';
|
|
850
|
+
this.store.isOrderSynced = false;
|
|
851
|
+
this.store.currentCustomer = undefined;
|
|
852
|
+
_context11.next = 14;
|
|
853
|
+
return this.setStatus(CheckoutStatus.Cancelled);
|
|
854
|
+
case 14:
|
|
855
|
+
_context11.next = 16;
|
|
856
|
+
return this.core.effects.emit(CheckoutHooks.OnCheckoutCancelled, {
|
|
857
|
+
timestamp: Date.now()
|
|
858
|
+
});
|
|
859
|
+
case 16:
|
|
860
|
+
console.log('[Checkout] 结账流程已取消');
|
|
861
|
+
_context11.next = 24;
|
|
862
|
+
break;
|
|
863
|
+
case 19:
|
|
864
|
+
_context11.prev = 19;
|
|
865
|
+
_context11.t0 = _context11["catch"](0);
|
|
866
|
+
console.error('[Checkout] 取消结账失败:', _context11.t0);
|
|
867
|
+
_context11.next = 24;
|
|
868
|
+
return this.handleError(_context11.t0, CheckoutErrorType.UnknownError);
|
|
869
|
+
case 24:
|
|
870
|
+
case "end":
|
|
871
|
+
return _context11.stop();
|
|
872
|
+
}
|
|
873
|
+
}, _callee11, this, [[0, 19]]);
|
|
874
|
+
}));
|
|
875
|
+
function cancelCheckoutAsync() {
|
|
876
|
+
return _cancelCheckoutAsync.apply(this, arguments);
|
|
877
|
+
}
|
|
878
|
+
return cancelCheckoutAsync;
|
|
879
|
+
}()
|
|
880
|
+
/**
|
|
881
|
+
* 获取结账状态
|
|
882
|
+
*/
|
|
883
|
+
)
|
|
884
|
+
}, {
|
|
885
|
+
key: "getCheckoutStatus",
|
|
886
|
+
value: function getCheckoutStatus() {
|
|
887
|
+
return {
|
|
888
|
+
status: this.store.status,
|
|
889
|
+
step: this.store.step,
|
|
890
|
+
progress: calculateProgress(this.store.status, this.store.step),
|
|
891
|
+
message: this.getStatusMessage(),
|
|
892
|
+
error: this.store.lastError
|
|
893
|
+
};
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
/**
|
|
897
|
+
* 获取结账摘要
|
|
898
|
+
*/
|
|
899
|
+
}, {
|
|
900
|
+
key: "getCheckoutSummaryAsync",
|
|
901
|
+
value: (function () {
|
|
902
|
+
var _getCheckoutSummaryAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee12() {
|
|
903
|
+
var _this$store$currentOr2, _this$store$currentOr3;
|
|
904
|
+
var totalAmount, paidAmount, remainingAmount;
|
|
905
|
+
return _regeneratorRuntime().wrap(function _callee12$(_context12) {
|
|
906
|
+
while (1) switch (_context12.prev = _context12.next) {
|
|
907
|
+
case 0:
|
|
908
|
+
totalAmount = ((_this$store$currentOr2 = this.store.currentOrder) === null || _this$store$currentOr2 === void 0 ? void 0 : _this$store$currentOr2.total_amount) || '0.00';
|
|
909
|
+
paidAmount = this.calculatePaidAmount();
|
|
910
|
+
remainingAmount = this.calculateRemainingAmount();
|
|
911
|
+
return _context12.abrupt("return", {
|
|
912
|
+
order: this.store.currentOrder,
|
|
913
|
+
totalAmount: totalAmount,
|
|
914
|
+
paidAmount: paidAmount,
|
|
915
|
+
remainingAmount: remainingAmount,
|
|
916
|
+
paymentStatus: ((_this$store$currentOr3 = this.store.currentOrder) === null || _this$store$currentOr3 === void 0 ? void 0 : _this$store$currentOr3.payment_status) || PaymentStatus.Processing,
|
|
917
|
+
availablePaymentMethods: this.store.paymentMethods
|
|
918
|
+
});
|
|
919
|
+
case 4:
|
|
920
|
+
case "end":
|
|
921
|
+
return _context12.stop();
|
|
922
|
+
}
|
|
923
|
+
}, _callee12, this);
|
|
924
|
+
}));
|
|
925
|
+
function getCheckoutSummaryAsync() {
|
|
926
|
+
return _getCheckoutSummaryAsync.apply(this, arguments);
|
|
927
|
+
}
|
|
928
|
+
return getCheckoutSummaryAsync;
|
|
929
|
+
}()
|
|
930
|
+
/**
|
|
931
|
+
* 获取可用支付方式
|
|
932
|
+
*/
|
|
933
|
+
)
|
|
934
|
+
}, {
|
|
935
|
+
key: "getAvailablePaymentMethodsAsync",
|
|
936
|
+
value: (function () {
|
|
937
|
+
var _getAvailablePaymentMethodsAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee13() {
|
|
938
|
+
return _regeneratorRuntime().wrap(function _callee13$(_context13) {
|
|
939
|
+
while (1) switch (_context13.prev = _context13.next) {
|
|
940
|
+
case 0:
|
|
941
|
+
if (!(this.store.paymentMethods.length === 0)) {
|
|
942
|
+
_context13.next = 4;
|
|
943
|
+
break;
|
|
944
|
+
}
|
|
945
|
+
console.log('[Checkout] 支付方式缓存为空,重新加载...');
|
|
946
|
+
_context13.next = 4;
|
|
947
|
+
return this.preloadPaymentMethods();
|
|
948
|
+
case 4:
|
|
949
|
+
return _context13.abrupt("return", this.store.paymentMethods);
|
|
950
|
+
case 5:
|
|
951
|
+
case "end":
|
|
952
|
+
return _context13.stop();
|
|
953
|
+
}
|
|
954
|
+
}, _callee13, this);
|
|
955
|
+
}));
|
|
956
|
+
function getAvailablePaymentMethodsAsync() {
|
|
957
|
+
return _getAvailablePaymentMethodsAsync.apply(this, arguments);
|
|
958
|
+
}
|
|
959
|
+
return getAvailablePaymentMethodsAsync;
|
|
960
|
+
}()
|
|
961
|
+
/**
|
|
962
|
+
* 刷新支付方式缓存
|
|
963
|
+
*
|
|
964
|
+
* 强制重新从服务器获取支付方式列表,更新本地缓存
|
|
965
|
+
*/
|
|
966
|
+
)
|
|
967
|
+
}, {
|
|
968
|
+
key: "refreshPaymentMethodsAsync",
|
|
969
|
+
value: (function () {
|
|
970
|
+
var _refreshPaymentMethodsAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee14() {
|
|
971
|
+
return _regeneratorRuntime().wrap(function _callee14$(_context14) {
|
|
972
|
+
while (1) switch (_context14.prev = _context14.next) {
|
|
973
|
+
case 0:
|
|
974
|
+
console.log('[Checkout] 强制刷新支付方式缓存...');
|
|
975
|
+
_context14.next = 3;
|
|
976
|
+
return this.preloadPaymentMethods();
|
|
977
|
+
case 3:
|
|
978
|
+
return _context14.abrupt("return", this.store.paymentMethods);
|
|
979
|
+
case 4:
|
|
980
|
+
case "end":
|
|
981
|
+
return _context14.stop();
|
|
982
|
+
}
|
|
983
|
+
}, _callee14, this);
|
|
984
|
+
}));
|
|
985
|
+
function refreshPaymentMethodsAsync() {
|
|
986
|
+
return _refreshPaymentMethodsAsync.apply(this, arguments);
|
|
987
|
+
}
|
|
988
|
+
return refreshPaymentMethodsAsync;
|
|
989
|
+
}()
|
|
990
|
+
/**
|
|
991
|
+
* 获取当前订单基础信息
|
|
992
|
+
*
|
|
993
|
+
* 返回当前订单的基础信息,包括订单状态、金额、支付状态等
|
|
994
|
+
*/
|
|
995
|
+
)
|
|
996
|
+
}, {
|
|
997
|
+
key: "getCurrentOrderInfo",
|
|
998
|
+
value: function getCurrentOrderInfo() {
|
|
999
|
+
try {
|
|
1000
|
+
var _this$store = this.store,
|
|
1001
|
+
_currentOrder = _this$store.currentOrder,
|
|
1002
|
+
status = _this$store.status,
|
|
1003
|
+
step = _this$store.step,
|
|
1004
|
+
cartItems = _this$store.cartItems,
|
|
1005
|
+
localOrderData = _this$store.localOrderData;
|
|
1006
|
+
if (!_currentOrder) {
|
|
1007
|
+
console.log('[Checkout] 当前没有活跃订单');
|
|
1008
|
+
return null;
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
// 从本地订单数据或订单信息中提取基础信息
|
|
1012
|
+
var orderInfo = _currentOrder.order_info || {};
|
|
1013
|
+
var createdAt = orderInfo.created_at || new Date().toISOString();
|
|
1014
|
+
var orderType = (localOrderData === null || localOrderData === void 0 ? void 0 : localOrderData.type) || orderInfo.type || 'virtual';
|
|
1015
|
+
var platform = (localOrderData === null || localOrderData === void 0 ? void 0 : localOrderData.platform) || orderInfo.platform || 'pc';
|
|
1016
|
+
var result = {
|
|
1017
|
+
uuid: _currentOrder.uuid,
|
|
1018
|
+
orderId: _currentOrder.order_id,
|
|
1019
|
+
status: status,
|
|
1020
|
+
step: step,
|
|
1021
|
+
totalAmount: _currentOrder.total_amount,
|
|
1022
|
+
remainingAmount: _currentOrder.expect_amount,
|
|
1023
|
+
paymentStatus: _currentOrder.payment_status,
|
|
1024
|
+
isDeposit: Boolean(_currentOrder.is_deposit),
|
|
1025
|
+
depositAmount: _currentOrder.deposit_amount,
|
|
1026
|
+
orderType: orderType,
|
|
1027
|
+
platform: platform,
|
|
1028
|
+
createdAt: createdAt,
|
|
1029
|
+
itemCount: cartItems.length,
|
|
1030
|
+
hasLocalOrderData: Boolean(localOrderData)
|
|
1031
|
+
};
|
|
1032
|
+
console.log('[Checkout] 获取当前订单基础信息:', {
|
|
1033
|
+
uuid: result.uuid,
|
|
1034
|
+
orderId: result.orderId,
|
|
1035
|
+
status: result.status,
|
|
1036
|
+
totalAmount: result.totalAmount,
|
|
1037
|
+
remainingAmount: result.remainingAmount
|
|
1038
|
+
});
|
|
1039
|
+
return result;
|
|
1040
|
+
} catch (error) {
|
|
1041
|
+
console.error('[Checkout] 获取当前订单基础信息失败:', error);
|
|
1042
|
+
return null;
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
/**
|
|
1047
|
+
* 获取当前订单的支付项
|
|
1048
|
+
*
|
|
1049
|
+
* 返回当前订单的所有支付项,包括活跃和已撤销的支付项
|
|
1050
|
+
*/
|
|
1051
|
+
}, {
|
|
1052
|
+
key: "getCurrentOrderPaymentItemsAsync",
|
|
1053
|
+
value: (function () {
|
|
1054
|
+
var _getCurrentOrderPaymentItemsAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee15() {
|
|
1055
|
+
var _currentOrder2, paymentItems;
|
|
1056
|
+
return _regeneratorRuntime().wrap(function _callee15$(_context15) {
|
|
1057
|
+
while (1) switch (_context15.prev = _context15.next) {
|
|
1058
|
+
case 0:
|
|
1059
|
+
_context15.prev = 0;
|
|
1060
|
+
_currentOrder2 = this.store.currentOrder;
|
|
1061
|
+
if (_currentOrder2) {
|
|
1062
|
+
_context15.next = 5;
|
|
1063
|
+
break;
|
|
1064
|
+
}
|
|
1065
|
+
console.log('[Checkout] 当前没有活跃订单,无法获取支付项');
|
|
1066
|
+
return _context15.abrupt("return", []);
|
|
1067
|
+
case 5:
|
|
1068
|
+
console.log('[Checkout] 获取当前订单支付项:', {
|
|
1069
|
+
orderUuid: _currentOrder2.uuid,
|
|
1070
|
+
orderId: _currentOrder2.order_id
|
|
1071
|
+
});
|
|
1072
|
+
|
|
1073
|
+
// 调用Payment模块获取支付项
|
|
1074
|
+
_context15.next = 8;
|
|
1075
|
+
return this.payment.getPaymentItemsAsync(_currentOrder2.uuid);
|
|
1076
|
+
case 8:
|
|
1077
|
+
paymentItems = _context15.sent;
|
|
1078
|
+
console.log('[Checkout] 成功获取支付项:', {
|
|
1079
|
+
orderUuid: _currentOrder2.uuid,
|
|
1080
|
+
paymentItemCount: paymentItems.length,
|
|
1081
|
+
activeItems: paymentItems.filter(function (item) {
|
|
1082
|
+
return item.status !== 'voided';
|
|
1083
|
+
}).length,
|
|
1084
|
+
voidedItems: paymentItems.filter(function (item) {
|
|
1085
|
+
return item.status === 'voided';
|
|
1086
|
+
}).length,
|
|
1087
|
+
totalPaidAmount: paymentItems.filter(function (item) {
|
|
1088
|
+
return item.status !== 'voided';
|
|
1089
|
+
}).reduce(function (sum, item) {
|
|
1090
|
+
return sum + parseFloat(item.amount || '0');
|
|
1091
|
+
}, 0).toFixed(2),
|
|
1092
|
+
paymentMethods: paymentItems.map(function (item) {
|
|
1093
|
+
return {
|
|
1094
|
+
uuid: item.uuid,
|
|
1095
|
+
code: item.code,
|
|
1096
|
+
amount: item.amount,
|
|
1097
|
+
status: item.status,
|
|
1098
|
+
voucher_id: item.voucher_id
|
|
1099
|
+
};
|
|
1100
|
+
})
|
|
1101
|
+
});
|
|
1102
|
+
return _context15.abrupt("return", paymentItems);
|
|
1103
|
+
case 13:
|
|
1104
|
+
_context15.prev = 13;
|
|
1105
|
+
_context15.t0 = _context15["catch"](0);
|
|
1106
|
+
console.error('[Checkout] 获取当前订单支付项失败:', _context15.t0);
|
|
1107
|
+
return _context15.abrupt("return", []);
|
|
1108
|
+
case 17:
|
|
1109
|
+
case "end":
|
|
1110
|
+
return _context15.stop();
|
|
1111
|
+
}
|
|
1112
|
+
}, _callee15, this, [[0, 13]]);
|
|
1113
|
+
}));
|
|
1114
|
+
function getCurrentOrderPaymentItemsAsync() {
|
|
1115
|
+
return _getCurrentOrderPaymentItemsAsync.apply(this, arguments);
|
|
1116
|
+
}
|
|
1117
|
+
return getCurrentOrderPaymentItemsAsync;
|
|
1118
|
+
}()
|
|
1119
|
+
/**
|
|
1120
|
+
* 验证结账前置条件
|
|
1121
|
+
*/
|
|
1122
|
+
)
|
|
1123
|
+
}, {
|
|
1124
|
+
key: "validateCheckoutAsync",
|
|
1125
|
+
value: (function () {
|
|
1126
|
+
var _validateCheckoutAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee16() {
|
|
1127
|
+
var errors;
|
|
1128
|
+
return _regeneratorRuntime().wrap(function _callee16$(_context16) {
|
|
1129
|
+
while (1) switch (_context16.prev = _context16.next) {
|
|
1130
|
+
case 0:
|
|
1131
|
+
errors = []; // 验证购物车
|
|
1132
|
+
if (!this.store.cartItems || this.store.cartItems.length === 0) {
|
|
1133
|
+
errors.push('购物车为空');
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
// 验证支付方式
|
|
1137
|
+
if (this.store.paymentMethods.length === 0) {
|
|
1138
|
+
errors.push('无可用支付方式');
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
// 验证订单状态
|
|
1142
|
+
if (this.store.status === CheckoutStatus.Error) {
|
|
1143
|
+
errors.push('结账流程存在错误');
|
|
1144
|
+
}
|
|
1145
|
+
return _context16.abrupt("return", {
|
|
1146
|
+
valid: errors.length === 0,
|
|
1147
|
+
errors: errors
|
|
1148
|
+
});
|
|
1149
|
+
case 5:
|
|
1150
|
+
case "end":
|
|
1151
|
+
return _context16.stop();
|
|
1152
|
+
}
|
|
1153
|
+
}, _callee16, this);
|
|
1154
|
+
}));
|
|
1155
|
+
function validateCheckoutAsync() {
|
|
1156
|
+
return _validateCheckoutAsync.apply(this, arguments);
|
|
1157
|
+
}
|
|
1158
|
+
return validateCheckoutAsync;
|
|
1159
|
+
}()
|
|
1160
|
+
/**
|
|
1161
|
+
* 重试失败的操作
|
|
1162
|
+
*/
|
|
1163
|
+
)
|
|
1164
|
+
}, {
|
|
1165
|
+
key: "retryFailedOperationAsync",
|
|
1166
|
+
value: (function () {
|
|
1167
|
+
var _retryFailedOperationAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee17() {
|
|
1168
|
+
return _regeneratorRuntime().wrap(function _callee17$(_context17) {
|
|
1169
|
+
while (1) switch (_context17.prev = _context17.next) {
|
|
1170
|
+
case 0:
|
|
1171
|
+
_context17.prev = 0;
|
|
1172
|
+
if (!(this.store.status === CheckoutStatus.Error && this.store.lastError)) {
|
|
1173
|
+
_context17.next = 10;
|
|
1174
|
+
break;
|
|
1175
|
+
}
|
|
1176
|
+
_context17.t0 = this.store.lastError.type;
|
|
1177
|
+
_context17.next = _context17.t0 === CheckoutErrorType.OrderCreationFailed ? 5 : 9;
|
|
1178
|
+
break;
|
|
1179
|
+
case 5:
|
|
1180
|
+
if (!(this.store.cartItems.length > 0)) {
|
|
1181
|
+
_context17.next = 8;
|
|
1182
|
+
break;
|
|
1183
|
+
}
|
|
1184
|
+
_context17.next = 8;
|
|
1185
|
+
return this.createOrderAsync({
|
|
1186
|
+
cartItems: this.store.cartItems
|
|
1187
|
+
});
|
|
1188
|
+
case 8:
|
|
1189
|
+
return _context17.abrupt("break", 10);
|
|
1190
|
+
case 9:
|
|
1191
|
+
console.warn('[Checkout] 无法重试此类型的错误:', this.store.lastError.type);
|
|
1192
|
+
case 10:
|
|
1193
|
+
_context17.next = 16;
|
|
1194
|
+
break;
|
|
1195
|
+
case 12:
|
|
1196
|
+
_context17.prev = 12;
|
|
1197
|
+
_context17.t1 = _context17["catch"](0);
|
|
1198
|
+
_context17.next = 16;
|
|
1199
|
+
return this.handleError(_context17.t1, CheckoutErrorType.UnknownError);
|
|
1200
|
+
case 16:
|
|
1201
|
+
case "end":
|
|
1202
|
+
return _context17.stop();
|
|
1203
|
+
}
|
|
1204
|
+
}, _callee17, this, [[0, 12]]);
|
|
1205
|
+
}));
|
|
1206
|
+
function retryFailedOperationAsync() {
|
|
1207
|
+
return _retryFailedOperationAsync.apply(this, arguments);
|
|
1208
|
+
}
|
|
1209
|
+
return retryFailedOperationAsync;
|
|
1210
|
+
}()
|
|
1211
|
+
/**
|
|
1212
|
+
* 设置当前步骤
|
|
1213
|
+
*/
|
|
1214
|
+
)
|
|
1215
|
+
}, {
|
|
1216
|
+
key: "setCurrentStep",
|
|
1217
|
+
value: function setCurrentStep(step) {
|
|
1218
|
+
var oldStep = this.store.step;
|
|
1219
|
+
this.store.step = step;
|
|
1220
|
+
this.core.effects.emit(CheckoutHooks.OnStepChanged, {
|
|
1221
|
+
oldStep: oldStep,
|
|
1222
|
+
newStep: step,
|
|
1223
|
+
timestamp: Date.now()
|
|
1224
|
+
});
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
/**
|
|
1228
|
+
* 获取订单模块
|
|
1229
|
+
*/
|
|
1230
|
+
}, {
|
|
1231
|
+
key: "getOrderModule",
|
|
1232
|
+
value: function getOrderModule() {
|
|
1233
|
+
return this.order;
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
/**
|
|
1237
|
+
* 获取支付模块
|
|
1238
|
+
*/
|
|
1239
|
+
}, {
|
|
1240
|
+
key: "getPaymentModule",
|
|
1241
|
+
value: function getPaymentModule() {
|
|
1242
|
+
return this.payment;
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
/**
|
|
1246
|
+
* 替换本地订单ID为真实订单ID
|
|
1247
|
+
*
|
|
1248
|
+
* 当后端订单创建完成后,调用此方法将本地虚拟订单ID替换为真实订单ID
|
|
1249
|
+
*
|
|
1250
|
+
* @param newOrderId 后端返回的真实订单ID
|
|
1251
|
+
* @returns 更新后的订单对象,如果当前没有订单则返回null
|
|
1252
|
+
*/
|
|
1253
|
+
}, {
|
|
1254
|
+
key: "replaceLocalOrderIdAsync",
|
|
1255
|
+
value: (function () {
|
|
1256
|
+
var _replaceLocalOrderIdAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee18(newOrderId) {
|
|
1257
|
+
var updatedOrder;
|
|
1258
|
+
return _regeneratorRuntime().wrap(function _callee18$(_context18) {
|
|
1259
|
+
while (1) switch (_context18.prev = _context18.next) {
|
|
1260
|
+
case 0:
|
|
1261
|
+
_context18.prev = 0;
|
|
1262
|
+
if (this.store.currentOrder) {
|
|
1263
|
+
_context18.next = 4;
|
|
1264
|
+
break;
|
|
1265
|
+
}
|
|
1266
|
+
console.warn('[Checkout] 没有当前订单,无法替换订单ID');
|
|
1267
|
+
return _context18.abrupt("return", null);
|
|
1268
|
+
case 4:
|
|
1269
|
+
_context18.next = 6;
|
|
1270
|
+
return this.payment.replaceOrderIdByUuidAsync(this.store.currentOrder.uuid, newOrderId);
|
|
1271
|
+
case 6:
|
|
1272
|
+
updatedOrder = _context18.sent;
|
|
1273
|
+
if (!updatedOrder) {
|
|
1274
|
+
_context18.next = 15;
|
|
1275
|
+
break;
|
|
1276
|
+
}
|
|
1277
|
+
// 更新当前订单引用
|
|
1278
|
+
this.store.currentOrder = updatedOrder;
|
|
1279
|
+
|
|
1280
|
+
// 触发订单更新事件
|
|
1281
|
+
_context18.next = 11;
|
|
1282
|
+
return this.core.effects.emit(CheckoutHooks.OnOrderCreated, {
|
|
1283
|
+
order: updatedOrder,
|
|
1284
|
+
timestamp: Date.now()
|
|
1285
|
+
});
|
|
1286
|
+
case 11:
|
|
1287
|
+
console.log('[Checkout] 本地订单ID替换成功:', {
|
|
1288
|
+
uuid: updatedOrder.uuid,
|
|
1289
|
+
newOrderId: updatedOrder.id
|
|
1290
|
+
});
|
|
1291
|
+
|
|
1292
|
+
// 标记订单已同步(替换ID意味着订单已在后端创建)
|
|
1293
|
+
this.store.isOrderSynced = true;
|
|
1294
|
+
|
|
1295
|
+
// 订单ID替换后更新 stateAmount
|
|
1296
|
+
_context18.next = 15;
|
|
1297
|
+
return this.updateStateAmountToRemaining();
|
|
1298
|
+
case 15:
|
|
1299
|
+
return _context18.abrupt("return", updatedOrder);
|
|
1300
|
+
case 18:
|
|
1301
|
+
_context18.prev = 18;
|
|
1302
|
+
_context18.t0 = _context18["catch"](0);
|
|
1303
|
+
console.error('[Checkout] 替换订单ID失败:', _context18.t0);
|
|
1304
|
+
_context18.next = 23;
|
|
1305
|
+
return this.handleError(_context18.t0, CheckoutErrorType.UnknownError);
|
|
1306
|
+
case 23:
|
|
1307
|
+
return _context18.abrupt("return", null);
|
|
1308
|
+
case 24:
|
|
1309
|
+
case "end":
|
|
1310
|
+
return _context18.stop();
|
|
1311
|
+
}
|
|
1312
|
+
}, _callee18, this, [[0, 18]]);
|
|
1313
|
+
}));
|
|
1314
|
+
function replaceLocalOrderIdAsync(_x11) {
|
|
1315
|
+
return _replaceLocalOrderIdAsync.apply(this, arguments);
|
|
1316
|
+
}
|
|
1317
|
+
return replaceLocalOrderIdAsync;
|
|
1318
|
+
}()
|
|
1319
|
+
/**
|
|
1320
|
+
* 设置自定义支付金额
|
|
1321
|
+
*
|
|
1322
|
+
* 允许UI自定义本次支付的金额,通常用于部分支付或调整支付金额场景
|
|
1323
|
+
*
|
|
1324
|
+
* @param amount 自定义支付金额,必须是有效的数字字符串
|
|
1325
|
+
*/
|
|
1326
|
+
)
|
|
1327
|
+
}, {
|
|
1328
|
+
key: "setStateAmountAsync",
|
|
1329
|
+
value: (function () {
|
|
1330
|
+
var _setStateAmountAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee19(amount) {
|
|
1331
|
+
var numAmount, oldAmount, formattedAmount, errorMessage;
|
|
1332
|
+
return _regeneratorRuntime().wrap(function _callee19$(_context19) {
|
|
1333
|
+
while (1) switch (_context19.prev = _context19.next) {
|
|
1334
|
+
case 0:
|
|
1335
|
+
_context19.prev = 0;
|
|
1336
|
+
// 验证金额格式
|
|
1337
|
+
numAmount = parseFloat(amount);
|
|
1338
|
+
if (!(isNaN(numAmount) || numAmount < 0)) {
|
|
1339
|
+
_context19.next = 4;
|
|
1340
|
+
break;
|
|
1341
|
+
}
|
|
1342
|
+
throw new Error("\u65E0\u6548\u7684\u652F\u4ED8\u91D1\u989D: ".concat(amount));
|
|
1343
|
+
case 4:
|
|
1344
|
+
oldAmount = this.store.stateAmount;
|
|
1345
|
+
formattedAmount = numAmount.toFixed(2); // 如果金额没有变化,直接返回
|
|
1346
|
+
if (!(oldAmount === formattedAmount)) {
|
|
1347
|
+
_context19.next = 8;
|
|
1348
|
+
break;
|
|
1349
|
+
}
|
|
1350
|
+
return _context19.abrupt("return");
|
|
1351
|
+
case 8:
|
|
1352
|
+
// 更新状态
|
|
1353
|
+
this.store.stateAmount = formattedAmount;
|
|
1354
|
+
|
|
1355
|
+
// 触发金额变更事件
|
|
1356
|
+
_context19.next = 11;
|
|
1357
|
+
return this.core.effects.emit(CheckoutHooks.OnStateAmountChanged, {
|
|
1358
|
+
oldAmount: oldAmount,
|
|
1359
|
+
newAmount: formattedAmount,
|
|
1360
|
+
timestamp: Date.now()
|
|
1361
|
+
});
|
|
1362
|
+
case 11:
|
|
1363
|
+
console.log('[Checkout] 自定义支付金额已更新:', {
|
|
1364
|
+
oldAmount: oldAmount,
|
|
1365
|
+
newAmount: formattedAmount
|
|
1366
|
+
});
|
|
1367
|
+
_context19.next = 21;
|
|
1368
|
+
break;
|
|
1369
|
+
case 14:
|
|
1370
|
+
_context19.prev = 14;
|
|
1371
|
+
_context19.t0 = _context19["catch"](0);
|
|
1372
|
+
errorMessage = _context19.t0 instanceof Error ? _context19.t0.message : '设置支付金额失败';
|
|
1373
|
+
console.error('[Checkout] 设置自定义支付金额失败:', errorMessage);
|
|
1374
|
+
_context19.next = 20;
|
|
1375
|
+
return this.handleError(new Error(errorMessage), CheckoutErrorType.ValidationFailed);
|
|
1376
|
+
case 20:
|
|
1377
|
+
throw _context19.t0;
|
|
1378
|
+
case 21:
|
|
1379
|
+
case "end":
|
|
1380
|
+
return _context19.stop();
|
|
1381
|
+
}
|
|
1382
|
+
}, _callee19, this, [[0, 14]]);
|
|
1383
|
+
}));
|
|
1384
|
+
function setStateAmountAsync(_x12) {
|
|
1385
|
+
return _setStateAmountAsync.apply(this, arguments);
|
|
1386
|
+
}
|
|
1387
|
+
return setStateAmountAsync;
|
|
1388
|
+
}()
|
|
1389
|
+
/**
|
|
1390
|
+
* 获取当前自定义支付金额
|
|
1391
|
+
*
|
|
1392
|
+
* @returns 当前设置的自定义支付金额
|
|
1393
|
+
*/
|
|
1394
|
+
)
|
|
1395
|
+
}, {
|
|
1396
|
+
key: "getStateAmount",
|
|
1397
|
+
value: function getStateAmount() {
|
|
1398
|
+
return this.store.stateAmount;
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
/**
|
|
1402
|
+
* 刷新 stateAmount 为当前剩余未支付金额
|
|
1403
|
+
*
|
|
1404
|
+
* UI 可以调用此方法来主动刷新支付金额状态
|
|
1405
|
+
*/
|
|
1406
|
+
}, {
|
|
1407
|
+
key: "refreshStateAmountAsync",
|
|
1408
|
+
value: (function () {
|
|
1409
|
+
var _refreshStateAmountAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee20() {
|
|
1410
|
+
return _regeneratorRuntime().wrap(function _callee20$(_context20) {
|
|
1411
|
+
while (1) switch (_context20.prev = _context20.next) {
|
|
1412
|
+
case 0:
|
|
1413
|
+
_context20.next = 2;
|
|
1414
|
+
return this.updateStateAmountToRemaining();
|
|
1415
|
+
case 2:
|
|
1416
|
+
case "end":
|
|
1417
|
+
return _context20.stop();
|
|
1418
|
+
}
|
|
1419
|
+
}, _callee20, this);
|
|
1420
|
+
}));
|
|
1421
|
+
function refreshStateAmountAsync() {
|
|
1422
|
+
return _refreshStateAmountAsync.apply(this, arguments);
|
|
1423
|
+
}
|
|
1424
|
+
return refreshStateAmountAsync;
|
|
1425
|
+
}()
|
|
1426
|
+
/**
|
|
1427
|
+
* 获取购物车小计数据
|
|
1428
|
+
*
|
|
1429
|
+
* 返回当前结账流程中的购物车小计项数据,包含各种费用明细
|
|
1430
|
+
*
|
|
1431
|
+
* @returns 购物车小计数据数组,如果没有则返回 null
|
|
1432
|
+
*/
|
|
1433
|
+
)
|
|
1434
|
+
}, {
|
|
1435
|
+
key: "getCartSummary",
|
|
1436
|
+
value: function getCartSummary() {
|
|
1437
|
+
if (!this.store.cartSummary || this.store.cartSummary.length === 0) {
|
|
1438
|
+
console.warn('[Checkout] 没有可用的购物车小计数据');
|
|
1439
|
+
return null;
|
|
1440
|
+
}
|
|
1441
|
+
console.log('[Checkout] 获取购物车小计数据:', {
|
|
1442
|
+
itemCount: this.store.cartSummary.length,
|
|
1443
|
+
items: this.store.cartSummary.map(function (item) {
|
|
1444
|
+
return {
|
|
1445
|
+
key: item.key,
|
|
1446
|
+
value: item.value,
|
|
1447
|
+
label: item.label
|
|
1448
|
+
};
|
|
1449
|
+
})
|
|
1450
|
+
});
|
|
1451
|
+
return _toConsumableArray(this.store.cartSummary); // 返回副本,避免外部修改
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
/**
|
|
1455
|
+
* 获取提取的金额详细信息
|
|
1456
|
+
*
|
|
1457
|
+
* 从当前的购物车小计数据中提取结构化的金额信息
|
|
1458
|
+
*
|
|
1459
|
+
* @returns 提取的金额信息对象,如果没有小计数据则返回 null
|
|
1460
|
+
*/
|
|
1461
|
+
}, {
|
|
1462
|
+
key: "getExtractedAmountInfo",
|
|
1463
|
+
value: function getExtractedAmountInfo() {
|
|
1464
|
+
if (!this.store.cartSummary || this.store.cartSummary.length === 0) {
|
|
1465
|
+
console.warn('[Checkout] 没有可用的购物车小计数据,无法提取金额信息');
|
|
1466
|
+
return null;
|
|
1467
|
+
}
|
|
1468
|
+
var extractedInfo = this.extractAmountFromCartSummary(this.store.cartSummary);
|
|
1469
|
+
console.log('[Checkout] 获取提取的金额信息:', extractedInfo);
|
|
1470
|
+
return extractedInfo;
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1473
|
+
/**
|
|
1474
|
+
* 获取支付方式列表
|
|
1475
|
+
*
|
|
1476
|
+
* 直接调用 Payment 模块的 getPayMethodListAsync 方法
|
|
1477
|
+
*
|
|
1478
|
+
* @returns 支付方式列表
|
|
1479
|
+
*/
|
|
1480
|
+
}, {
|
|
1481
|
+
key: "getPaymentMethodsAsync",
|
|
1482
|
+
value: (function () {
|
|
1483
|
+
var _getPaymentMethodsAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee21() {
|
|
1484
|
+
return _regeneratorRuntime().wrap(function _callee21$(_context21) {
|
|
1485
|
+
while (1) switch (_context21.prev = _context21.next) {
|
|
1486
|
+
case 0:
|
|
1487
|
+
_context21.next = 2;
|
|
1488
|
+
return this.payment.getPayMethodListAsync();
|
|
1489
|
+
case 2:
|
|
1490
|
+
return _context21.abrupt("return", _context21.sent);
|
|
1491
|
+
case 3:
|
|
1492
|
+
case "end":
|
|
1493
|
+
return _context21.stop();
|
|
1494
|
+
}
|
|
1495
|
+
}, _callee21, this);
|
|
1496
|
+
}));
|
|
1497
|
+
function getPaymentMethodsAsync() {
|
|
1498
|
+
return _getPaymentMethodsAsync.apply(this, arguments);
|
|
1499
|
+
}
|
|
1500
|
+
return getPaymentMethodsAsync;
|
|
1501
|
+
}()
|
|
1502
|
+
/**
|
|
1503
|
+
* 为当前订单添加支付项
|
|
1504
|
+
*
|
|
1505
|
+
* 向当前活跃订单添加一个支付项,支付项包含支付方式信息和金额
|
|
1506
|
+
*
|
|
1507
|
+
* @param paymentItem 支付项数据
|
|
1508
|
+
* @throws 当前没有活跃订单时抛出错误
|
|
1509
|
+
*/
|
|
1510
|
+
)
|
|
1511
|
+
}, {
|
|
1512
|
+
key: "addPaymentItemAsync",
|
|
1513
|
+
value: (function () {
|
|
1514
|
+
var _addPaymentItemAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee22(paymentItem) {
|
|
1515
|
+
var currentOrderId, isCurrentOrderReal, updatedOrder, needsOrderSync;
|
|
1516
|
+
return _regeneratorRuntime().wrap(function _callee22$(_context22) {
|
|
1517
|
+
while (1) switch (_context22.prev = _context22.next) {
|
|
1518
|
+
case 0:
|
|
1519
|
+
_context22.prev = 0;
|
|
1520
|
+
if (this.store.currentOrder) {
|
|
1521
|
+
_context22.next = 3;
|
|
1522
|
+
break;
|
|
1523
|
+
}
|
|
1524
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, '未找到当前订单,无法添加支付项');
|
|
1525
|
+
case 3:
|
|
1526
|
+
console.log('[Checkout] 为当前订单添加支付项:', {
|
|
1527
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
1528
|
+
paymentItem: {
|
|
1529
|
+
code: paymentItem.code,
|
|
1530
|
+
name: paymentItem.name,
|
|
1531
|
+
type: paymentItem.type,
|
|
1532
|
+
amount: paymentItem.amount,
|
|
1533
|
+
service_charge: paymentItem.service_charge
|
|
1534
|
+
}
|
|
1535
|
+
});
|
|
1536
|
+
|
|
1537
|
+
// 添加支付项到订单
|
|
1538
|
+
_context22.next = 6;
|
|
1539
|
+
return this.payment.addPaymentItemAsync(this.store.currentOrder.uuid, paymentItem);
|
|
1540
|
+
case 6:
|
|
1541
|
+
console.log('[Checkout] 支付项添加成功');
|
|
1542
|
+
|
|
1543
|
+
// 重新从Payment模块获取最新的订单数据,确保支付项同步
|
|
1544
|
+
currentOrderId = this.store.currentOrder.order_id; // 保存当前的订单ID
|
|
1545
|
+
isCurrentOrderReal = currentOrderId && !this.isVirtualOrderId(currentOrderId);
|
|
1546
|
+
console.log('[Checkout] 准备同步订单数据:', {
|
|
1547
|
+
当前订单ID: currentOrderId,
|
|
1548
|
+
是否为真实ID: isCurrentOrderReal
|
|
1549
|
+
});
|
|
1550
|
+
_context22.next = 12;
|
|
1551
|
+
return this.payment.getPaymentOrderByUuidAsync(this.store.currentOrder.uuid);
|
|
1552
|
+
case 12:
|
|
1553
|
+
updatedOrder = _context22.sent;
|
|
1554
|
+
if (updatedOrder) {
|
|
1555
|
+
// 如果当前订单ID是真实ID,但获取到的订单ID是虚拟ID,需要保护真实ID
|
|
1556
|
+
if (isCurrentOrderReal && this.isVirtualOrderId(updatedOrder.order_id)) {
|
|
1557
|
+
console.warn('[Checkout] 检测到订单ID回退,保护真实订单ID:', {
|
|
1558
|
+
当前真实ID: currentOrderId,
|
|
1559
|
+
获取到的虚拟ID: updatedOrder.order_id
|
|
1560
|
+
});
|
|
1561
|
+
updatedOrder.order_id = currentOrderId; // 恢复真实的订单ID
|
|
1562
|
+
}
|
|
1563
|
+
this.store.currentOrder = updatedOrder;
|
|
1564
|
+
console.log('[Checkout] 订单数据已同步:', {
|
|
1565
|
+
支付项数量: updatedOrder.payment.length,
|
|
1566
|
+
最终订单ID: updatedOrder.order_id,
|
|
1567
|
+
是否为虚拟ID: this.isVirtualOrderId(updatedOrder.order_id)
|
|
1568
|
+
});
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
// 检查是否需要同步订单到后端
|
|
1572
|
+
needsOrderSync = this.shouldSyncOrderForPayment(paymentItem.code, paymentItem.type);
|
|
1573
|
+
console.log('[Checkout] 支付项同步检查:', {
|
|
1574
|
+
paymentCode: paymentItem.code,
|
|
1575
|
+
paymentType: paymentItem.type,
|
|
1576
|
+
paymentAmount: paymentItem.amount,
|
|
1577
|
+
expectedCashCode: PaymentMethodType.Cash,
|
|
1578
|
+
needsOrderSync: needsOrderSync,
|
|
1579
|
+
isOrderSynced: this.store.isOrderSynced
|
|
1580
|
+
});
|
|
1581
|
+
if (!needsOrderSync) {
|
|
1582
|
+
_context22.next = 21;
|
|
1583
|
+
break;
|
|
1584
|
+
}
|
|
1585
|
+
console.log('[Checkout] 检测到非现金/自定义支付,开始同步订单到后端...', {
|
|
1586
|
+
同步前订单ID: this.store.currentOrder.order_id,
|
|
1587
|
+
是否为虚拟ID: this.isVirtualOrderId(this.store.currentOrder.order_id),
|
|
1588
|
+
订单同步状态: this.store.isOrderSynced,
|
|
1589
|
+
订单UUID: this.store.currentOrder.uuid
|
|
1590
|
+
});
|
|
1591
|
+
_context22.next = 20;
|
|
1592
|
+
return this.syncOrderToBackend();
|
|
1593
|
+
case 20:
|
|
1594
|
+
console.log('[Checkout] addPaymentItemAsync 中的同步完成:', {
|
|
1595
|
+
同步后订单ID: this.store.currentOrder.order_id,
|
|
1596
|
+
是否为虚拟ID: this.isVirtualOrderId(this.store.currentOrder.order_id),
|
|
1597
|
+
订单同步状态: this.store.isOrderSynced
|
|
1598
|
+
});
|
|
1599
|
+
case 21:
|
|
1600
|
+
_context22.next = 23;
|
|
1601
|
+
return this.updateStateAmountToRemaining();
|
|
1602
|
+
case 23:
|
|
1603
|
+
_context22.next = 25;
|
|
1604
|
+
return this.core.effects.emit(CheckoutHooks.OnPaymentStarted, {
|
|
1605
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
1606
|
+
paymentMethodCode: paymentItem.code,
|
|
1607
|
+
amount: String(paymentItem.amount),
|
|
1608
|
+
timestamp: Date.now()
|
|
1609
|
+
});
|
|
1610
|
+
case 25:
|
|
1611
|
+
_context22.next = 33;
|
|
1612
|
+
break;
|
|
1613
|
+
case 27:
|
|
1614
|
+
_context22.prev = 27;
|
|
1615
|
+
_context22.t0 = _context22["catch"](0);
|
|
1616
|
+
console.error('[Checkout] 添加支付项失败:', _context22.t0);
|
|
1617
|
+
_context22.next = 32;
|
|
1618
|
+
return this.handleError(_context22.t0, CheckoutErrorType.PaymentFailed);
|
|
1619
|
+
case 32:
|
|
1620
|
+
throw _context22.t0;
|
|
1621
|
+
case 33:
|
|
1622
|
+
case "end":
|
|
1623
|
+
return _context22.stop();
|
|
1624
|
+
}
|
|
1625
|
+
}, _callee22, this, [[0, 27]]);
|
|
1626
|
+
}));
|
|
1627
|
+
function addPaymentItemAsync(_x13) {
|
|
1628
|
+
return _addPaymentItemAsync.apply(this, arguments);
|
|
1629
|
+
}
|
|
1630
|
+
return addPaymentItemAsync;
|
|
1631
|
+
}()
|
|
1632
|
+
/**
|
|
1633
|
+
* 删除当前订单的支付项
|
|
1634
|
+
*
|
|
1635
|
+
* 从当前活跃订单中删除指定的支付项,支付项将被标记为已撤销状态
|
|
1636
|
+
*
|
|
1637
|
+
* @param paymentUuid 要删除的支付项UUID
|
|
1638
|
+
* @throws 当前没有活跃订单时抛出错误
|
|
1639
|
+
* @throws 支付项不存在时抛出错误
|
|
1640
|
+
*/
|
|
1641
|
+
)
|
|
1642
|
+
}, {
|
|
1643
|
+
key: "deletePaymentItemAsync",
|
|
1644
|
+
value: (function () {
|
|
1645
|
+
var _deletePaymentItemAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee23(paymentUuid) {
|
|
1646
|
+
var paymentItem, currentOrderId, isCurrentOrderReal, updatedOrder;
|
|
1647
|
+
return _regeneratorRuntime().wrap(function _callee23$(_context23) {
|
|
1648
|
+
while (1) switch (_context23.prev = _context23.next) {
|
|
1649
|
+
case 0:
|
|
1650
|
+
_context23.prev = 0;
|
|
1651
|
+
if (this.store.currentOrder) {
|
|
1652
|
+
_context23.next = 3;
|
|
1653
|
+
break;
|
|
1654
|
+
}
|
|
1655
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, '当前没有活跃订单,无法删除支付项');
|
|
1656
|
+
case 3:
|
|
1657
|
+
console.log('[Checkout] 开始删除支付项:', {
|
|
1658
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
1659
|
+
paymentUuid: paymentUuid
|
|
1660
|
+
});
|
|
1661
|
+
|
|
1662
|
+
// 验证支付项是否存在
|
|
1663
|
+
paymentItem = this.store.currentOrder.payment.find(function (p) {
|
|
1664
|
+
return p.uuid === paymentUuid;
|
|
1665
|
+
});
|
|
1666
|
+
if (paymentItem) {
|
|
1667
|
+
_context23.next = 7;
|
|
1668
|
+
break;
|
|
1669
|
+
}
|
|
1670
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, "\u652F\u4ED8\u9879\u4E0D\u5B58\u5728: ".concat(paymentUuid));
|
|
1671
|
+
case 7:
|
|
1672
|
+
console.log('[Checkout] 找到要删除的支付项:', {
|
|
1673
|
+
uuid: paymentItem.uuid,
|
|
1674
|
+
code: paymentItem.code,
|
|
1675
|
+
amount: paymentItem.amount,
|
|
1676
|
+
status: paymentItem.status
|
|
1677
|
+
});
|
|
1678
|
+
|
|
1679
|
+
// 调用 Payment 模块删除支付项
|
|
1680
|
+
_context23.next = 10;
|
|
1681
|
+
return this.payment.deletePaymentAsync(this.store.currentOrder.uuid, paymentUuid);
|
|
1682
|
+
case 10:
|
|
1683
|
+
console.log('[Checkout] Payment模块删除完成');
|
|
1684
|
+
|
|
1685
|
+
// 重新从Payment模块获取最新的订单数据,确保支付项同步
|
|
1686
|
+
currentOrderId = this.store.currentOrder.order_id; // 保存当前的订单ID
|
|
1687
|
+
isCurrentOrderReal = currentOrderId && !this.isVirtualOrderId(currentOrderId);
|
|
1688
|
+
_context23.next = 15;
|
|
1689
|
+
return this.payment.getPaymentOrderByUuidAsync(this.store.currentOrder.uuid);
|
|
1690
|
+
case 15:
|
|
1691
|
+
updatedOrder = _context23.sent;
|
|
1692
|
+
if (updatedOrder) {
|
|
1693
|
+
// 如果当前订单ID是真实ID,但获取到的订单ID是虚拟ID,需要保护真实ID
|
|
1694
|
+
if (isCurrentOrderReal && this.isVirtualOrderId(updatedOrder.order_id)) {
|
|
1695
|
+
console.warn('[Checkout] deletePaymentItemAsync: 检测到订单ID回退,保护真实订单ID:', {
|
|
1696
|
+
当前真实ID: currentOrderId,
|
|
1697
|
+
获取到的虚拟ID: updatedOrder.order_id
|
|
1698
|
+
});
|
|
1699
|
+
updatedOrder.order_id = currentOrderId; // 恢复真实的订单ID
|
|
1700
|
+
}
|
|
1701
|
+
this.store.currentOrder = updatedOrder;
|
|
1702
|
+
console.log('[Checkout] 订单数据已同步,当前支付项数量:', updatedOrder.payment.length);
|
|
1703
|
+
}
|
|
1704
|
+
|
|
1705
|
+
// 更新 stateAmount 为剩余未支付金额
|
|
1706
|
+
_context23.next = 19;
|
|
1707
|
+
return this.updateStateAmountToRemaining();
|
|
1708
|
+
case 19:
|
|
1709
|
+
_context23.next = 21;
|
|
1710
|
+
return this.core.effects.emit(CheckoutHooks.OnPaymentStarted, {
|
|
1711
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
1712
|
+
paymentMethodCode: paymentItem.code,
|
|
1713
|
+
amount: "-".concat(paymentItem.amount),
|
|
1714
|
+
// 负数表示删除
|
|
1715
|
+
timestamp: Date.now()
|
|
1716
|
+
});
|
|
1717
|
+
case 21:
|
|
1718
|
+
console.log('[Checkout] 支付项删除成功');
|
|
1719
|
+
_context23.next = 30;
|
|
1720
|
+
break;
|
|
1721
|
+
case 24:
|
|
1722
|
+
_context23.prev = 24;
|
|
1723
|
+
_context23.t0 = _context23["catch"](0);
|
|
1724
|
+
console.error('[Checkout] 删除支付项失败:', _context23.t0);
|
|
1725
|
+
_context23.next = 29;
|
|
1726
|
+
return this.handleError(_context23.t0, CheckoutErrorType.PaymentFailed);
|
|
1727
|
+
case 29:
|
|
1728
|
+
throw _context23.t0;
|
|
1729
|
+
case 30:
|
|
1730
|
+
case "end":
|
|
1731
|
+
return _context23.stop();
|
|
1732
|
+
}
|
|
1733
|
+
}, _callee23, this, [[0, 24]]);
|
|
1734
|
+
}));
|
|
1735
|
+
function deletePaymentItemAsync(_x14) {
|
|
1736
|
+
return _deletePaymentItemAsync.apply(this, arguments);
|
|
1737
|
+
}
|
|
1738
|
+
return deletePaymentItemAsync;
|
|
1739
|
+
}()
|
|
1740
|
+
/**
|
|
1741
|
+
* 批量更新当前订单的代金券支付项(覆盖更新)
|
|
1742
|
+
*
|
|
1743
|
+
* 删除所有现有的代金券支付项,然后添加新的代金券支付项。
|
|
1744
|
+
* 这是一个覆盖式更新操作,确保代金券支付项的一致性。
|
|
1745
|
+
*
|
|
1746
|
+
* @param voucherPaymentItems 新的代金券支付项列表,每个都必须包含 voucher_id
|
|
1747
|
+
* @throws 当前没有活跃订单时抛出错误
|
|
1748
|
+
* @throws 支付项缺少 voucher_id 时抛出错误
|
|
1749
|
+
*/
|
|
1750
|
+
)
|
|
1751
|
+
}, {
|
|
1752
|
+
key: "updateVoucherPaymentItemsAsync",
|
|
1753
|
+
value: (function () {
|
|
1754
|
+
var _updateVoucherPaymentItemsAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee24(voucherPaymentItems) {
|
|
1755
|
+
var _iterator, _step, item, currentOrderId, isCurrentOrderReal, updatedOrder, voucherItems;
|
|
1756
|
+
return _regeneratorRuntime().wrap(function _callee24$(_context24) {
|
|
1757
|
+
while (1) switch (_context24.prev = _context24.next) {
|
|
1758
|
+
case 0:
|
|
1759
|
+
_context24.prev = 0;
|
|
1760
|
+
if (this.store.currentOrder) {
|
|
1761
|
+
_context24.next = 3;
|
|
1762
|
+
break;
|
|
1763
|
+
}
|
|
1764
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, '当前没有活跃订单,无法更新代金券支付项');
|
|
1765
|
+
case 3:
|
|
1766
|
+
console.log('[Checkout] 开始批量更新代金券支付项:', {
|
|
1767
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
1768
|
+
newVoucherCount: voucherPaymentItems.length,
|
|
1769
|
+
voucherPaymentItems: voucherPaymentItems
|
|
1770
|
+
});
|
|
1771
|
+
|
|
1772
|
+
// 验证所有支付项都包含 voucher_id
|
|
1773
|
+
_iterator = _createForOfIteratorHelper(voucherPaymentItems);
|
|
1774
|
+
_context24.prev = 5;
|
|
1775
|
+
_iterator.s();
|
|
1776
|
+
case 7:
|
|
1777
|
+
if ((_step = _iterator.n()).done) {
|
|
1778
|
+
_context24.next = 13;
|
|
1779
|
+
break;
|
|
1780
|
+
}
|
|
1781
|
+
item = _step.value;
|
|
1782
|
+
if (item.voucher_id) {
|
|
1783
|
+
_context24.next = 11;
|
|
1784
|
+
break;
|
|
1785
|
+
}
|
|
1786
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, "\u4EE3\u91D1\u5238\u652F\u4ED8\u9879\u7F3A\u5C11 voucher_id: ".concat(JSON.stringify(item)));
|
|
1787
|
+
case 11:
|
|
1788
|
+
_context24.next = 7;
|
|
1789
|
+
break;
|
|
1790
|
+
case 13:
|
|
1791
|
+
_context24.next = 18;
|
|
1792
|
+
break;
|
|
1793
|
+
case 15:
|
|
1794
|
+
_context24.prev = 15;
|
|
1795
|
+
_context24.t0 = _context24["catch"](5);
|
|
1796
|
+
_iterator.e(_context24.t0);
|
|
1797
|
+
case 18:
|
|
1798
|
+
_context24.prev = 18;
|
|
1799
|
+
_iterator.f();
|
|
1800
|
+
return _context24.finish(18);
|
|
1801
|
+
case 21:
|
|
1802
|
+
_context24.next = 23;
|
|
1803
|
+
return this.payment.updateVoucherPaymentItemsAsync(this.store.currentOrder.uuid, voucherPaymentItems);
|
|
1804
|
+
case 23:
|
|
1805
|
+
console.log('[Checkout] Payment模块批量更新完成');
|
|
1806
|
+
|
|
1807
|
+
// 重新从Payment模块获取最新的订单数据,确保支付项同步
|
|
1808
|
+
currentOrderId = this.store.currentOrder.order_id; // 保存当前的订单ID
|
|
1809
|
+
isCurrentOrderReal = currentOrderId && !this.isVirtualOrderId(currentOrderId);
|
|
1810
|
+
_context24.next = 28;
|
|
1811
|
+
return this.payment.getPaymentOrderByUuidAsync(this.store.currentOrder.uuid);
|
|
1812
|
+
case 28:
|
|
1813
|
+
updatedOrder = _context24.sent;
|
|
1814
|
+
if (updatedOrder) {
|
|
1815
|
+
// 如果当前订单ID是真实ID,但获取到的订单ID是虚拟ID,需要保护真实ID
|
|
1816
|
+
if (isCurrentOrderReal && this.isVirtualOrderId(updatedOrder.order_id)) {
|
|
1817
|
+
console.warn('[Checkout] updateVoucherPaymentItemsAsync: 检测到订单ID回退,保护真实订单ID:', {
|
|
1818
|
+
当前真实ID: currentOrderId,
|
|
1819
|
+
获取到的虚拟ID: updatedOrder.order_id
|
|
1820
|
+
});
|
|
1821
|
+
updatedOrder.order_id = currentOrderId; // 恢复真实的订单ID
|
|
1822
|
+
}
|
|
1823
|
+
this.store.currentOrder = updatedOrder;
|
|
1824
|
+
console.log('[Checkout] 订单数据已同步,当前支付项数量:', updatedOrder.payment.length);
|
|
1825
|
+
|
|
1826
|
+
// 打印更新后的代金券支付项
|
|
1827
|
+
voucherItems = updatedOrder.payment.filter(function (payment) {
|
|
1828
|
+
return payment.voucher_id && payment.status !== 'voided';
|
|
1829
|
+
});
|
|
1830
|
+
console.log('[Checkout] 更新后的代金券支付项:', {
|
|
1831
|
+
voucherCount: voucherItems.length,
|
|
1832
|
+
items: voucherItems.map(function (item) {
|
|
1833
|
+
return {
|
|
1834
|
+
uuid: item.uuid,
|
|
1835
|
+
code: item.code,
|
|
1836
|
+
amount: item.amount,
|
|
1837
|
+
voucher_id: item.voucher_id
|
|
1838
|
+
};
|
|
1839
|
+
})
|
|
1840
|
+
});
|
|
1841
|
+
}
|
|
1842
|
+
|
|
1843
|
+
// 更新 stateAmount 为剩余未支付金额
|
|
1844
|
+
_context24.next = 32;
|
|
1845
|
+
return this.updateStateAmountToRemaining();
|
|
1846
|
+
case 32:
|
|
1847
|
+
_context24.next = 34;
|
|
1848
|
+
return this.core.effects.emit(CheckoutHooks.OnPaymentStarted, {
|
|
1849
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
1850
|
+
paymentMethodCode: 'VOUCHER_BATCH',
|
|
1851
|
+
amount: voucherPaymentItems.reduce(function (sum, item) {
|
|
1852
|
+
return sum + parseFloat(String(item.amount));
|
|
1853
|
+
}, 0).toFixed(2),
|
|
1854
|
+
timestamp: Date.now()
|
|
1855
|
+
});
|
|
1856
|
+
case 34:
|
|
1857
|
+
console.log('[Checkout] 代金券支付项批量更新成功');
|
|
1858
|
+
_context24.next = 43;
|
|
1859
|
+
break;
|
|
1860
|
+
case 37:
|
|
1861
|
+
_context24.prev = 37;
|
|
1862
|
+
_context24.t1 = _context24["catch"](0);
|
|
1863
|
+
console.error('[Checkout] 批量更新代金券支付项失败:', _context24.t1);
|
|
1864
|
+
_context24.next = 42;
|
|
1865
|
+
return this.handleError(_context24.t1, CheckoutErrorType.PaymentFailed);
|
|
1866
|
+
case 42:
|
|
1867
|
+
throw _context24.t1;
|
|
1868
|
+
case 43:
|
|
1869
|
+
case "end":
|
|
1870
|
+
return _context24.stop();
|
|
1871
|
+
}
|
|
1872
|
+
}, _callee24, this, [[0, 37], [5, 15, 18, 21]]);
|
|
1873
|
+
}));
|
|
1874
|
+
function updateVoucherPaymentItemsAsync(_x15) {
|
|
1875
|
+
return _updateVoucherPaymentItemsAsync.apply(this, arguments);
|
|
1876
|
+
}
|
|
1877
|
+
return updateVoucherPaymentItemsAsync;
|
|
1878
|
+
}()
|
|
1879
|
+
/**
|
|
1880
|
+
* 修改当前订单的定金状态
|
|
1881
|
+
*
|
|
1882
|
+
* 更新当前订单的 is_deposit 字段,用于标识订单是否为定金订单
|
|
1883
|
+
*
|
|
1884
|
+
* @param isDeposit 定金状态 (1: 定金订单, 0: 全款订单)
|
|
1885
|
+
* @throws 当前没有活跃订单时抛出错误
|
|
1886
|
+
*/
|
|
1887
|
+
)
|
|
1888
|
+
}, {
|
|
1889
|
+
key: "updateOrderDepositStatusAsync",
|
|
1890
|
+
value: (function () {
|
|
1891
|
+
var _updateOrderDepositStatusAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee25(isDeposit) {
|
|
1892
|
+
var newDepositValue, oldDepositValue, updateParams;
|
|
1893
|
+
return _regeneratorRuntime().wrap(function _callee25$(_context25) {
|
|
1894
|
+
while (1) switch (_context25.prev = _context25.next) {
|
|
1895
|
+
case 0:
|
|
1896
|
+
_context25.prev = 0;
|
|
1897
|
+
if (!(isDeposit !== 0 && isDeposit !== 1)) {
|
|
1898
|
+
_context25.next = 3;
|
|
1899
|
+
break;
|
|
1900
|
+
}
|
|
1901
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, 'isDeposit 参数只能是 0(全款订单)或 1(定金订单)');
|
|
1902
|
+
case 3:
|
|
1903
|
+
if (this.store.currentOrder) {
|
|
1904
|
+
_context25.next = 5;
|
|
1905
|
+
break;
|
|
1906
|
+
}
|
|
1907
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, '未找到当前订单,无法修改定金状态');
|
|
1908
|
+
case 5:
|
|
1909
|
+
newDepositValue = isDeposit;
|
|
1910
|
+
oldDepositValue = this.store.currentOrder.is_deposit; // 如果状态没有变化,直接返回
|
|
1911
|
+
if (!(oldDepositValue === newDepositValue)) {
|
|
1912
|
+
_context25.next = 10;
|
|
1913
|
+
break;
|
|
1914
|
+
}
|
|
1915
|
+
console.log('[Checkout] 定金状态无变化,跳过更新');
|
|
1916
|
+
return _context25.abrupt("return");
|
|
1917
|
+
case 10:
|
|
1918
|
+
console.log('[Checkout] 更新订单定金状态:', {
|
|
1919
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
1920
|
+
orderId: this.store.currentOrder.order_id,
|
|
1921
|
+
oldIsDeposit: oldDepositValue,
|
|
1922
|
+
newIsDeposit: newDepositValue
|
|
1923
|
+
});
|
|
1924
|
+
|
|
1925
|
+
// 准备更新参数
|
|
1926
|
+
updateParams = {
|
|
1927
|
+
is_deposit: newDepositValue
|
|
1928
|
+
}; // 如果从定金改为全款,可以清空定金金额
|
|
1929
|
+
if (isDeposit === 0 && this.store.currentOrder.deposit_amount !== '0.00') {
|
|
1930
|
+
updateParams.deposit_amount = '0.00';
|
|
1931
|
+
console.log('[Checkout] 订单从定金改为全款,清空定金金额');
|
|
1932
|
+
}
|
|
1933
|
+
|
|
1934
|
+
// 调用 Payment 模块更新订单
|
|
1935
|
+
_context25.next = 15;
|
|
1936
|
+
return this.payment.updateOrderAsync(this.store.currentOrder.uuid, updateParams);
|
|
1937
|
+
case 15:
|
|
1938
|
+
// 更新本地缓存的订单对象
|
|
1939
|
+
this.store.currentOrder = _objectSpread(_objectSpread({}, this.store.currentOrder), updateParams);
|
|
1940
|
+
|
|
1941
|
+
// 同时更新本地订单数据(如果存在)
|
|
1942
|
+
if (this.store.localOrderData) {
|
|
1943
|
+
this.store.localOrderData.is_deposit = newDepositValue;
|
|
1944
|
+
}
|
|
1945
|
+
|
|
1946
|
+
// 触发订单更新事件
|
|
1947
|
+
_context25.next = 19;
|
|
1948
|
+
return this.core.effects.emit(CheckoutHooks.OnOrderCreated, {
|
|
1949
|
+
order: this.store.currentOrder,
|
|
1950
|
+
timestamp: Date.now()
|
|
1951
|
+
});
|
|
1952
|
+
case 19:
|
|
1953
|
+
console.log('[Checkout] 订单定金状态更新成功:', {
|
|
1954
|
+
isDeposit: newDepositValue,
|
|
1955
|
+
depositAmount: this.store.currentOrder.deposit_amount
|
|
1956
|
+
});
|
|
1957
|
+
_context25.next = 28;
|
|
1958
|
+
break;
|
|
1959
|
+
case 22:
|
|
1960
|
+
_context25.prev = 22;
|
|
1961
|
+
_context25.t0 = _context25["catch"](0);
|
|
1962
|
+
console.error('[Checkout] 更新订单定金状态失败:', _context25.t0);
|
|
1963
|
+
_context25.next = 27;
|
|
1964
|
+
return this.handleError(_context25.t0, CheckoutErrorType.ValidationFailed);
|
|
1965
|
+
case 27:
|
|
1966
|
+
throw _context25.t0;
|
|
1967
|
+
case 28:
|
|
1968
|
+
case "end":
|
|
1969
|
+
return _context25.stop();
|
|
1970
|
+
}
|
|
1971
|
+
}, _callee25, this, [[0, 22]]);
|
|
1972
|
+
}));
|
|
1973
|
+
function updateOrderDepositStatusAsync(_x16) {
|
|
1974
|
+
return _updateOrderDepositStatusAsync.apply(this, arguments);
|
|
1975
|
+
}
|
|
1976
|
+
return updateOrderDepositStatusAsync;
|
|
1977
|
+
}()
|
|
1978
|
+
/**
|
|
1979
|
+
* 更新当前订单的客户信息
|
|
1980
|
+
*
|
|
1981
|
+
* 更新当前订单关联的客户信息,用于标识订单的所属客户
|
|
1982
|
+
*
|
|
1983
|
+
* @param customer 客户信息 (customer_id 和/或 customer_name)
|
|
1984
|
+
* @throws 当前没有活跃订单时抛出错误
|
|
1985
|
+
*/
|
|
1986
|
+
)
|
|
1987
|
+
}, {
|
|
1988
|
+
key: "updateOrderCustomerAsync",
|
|
1989
|
+
value: (function () {
|
|
1990
|
+
var _updateOrderCustomerAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee26(customer) {
|
|
1991
|
+
return _regeneratorRuntime().wrap(function _callee26$(_context26) {
|
|
1992
|
+
while (1) switch (_context26.prev = _context26.next) {
|
|
1993
|
+
case 0:
|
|
1994
|
+
_context26.prev = 0;
|
|
1995
|
+
if (this.store.currentOrder) {
|
|
1996
|
+
_context26.next = 3;
|
|
1997
|
+
break;
|
|
1998
|
+
}
|
|
1999
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, '未找到当前订单,无法更新客户信息');
|
|
2000
|
+
case 3:
|
|
2001
|
+
console.log('[Checkout] 更新订单客户信息:', {
|
|
2002
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
2003
|
+
oldCustomer: this.store.currentCustomer,
|
|
2004
|
+
newCustomer: customer
|
|
2005
|
+
});
|
|
2006
|
+
|
|
2007
|
+
// 更新客户信息
|
|
2008
|
+
this.store.currentCustomer = {
|
|
2009
|
+
customer_id: customer.customer_id,
|
|
2010
|
+
customer_name: customer.customer_name
|
|
2011
|
+
};
|
|
2012
|
+
|
|
2013
|
+
// 同时更新本地订单数据中的客户信息(如果存在)
|
|
2014
|
+
if (this.store.localOrderData) {
|
|
2015
|
+
this.store.localOrderData.customer_id = customer.customer_id;
|
|
2016
|
+
this.store.localOrderData.customer_name = customer.customer_name;
|
|
2017
|
+
}
|
|
2018
|
+
console.log('[Checkout] 订单客户信息更新成功:', this.store.currentCustomer);
|
|
2019
|
+
_context26.next = 15;
|
|
2020
|
+
break;
|
|
2021
|
+
case 9:
|
|
2022
|
+
_context26.prev = 9;
|
|
2023
|
+
_context26.t0 = _context26["catch"](0);
|
|
2024
|
+
console.error('[Checkout] 更新订单客户信息失败:', _context26.t0);
|
|
2025
|
+
_context26.next = 14;
|
|
2026
|
+
return this.handleError(_context26.t0, CheckoutErrorType.ValidationFailed);
|
|
2027
|
+
case 14:
|
|
2028
|
+
throw _context26.t0;
|
|
2029
|
+
case 15:
|
|
2030
|
+
case "end":
|
|
2031
|
+
return _context26.stop();
|
|
2032
|
+
}
|
|
2033
|
+
}, _callee26, this, [[0, 9]]);
|
|
2034
|
+
}));
|
|
2035
|
+
function updateOrderCustomerAsync(_x17) {
|
|
2036
|
+
return _updateOrderCustomerAsync.apply(this, arguments);
|
|
2037
|
+
}
|
|
2038
|
+
return updateOrderCustomerAsync;
|
|
2039
|
+
}()
|
|
2040
|
+
/**
|
|
2041
|
+
* 获取当前订单的客户信息
|
|
2042
|
+
*
|
|
2043
|
+
* @returns 当前客户信息,如果没有则返回 null
|
|
2044
|
+
*/
|
|
2045
|
+
)
|
|
2046
|
+
}, {
|
|
2047
|
+
key: "getCurrentCustomer",
|
|
2048
|
+
value: function getCurrentCustomer() {
|
|
2049
|
+
return this.store.currentCustomer || null;
|
|
2050
|
+
}
|
|
2051
|
+
|
|
2052
|
+
/**
|
|
2053
|
+
* 检查订单是否需要手动同步
|
|
2054
|
+
*
|
|
2055
|
+
* 返回订单是否为纯代金券支付且待付金额<=0但未同步的状态
|
|
2056
|
+
*/
|
|
2057
|
+
}, {
|
|
2058
|
+
key: "needsManualSync",
|
|
2059
|
+
value: function needsManualSync() {
|
|
2060
|
+
try {
|
|
2061
|
+
var _this$store$currentOr4;
|
|
2062
|
+
// 检查基础条件
|
|
2063
|
+
if (!this.store.currentOrder || this.store.isOrderSynced) {
|
|
2064
|
+
return false;
|
|
2065
|
+
}
|
|
2066
|
+
|
|
2067
|
+
// 检查是否支付完成(剩余金额<=0)
|
|
2068
|
+
var remainingAmount = this.calculateRemainingAmount();
|
|
2069
|
+
var remainingValue = parseFloat(remainingAmount);
|
|
2070
|
+
if (remainingValue > 0) {
|
|
2071
|
+
return false;
|
|
2072
|
+
}
|
|
2073
|
+
|
|
2074
|
+
// 检查是否所有支付项都带有 voucher_id
|
|
2075
|
+
var allPaymentsHaveVoucherId = this.store.currentOrder.payment && this.store.currentOrder.payment.length > 0 && this.store.currentOrder.payment.every(function (item) {
|
|
2076
|
+
return item.status !== 'voided' && item.voucher_id;
|
|
2077
|
+
});
|
|
2078
|
+
console.log('[Checkout] needsManualSync 检查结果:', {
|
|
2079
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
2080
|
+
isOrderSynced: this.store.isOrderSynced,
|
|
2081
|
+
remainingAmount: remainingAmount,
|
|
2082
|
+
hasPayments: ((_this$store$currentOr4 = this.store.currentOrder.payment) === null || _this$store$currentOr4 === void 0 ? void 0 : _this$store$currentOr4.length) > 0,
|
|
2083
|
+
allPaymentsHaveVoucherId: allPaymentsHaveVoucherId,
|
|
2084
|
+
needsManualSync: allPaymentsHaveVoucherId
|
|
2085
|
+
});
|
|
2086
|
+
return allPaymentsHaveVoucherId;
|
|
2087
|
+
} catch (error) {
|
|
2088
|
+
console.error('[Checkout] needsManualSync 检查失败:', error);
|
|
2089
|
+
return false;
|
|
2090
|
+
}
|
|
2091
|
+
}
|
|
2092
|
+
|
|
2093
|
+
/**
|
|
2094
|
+
* 手动同步订单到后端
|
|
2095
|
+
*
|
|
2096
|
+
* 用于强制同步订单到后端,特别适用于纯代金券支付完成的订单
|
|
2097
|
+
*/
|
|
2098
|
+
}, {
|
|
2099
|
+
key: "manualSyncOrderAsync",
|
|
2100
|
+
value: (function () {
|
|
2101
|
+
var _manualSyncOrderAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee27() {
|
|
2102
|
+
var orderUuid, oldOrderId, realOrderId, finalOrderId, finalIsVirtual, _this$store$currentOr5, errorMessage;
|
|
2103
|
+
return _regeneratorRuntime().wrap(function _callee27$(_context27) {
|
|
2104
|
+
while (1) switch (_context27.prev = _context27.next) {
|
|
2105
|
+
case 0:
|
|
2106
|
+
_context27.prev = 0;
|
|
2107
|
+
if (this.store.currentOrder) {
|
|
2108
|
+
_context27.next = 3;
|
|
2109
|
+
break;
|
|
2110
|
+
}
|
|
2111
|
+
return _context27.abrupt("return", {
|
|
2112
|
+
success: false,
|
|
2113
|
+
message: '当前没有活跃订单,无法同步'
|
|
2114
|
+
});
|
|
2115
|
+
case 3:
|
|
2116
|
+
orderUuid = this.store.currentOrder.uuid;
|
|
2117
|
+
oldOrderId = this.store.currentOrder.order_id; // 检查订单是否已经同步
|
|
2118
|
+
if (this.store.isOrderSynced) {
|
|
2119
|
+
console.log('[Checkout] 订单已同步过,将执行更新操作');
|
|
2120
|
+
}
|
|
2121
|
+
console.log('[Checkout] 开始手动同步订单到后端:', {
|
|
2122
|
+
orderUuid: orderUuid,
|
|
2123
|
+
orderId: oldOrderId,
|
|
2124
|
+
totalAmount: this.store.currentOrder.total_amount,
|
|
2125
|
+
remainingAmount: this.calculateRemainingAmount()
|
|
2126
|
+
});
|
|
2127
|
+
|
|
2128
|
+
// 强制同步订单到后端,并获取真实订单ID
|
|
2129
|
+
_context27.next = 9;
|
|
2130
|
+
return this.syncOrderToBackendWithReturn(true);
|
|
2131
|
+
case 9:
|
|
2132
|
+
realOrderId = _context27.sent;
|
|
2133
|
+
console.log('[Checkout] 手动同步订单完成:', {
|
|
2134
|
+
orderUuid: orderUuid,
|
|
2135
|
+
oldOrderId: oldOrderId,
|
|
2136
|
+
realOrderId: realOrderId,
|
|
2137
|
+
isOrderSynced: this.store.isOrderSynced
|
|
2138
|
+
});
|
|
2139
|
+
|
|
2140
|
+
// 🔍 关键验证:检查最终状态是否正确
|
|
2141
|
+
finalOrderId = this.store.currentOrder.order_id;
|
|
2142
|
+
finalIsVirtual = this.isVirtualOrderId(finalOrderId);
|
|
2143
|
+
console.log('[Checkout] manualSyncOrderAsync 最终状态验证:', {
|
|
2144
|
+
返回的订单ID: realOrderId,
|
|
2145
|
+
存储的订单ID: finalOrderId,
|
|
2146
|
+
存储的ID是否虚拟: finalIsVirtual,
|
|
2147
|
+
是否一致: realOrderId === finalOrderId,
|
|
2148
|
+
同步状态: this.store.isOrderSynced
|
|
2149
|
+
});
|
|
2150
|
+
if (finalIsVirtual) {
|
|
2151
|
+
console.error('[Checkout] 严重警告:手动同步完成后订单ID仍为虚拟ID!');
|
|
2152
|
+
}
|
|
2153
|
+
if (realOrderId !== finalOrderId) {
|
|
2154
|
+
console.error('[Checkout] 严重警告:返回的订单ID与存储的订单ID不一致!');
|
|
2155
|
+
}
|
|
2156
|
+
return _context27.abrupt("return", {
|
|
2157
|
+
success: true,
|
|
2158
|
+
message: '订单同步成功',
|
|
2159
|
+
orderId: realOrderId,
|
|
2160
|
+
// 直接返回从后端获取的真实订单ID
|
|
2161
|
+
orderUuid: orderUuid
|
|
2162
|
+
});
|
|
2163
|
+
case 19:
|
|
2164
|
+
_context27.prev = 19;
|
|
2165
|
+
_context27.t0 = _context27["catch"](0);
|
|
2166
|
+
console.error('[Checkout] 手动同步订单失败:', _context27.t0);
|
|
2167
|
+
errorMessage = _context27.t0 instanceof Error ? _context27.t0.message : '同步失败';
|
|
2168
|
+
return _context27.abrupt("return", {
|
|
2169
|
+
success: false,
|
|
2170
|
+
message: "\u8BA2\u5355\u540C\u6B65\u5931\u8D25: ".concat(errorMessage),
|
|
2171
|
+
orderUuid: (_this$store$currentOr5 = this.store.currentOrder) === null || _this$store$currentOr5 === void 0 ? void 0 : _this$store$currentOr5.uuid
|
|
2172
|
+
});
|
|
2173
|
+
case 24:
|
|
2174
|
+
case "end":
|
|
2175
|
+
return _context27.stop();
|
|
2176
|
+
}
|
|
2177
|
+
}, _callee27, this, [[0, 19]]);
|
|
2178
|
+
}));
|
|
2179
|
+
function manualSyncOrderAsync() {
|
|
2180
|
+
return _manualSyncOrderAsync.apply(this, arguments);
|
|
2181
|
+
}
|
|
2182
|
+
return manualSyncOrderAsync;
|
|
2183
|
+
}()
|
|
2184
|
+
/**
|
|
2185
|
+
* 获取当前订单备注
|
|
2186
|
+
*
|
|
2187
|
+
* @returns 当前订单的备注内容,如果没有则返回空字符串
|
|
2188
|
+
*/
|
|
2189
|
+
)
|
|
2190
|
+
}, {
|
|
2191
|
+
key: "getOrderNote",
|
|
2192
|
+
value: function getOrderNote() {
|
|
2193
|
+
if (!this.store.localOrderData) {
|
|
2194
|
+
console.log('[Checkout] 没有本地订单数据,无法获取备注');
|
|
2195
|
+
return '';
|
|
2196
|
+
}
|
|
2197
|
+
return this.store.localOrderData.shop_note || '';
|
|
2198
|
+
}
|
|
2199
|
+
|
|
2200
|
+
/**
|
|
2201
|
+
* 获取当前订单ID
|
|
2202
|
+
*
|
|
2203
|
+
* @returns 当前订单的ID,如果没有订单则返回null
|
|
2204
|
+
*/
|
|
2205
|
+
}, {
|
|
2206
|
+
key: "getCurrentOrderId",
|
|
2207
|
+
value: function getCurrentOrderId() {
|
|
2208
|
+
if (!this.store.currentOrder) {
|
|
2209
|
+
return null;
|
|
2210
|
+
}
|
|
2211
|
+
return this.store.currentOrder.order_id;
|
|
2212
|
+
}
|
|
2213
|
+
|
|
2214
|
+
/**
|
|
2215
|
+
* 保存订单并稍后支付
|
|
2216
|
+
*
|
|
2217
|
+
* 将当前订单保存到后端,但排除代金券类支付项(voucher_id),
|
|
2218
|
+
* 适用于用户想要保存订单但稍后完成支付的场景
|
|
2219
|
+
*/
|
|
2220
|
+
}, {
|
|
2221
|
+
key: "saveForLaterPaymentAsync",
|
|
2222
|
+
value: (function () {
|
|
2223
|
+
var _saveForLaterPaymentAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee28() {
|
|
2224
|
+
var orderUuid, currentOrderId, allPaymentItems, filteredPaymentItems, voucherItems, realOrderId, finalOrderId, _this$store$currentOr6, errorMessage;
|
|
2225
|
+
return _regeneratorRuntime().wrap(function _callee28$(_context28) {
|
|
2226
|
+
while (1) switch (_context28.prev = _context28.next) {
|
|
2227
|
+
case 0:
|
|
2228
|
+
_context28.prev = 0;
|
|
2229
|
+
if (this.store.currentOrder) {
|
|
2230
|
+
_context28.next = 3;
|
|
2231
|
+
break;
|
|
2232
|
+
}
|
|
2233
|
+
return _context28.abrupt("return", {
|
|
2234
|
+
success: false,
|
|
2235
|
+
message: '当前没有活跃订单,无法保存'
|
|
2236
|
+
});
|
|
2237
|
+
case 3:
|
|
2238
|
+
orderUuid = this.store.currentOrder.uuid;
|
|
2239
|
+
currentOrderId = this.store.currentOrder.order_id;
|
|
2240
|
+
console.log('[Checkout] 开始保存订单并稍后支付:', {
|
|
2241
|
+
orderUuid: orderUuid,
|
|
2242
|
+
orderId: currentOrderId,
|
|
2243
|
+
totalAmount: this.store.currentOrder.total_amount
|
|
2244
|
+
});
|
|
2245
|
+
|
|
2246
|
+
// 获取当前订单的所有支付项
|
|
2247
|
+
_context28.next = 8;
|
|
2248
|
+
return this.payment.getPaymentItemsAsync(this.store.currentOrder.uuid);
|
|
2249
|
+
case 8:
|
|
2250
|
+
allPaymentItems = _context28.sent;
|
|
2251
|
+
// 过滤掉带有 voucher_id 的支付项(代金券类支付项)
|
|
2252
|
+
filteredPaymentItems = allPaymentItems.filter(function (payment) {
|
|
2253
|
+
return !payment.voucher_id || payment.voucher_id.trim() === '';
|
|
2254
|
+
}); // 记录过滤结果
|
|
2255
|
+
voucherItems = allPaymentItems.filter(function (payment) {
|
|
2256
|
+
return payment.voucher_id && payment.voucher_id.trim() !== '';
|
|
2257
|
+
});
|
|
2258
|
+
console.log('[Checkout] 支付项过滤结果:', {
|
|
2259
|
+
总支付项: allPaymentItems.length,
|
|
2260
|
+
过滤后支付项: filteredPaymentItems.length,
|
|
2261
|
+
被过滤的代金券项: voucherItems.length,
|
|
2262
|
+
代金券详情: voucherItems.map(function (item) {
|
|
2263
|
+
return {
|
|
2264
|
+
uuid: item.uuid,
|
|
2265
|
+
code: item.code,
|
|
2266
|
+
amount: item.amount,
|
|
2267
|
+
voucherId: item.voucher_id
|
|
2268
|
+
};
|
|
2269
|
+
}),
|
|
2270
|
+
保留的支付项: filteredPaymentItems.map(function (item) {
|
|
2271
|
+
return {
|
|
2272
|
+
uuid: item.uuid,
|
|
2273
|
+
code: item.code,
|
|
2274
|
+
amount: item.amount
|
|
2275
|
+
};
|
|
2276
|
+
})
|
|
2277
|
+
});
|
|
2278
|
+
|
|
2279
|
+
// 调用同步方法,传入过滤后的支付项
|
|
2280
|
+
_context28.next = 14;
|
|
2281
|
+
return this.syncOrderToBackendWithReturn(false, filteredPaymentItems);
|
|
2282
|
+
case 14:
|
|
2283
|
+
realOrderId = _context28.sent;
|
|
2284
|
+
console.log('[Checkout] 保存订单完成:', {
|
|
2285
|
+
orderUuid: orderUuid,
|
|
2286
|
+
oldOrderId: currentOrderId,
|
|
2287
|
+
realOrderId: realOrderId,
|
|
2288
|
+
isOrderSynced: this.store.isOrderSynced,
|
|
2289
|
+
filteredPaymentsCount: filteredPaymentItems.length
|
|
2290
|
+
});
|
|
2291
|
+
|
|
2292
|
+
// 验证最终状态
|
|
2293
|
+
finalOrderId = this.store.currentOrder.order_id;
|
|
2294
|
+
console.log('[Checkout] saveForLaterPaymentAsync 最终状态验证:', {
|
|
2295
|
+
返回的订单ID: realOrderId,
|
|
2296
|
+
存储的订单ID: finalOrderId,
|
|
2297
|
+
是否一致: realOrderId === finalOrderId,
|
|
2298
|
+
同步状态: this.store.isOrderSynced
|
|
2299
|
+
});
|
|
2300
|
+
return _context28.abrupt("return", {
|
|
2301
|
+
success: true,
|
|
2302
|
+
message: '订单保存成功,可稍后继续支付',
|
|
2303
|
+
orderId: realOrderId,
|
|
2304
|
+
orderUuid: orderUuid
|
|
2305
|
+
});
|
|
2306
|
+
case 21:
|
|
2307
|
+
_context28.prev = 21;
|
|
2308
|
+
_context28.t0 = _context28["catch"](0);
|
|
2309
|
+
console.error('[Checkout] 保存订单失败:', _context28.t0);
|
|
2310
|
+
errorMessage = _context28.t0 instanceof Error ? _context28.t0.message : '保存失败';
|
|
2311
|
+
return _context28.abrupt("return", {
|
|
2312
|
+
success: false,
|
|
2313
|
+
message: "\u8BA2\u5355\u4FDD\u5B58\u5931\u8D25: ".concat(errorMessage),
|
|
2314
|
+
orderUuid: (_this$store$currentOr6 = this.store.currentOrder) === null || _this$store$currentOr6 === void 0 ? void 0 : _this$store$currentOr6.uuid
|
|
2315
|
+
});
|
|
2316
|
+
case 26:
|
|
2317
|
+
case "end":
|
|
2318
|
+
return _context28.stop();
|
|
2319
|
+
}
|
|
2320
|
+
}, _callee28, this, [[0, 21]]);
|
|
2321
|
+
}));
|
|
2322
|
+
function saveForLaterPaymentAsync() {
|
|
2323
|
+
return _saveForLaterPaymentAsync.apply(this, arguments);
|
|
2324
|
+
}
|
|
2325
|
+
return saveForLaterPaymentAsync;
|
|
2326
|
+
}()
|
|
2327
|
+
/**
|
|
2328
|
+
* 获取当前商店折扣金额
|
|
2329
|
+
*
|
|
2330
|
+
* @returns 当前的商店折扣金额,如果没有则返回0
|
|
2331
|
+
*/
|
|
2332
|
+
)
|
|
2333
|
+
}, {
|
|
2334
|
+
key: "getShopDiscount",
|
|
2335
|
+
value: function getShopDiscount() {
|
|
2336
|
+
var _this$store$localOrde;
|
|
2337
|
+
// 优先从 localOrderData 中获取
|
|
2338
|
+
if (((_this$store$localOrde = this.store.localOrderData) === null || _this$store$localOrde === void 0 ? void 0 : _this$store$localOrde.shop_discount) !== undefined) {
|
|
2339
|
+
return this.store.localOrderData.shop_discount;
|
|
2340
|
+
}
|
|
2341
|
+
|
|
2342
|
+
// 从 cartSummary 中查找 shop_discount 项
|
|
2343
|
+
if (this.store.cartSummary) {
|
|
2344
|
+
var shopDiscountItem = this.store.cartSummary.find(function (item) {
|
|
2345
|
+
return item.key === 'shop_discount';
|
|
2346
|
+
});
|
|
2347
|
+
if (shopDiscountItem) {
|
|
2348
|
+
return shopDiscountItem.value;
|
|
2349
|
+
}
|
|
2350
|
+
}
|
|
2351
|
+
return 0;
|
|
2352
|
+
}
|
|
2353
|
+
|
|
2354
|
+
/**
|
|
2355
|
+
* 更新订单商店折扣
|
|
2356
|
+
*
|
|
2357
|
+
* 同时更新cartSummary和localOrderData中的shop_discount值
|
|
2358
|
+
*
|
|
2359
|
+
* @param discountAmount 商店折扣金额
|
|
2360
|
+
*/
|
|
2361
|
+
}, {
|
|
2362
|
+
key: "updateShopDiscountAsync",
|
|
2363
|
+
value: (function () {
|
|
2364
|
+
var _updateShopDiscountAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee29(discountAmount) {
|
|
2365
|
+
var _this$store$currentOr7, _this$store$currentOr8, oldDiscount, shopDiscountItem, updatedAmountInfo;
|
|
2366
|
+
return _regeneratorRuntime().wrap(function _callee29$(_context29) {
|
|
2367
|
+
while (1) switch (_context29.prev = _context29.next) {
|
|
2368
|
+
case 0:
|
|
2369
|
+
_context29.prev = 0;
|
|
2370
|
+
oldDiscount = this.getShopDiscount();
|
|
2371
|
+
console.log('[Checkout] 更新商店折扣:', {
|
|
2372
|
+
orderUuid: (_this$store$currentOr7 = this.store.currentOrder) === null || _this$store$currentOr7 === void 0 ? void 0 : _this$store$currentOr7.uuid,
|
|
2373
|
+
oldDiscount: oldDiscount,
|
|
2374
|
+
newDiscount: discountAmount
|
|
2375
|
+
});
|
|
2376
|
+
|
|
2377
|
+
// 1. 更新 cartSummary 中的 shop_discount 项
|
|
2378
|
+
if (this.store.cartSummary) {
|
|
2379
|
+
shopDiscountItem = this.store.cartSummary.find(function (item) {
|
|
2380
|
+
return item.key === 'shop_discount';
|
|
2381
|
+
});
|
|
2382
|
+
if (shopDiscountItem) {
|
|
2383
|
+
shopDiscountItem.value = discountAmount;
|
|
2384
|
+
console.log('[Checkout] cartSummary 中的商店折扣已更新');
|
|
2385
|
+
} else {
|
|
2386
|
+
// 如果不存在,创建一个新的商店折扣项
|
|
2387
|
+
this.store.cartSummary.push({
|
|
2388
|
+
key: 'shop_discount',
|
|
2389
|
+
value: discountAmount,
|
|
2390
|
+
hidden: true,
|
|
2391
|
+
label: 'Shop Discount'
|
|
2392
|
+
});
|
|
2393
|
+
console.log('[Checkout] cartSummary 中已添加新的商店折扣项');
|
|
2394
|
+
}
|
|
2395
|
+
}
|
|
2396
|
+
|
|
2397
|
+
// 2. 更新 localOrderData 中的 shop_discount
|
|
2398
|
+
if (this.store.localOrderData) {
|
|
2399
|
+
this.store.localOrderData.shop_discount = discountAmount;
|
|
2400
|
+
console.log('[Checkout] localOrderData 中的商店折扣已更新');
|
|
2401
|
+
} else {
|
|
2402
|
+
console.warn('[Checkout] localOrderData 不存在,无法更新商店折扣');
|
|
2403
|
+
}
|
|
2404
|
+
|
|
2405
|
+
// 3. 如果有当前订单,可能需要重新计算订单金额
|
|
2406
|
+
if (this.store.currentOrder && this.store.cartSummary) {
|
|
2407
|
+
// 重新提取金额信息
|
|
2408
|
+
updatedAmountInfo = this.extractAmountFromCartSummary(this.store.cartSummary);
|
|
2409
|
+
console.log('[Checkout] 重新计算订单金额:', updatedAmountInfo);
|
|
2410
|
+
|
|
2411
|
+
// 更新订单的总金额等信息
|
|
2412
|
+
this.store.currentOrder.total_amount = updatedAmountInfo.totalAmount;
|
|
2413
|
+
this.store.currentOrder.expect_amount = updatedAmountInfo.totalAmount;
|
|
2414
|
+
}
|
|
2415
|
+
|
|
2416
|
+
// 4. 更新 stateAmount 为剩余未支付金额
|
|
2417
|
+
_context29.next = 8;
|
|
2418
|
+
return this.updateStateAmountToRemaining();
|
|
2419
|
+
case 8:
|
|
2420
|
+
_context29.next = 10;
|
|
2421
|
+
return this.core.effects.emit(CheckoutHooks.OnShopDiscountChanged, {
|
|
2422
|
+
orderUuid: (_this$store$currentOr8 = this.store.currentOrder) === null || _this$store$currentOr8 === void 0 ? void 0 : _this$store$currentOr8.uuid,
|
|
2423
|
+
oldDiscount: oldDiscount,
|
|
2424
|
+
newDiscount: discountAmount,
|
|
2425
|
+
timestamp: Date.now()
|
|
2426
|
+
});
|
|
2427
|
+
case 10:
|
|
2428
|
+
console.log('[Checkout] 商店折扣更新成功:', {
|
|
2429
|
+
oldDiscount: oldDiscount,
|
|
2430
|
+
newDiscount: discountAmount
|
|
2431
|
+
});
|
|
2432
|
+
_context29.next = 19;
|
|
2433
|
+
break;
|
|
2434
|
+
case 13:
|
|
2435
|
+
_context29.prev = 13;
|
|
2436
|
+
_context29.t0 = _context29["catch"](0);
|
|
2437
|
+
console.error('[Checkout] 更新商店折扣失败:', _context29.t0);
|
|
2438
|
+
_context29.next = 18;
|
|
2439
|
+
return this.handleError(_context29.t0, CheckoutErrorType.ValidationFailed);
|
|
2440
|
+
case 18:
|
|
2441
|
+
throw _context29.t0;
|
|
2442
|
+
case 19:
|
|
2443
|
+
case "end":
|
|
2444
|
+
return _context29.stop();
|
|
2445
|
+
}
|
|
2446
|
+
}, _callee29, this, [[0, 13]]);
|
|
2447
|
+
}));
|
|
2448
|
+
function updateShopDiscountAsync(_x18) {
|
|
2449
|
+
return _updateShopDiscountAsync.apply(this, arguments);
|
|
2450
|
+
}
|
|
2451
|
+
return updateShopDiscountAsync;
|
|
2452
|
+
}()
|
|
2453
|
+
/**
|
|
2454
|
+
* 更新订单备注
|
|
2455
|
+
*
|
|
2456
|
+
* @param note 订单备注内容
|
|
2457
|
+
*/
|
|
2458
|
+
)
|
|
2459
|
+
}, {
|
|
2460
|
+
key: "updateOrderNoteAsync",
|
|
2461
|
+
value: (function () {
|
|
2462
|
+
var _updateOrderNoteAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee30(note) {
|
|
2463
|
+
var _this$store$currentOr9, _this$store$currentOr10, oldNote, orderInPayment;
|
|
2464
|
+
return _regeneratorRuntime().wrap(function _callee30$(_context30) {
|
|
2465
|
+
while (1) switch (_context30.prev = _context30.next) {
|
|
2466
|
+
case 0:
|
|
2467
|
+
_context30.prev = 0;
|
|
2468
|
+
if (this.store.localOrderData) {
|
|
2469
|
+
_context30.next = 3;
|
|
2470
|
+
break;
|
|
2471
|
+
}
|
|
2472
|
+
throw createCheckoutError(CheckoutErrorType.ValidationFailed, '没有本地订单数据,无法更新备注');
|
|
2473
|
+
case 3:
|
|
2474
|
+
console.log('[Checkout] 更新订单备注:', {
|
|
2475
|
+
orderUuid: (_this$store$currentOr9 = this.store.currentOrder) === null || _this$store$currentOr9 === void 0 ? void 0 : _this$store$currentOr9.uuid,
|
|
2476
|
+
oldNote: this.store.localOrderData.shop_note,
|
|
2477
|
+
newNote: note
|
|
2478
|
+
});
|
|
2479
|
+
|
|
2480
|
+
// 更新备注
|
|
2481
|
+
oldNote = this.store.localOrderData.shop_note;
|
|
2482
|
+
this.store.localOrderData.shop_note = note;
|
|
2483
|
+
|
|
2484
|
+
// 如果有当前订单,也同步到Payment模块中的订单数据
|
|
2485
|
+
if (!this.store.currentOrder) {
|
|
2486
|
+
_context30.next = 17;
|
|
2487
|
+
break;
|
|
2488
|
+
}
|
|
2489
|
+
_context30.prev = 7;
|
|
2490
|
+
_context30.next = 10;
|
|
2491
|
+
return this.payment.getPaymentOrderByUuidAsync(this.store.currentOrder.uuid);
|
|
2492
|
+
case 10:
|
|
2493
|
+
orderInPayment = _context30.sent;
|
|
2494
|
+
if (orderInPayment && orderInPayment.note !== undefined) {
|
|
2495
|
+
// 使用Payment模块的更新方法(如果有的话)
|
|
2496
|
+
// 这里可能需要根据Payment模块的实际API来调整
|
|
2497
|
+
console.log('[Checkout] 同步备注到Payment模块的订单数据中');
|
|
2498
|
+
}
|
|
2499
|
+
_context30.next = 17;
|
|
2500
|
+
break;
|
|
2501
|
+
case 14:
|
|
2502
|
+
_context30.prev = 14;
|
|
2503
|
+
_context30.t0 = _context30["catch"](7);
|
|
2504
|
+
console.warn('[Checkout] 同步备注到Payment模块失败,但本地更新成功:', _context30.t0);
|
|
2505
|
+
case 17:
|
|
2506
|
+
_context30.next = 19;
|
|
2507
|
+
return this.core.effects.emit(CheckoutHooks.OnOrderNoteChanged, {
|
|
2508
|
+
orderUuid: (_this$store$currentOr10 = this.store.currentOrder) === null || _this$store$currentOr10 === void 0 ? void 0 : _this$store$currentOr10.uuid,
|
|
2509
|
+
oldNote: oldNote,
|
|
2510
|
+
newNote: note,
|
|
2511
|
+
timestamp: Date.now()
|
|
2512
|
+
});
|
|
2513
|
+
case 19:
|
|
2514
|
+
console.log('[Checkout] 订单备注更新成功:', {
|
|
2515
|
+
oldNote: oldNote,
|
|
2516
|
+
newNote: note
|
|
2517
|
+
});
|
|
2518
|
+
_context30.next = 28;
|
|
2519
|
+
break;
|
|
2520
|
+
case 22:
|
|
2521
|
+
_context30.prev = 22;
|
|
2522
|
+
_context30.t1 = _context30["catch"](0);
|
|
2523
|
+
console.error('[Checkout] 更新订单备注失败:', _context30.t1);
|
|
2524
|
+
_context30.next = 27;
|
|
2525
|
+
return this.handleError(_context30.t1, CheckoutErrorType.ValidationFailed);
|
|
2526
|
+
case 27:
|
|
2527
|
+
throw _context30.t1;
|
|
2528
|
+
case 28:
|
|
2529
|
+
case "end":
|
|
2530
|
+
return _context30.stop();
|
|
2531
|
+
}
|
|
2532
|
+
}, _callee30, this, [[0, 22], [7, 14]]);
|
|
2533
|
+
}));
|
|
2534
|
+
function updateOrderNoteAsync(_x19) {
|
|
2535
|
+
return _updateOrderNoteAsync.apply(this, arguments);
|
|
2536
|
+
}
|
|
2537
|
+
return updateOrderNoteAsync;
|
|
2538
|
+
}()
|
|
2539
|
+
/**
|
|
2540
|
+
* 设置状态
|
|
2541
|
+
*/
|
|
2542
|
+
)
|
|
2543
|
+
}, {
|
|
2544
|
+
key: "setStatus",
|
|
2545
|
+
value: (function () {
|
|
2546
|
+
var _setStatus = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee31(status) {
|
|
2547
|
+
var oldStatus;
|
|
2548
|
+
return _regeneratorRuntime().wrap(function _callee31$(_context31) {
|
|
2549
|
+
while (1) switch (_context31.prev = _context31.next) {
|
|
2550
|
+
case 0:
|
|
2551
|
+
oldStatus = this.store.status;
|
|
2552
|
+
this.store.status = status;
|
|
2553
|
+
_context31.next = 4;
|
|
2554
|
+
return this.core.effects.emit(CheckoutHooks.OnStatusChanged, {
|
|
2555
|
+
oldStatus: oldStatus,
|
|
2556
|
+
newStatus: status,
|
|
2557
|
+
timestamp: Date.now()
|
|
2558
|
+
});
|
|
2559
|
+
case 4:
|
|
2560
|
+
case "end":
|
|
2561
|
+
return _context31.stop();
|
|
2562
|
+
}
|
|
2563
|
+
}, _callee31, this);
|
|
2564
|
+
}));
|
|
2565
|
+
function setStatus(_x20) {
|
|
2566
|
+
return _setStatus.apply(this, arguments);
|
|
2567
|
+
}
|
|
2568
|
+
return setStatus;
|
|
2569
|
+
}()
|
|
2570
|
+
/**
|
|
2571
|
+
* 设置步骤
|
|
2572
|
+
*/
|
|
2573
|
+
)
|
|
2574
|
+
}, {
|
|
2575
|
+
key: "setStep",
|
|
2576
|
+
value: (function () {
|
|
2577
|
+
var _setStep = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee32(step) {
|
|
2578
|
+
var oldStep;
|
|
2579
|
+
return _regeneratorRuntime().wrap(function _callee32$(_context32) {
|
|
2580
|
+
while (1) switch (_context32.prev = _context32.next) {
|
|
2581
|
+
case 0:
|
|
2582
|
+
oldStep = this.store.step;
|
|
2583
|
+
this.store.step = step;
|
|
2584
|
+
_context32.next = 4;
|
|
2585
|
+
return this.core.effects.emit(CheckoutHooks.OnStepChanged, {
|
|
2586
|
+
oldStep: oldStep,
|
|
2587
|
+
newStep: step,
|
|
2588
|
+
timestamp: Date.now()
|
|
2589
|
+
});
|
|
2590
|
+
case 4:
|
|
2591
|
+
case "end":
|
|
2592
|
+
return _context32.stop();
|
|
2593
|
+
}
|
|
2594
|
+
}, _callee32, this);
|
|
2595
|
+
}));
|
|
2596
|
+
function setStep(_x21) {
|
|
2597
|
+
return _setStep.apply(this, arguments);
|
|
2598
|
+
}
|
|
2599
|
+
return setStep;
|
|
2600
|
+
}()
|
|
2601
|
+
/**
|
|
2602
|
+
* 处理错误
|
|
2603
|
+
*/
|
|
2604
|
+
)
|
|
2605
|
+
}, {
|
|
2606
|
+
key: "handleError",
|
|
2607
|
+
value: (function () {
|
|
2608
|
+
var _handleError = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee33(error, type) {
|
|
2609
|
+
var checkoutError;
|
|
2610
|
+
return _regeneratorRuntime().wrap(function _callee33$(_context33) {
|
|
2611
|
+
while (1) switch (_context33.prev = _context33.next) {
|
|
2612
|
+
case 0:
|
|
2613
|
+
checkoutError = error instanceof Error && 'type' in error ? error : createCheckoutError(type, error.message, error);
|
|
2614
|
+
this.store.lastError = checkoutError;
|
|
2615
|
+
_context33.next = 4;
|
|
2616
|
+
return this.setStatus(CheckoutStatus.Error);
|
|
2617
|
+
case 4:
|
|
2618
|
+
_context33.next = 6;
|
|
2619
|
+
return this.core.effects.emit(CheckoutHooks.OnError, {
|
|
2620
|
+
error: checkoutError,
|
|
2621
|
+
context: {
|
|
2622
|
+
status: this.store.status,
|
|
2623
|
+
step: this.store.step
|
|
2624
|
+
},
|
|
2625
|
+
timestamp: Date.now()
|
|
2626
|
+
});
|
|
2627
|
+
case 6:
|
|
2628
|
+
console.error('[Checkout] 错误:', checkoutError);
|
|
2629
|
+
case 7:
|
|
2630
|
+
case "end":
|
|
2631
|
+
return _context33.stop();
|
|
2632
|
+
}
|
|
2633
|
+
}, _callee33, this);
|
|
2634
|
+
}));
|
|
2635
|
+
function handleError(_x22, _x23) {
|
|
2636
|
+
return _handleError.apply(this, arguments);
|
|
2637
|
+
}
|
|
2638
|
+
return handleError;
|
|
2639
|
+
}()
|
|
2640
|
+
/**
|
|
2641
|
+
* 处理支付成功
|
|
2642
|
+
*/
|
|
2643
|
+
)
|
|
2644
|
+
}, {
|
|
2645
|
+
key: "handlePaymentSuccess",
|
|
2646
|
+
value: (function () {
|
|
2647
|
+
var _handlePaymentSuccess = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee34(data) {
|
|
2648
|
+
var _this$store$currentOr11;
|
|
2649
|
+
return _regeneratorRuntime().wrap(function _callee34$(_context34) {
|
|
2650
|
+
while (1) switch (_context34.prev = _context34.next) {
|
|
2651
|
+
case 0:
|
|
2652
|
+
_context34.next = 2;
|
|
2653
|
+
return this.setStatus(CheckoutStatus.PaymentCompleted);
|
|
2654
|
+
case 2:
|
|
2655
|
+
_context34.next = 4;
|
|
2656
|
+
return this.updateStateAmountToRemaining();
|
|
2657
|
+
case 4:
|
|
2658
|
+
_context34.next = 6;
|
|
2659
|
+
return this.core.effects.emit(CheckoutHooks.OnPaymentSuccess, {
|
|
2660
|
+
orderUuid: data.orderUuid,
|
|
2661
|
+
paymentMethodCode: '',
|
|
2662
|
+
amount: ((_this$store$currentOr11 = this.store.currentOrder) === null || _this$store$currentOr11 === void 0 ? void 0 : _this$store$currentOr11.total_amount) || '0',
|
|
2663
|
+
timestamp: data.timestamp
|
|
2664
|
+
});
|
|
2665
|
+
case 6:
|
|
2666
|
+
_context34.next = 8;
|
|
2667
|
+
return this.completeCheckoutAsync();
|
|
2668
|
+
case 8:
|
|
2669
|
+
case "end":
|
|
2670
|
+
return _context34.stop();
|
|
2671
|
+
}
|
|
2672
|
+
}, _callee34, this);
|
|
2673
|
+
}));
|
|
2674
|
+
function handlePaymentSuccess(_x24) {
|
|
2675
|
+
return _handlePaymentSuccess.apply(this, arguments);
|
|
2676
|
+
}
|
|
2677
|
+
return handlePaymentSuccess;
|
|
2678
|
+
}()
|
|
2679
|
+
/**
|
|
2680
|
+
* 处理支付错误
|
|
2681
|
+
*/
|
|
2682
|
+
)
|
|
2683
|
+
}, {
|
|
2684
|
+
key: "handlePaymentError",
|
|
2685
|
+
value: (function () {
|
|
2686
|
+
var _handlePaymentError = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee35(data) {
|
|
2687
|
+
var _this$store$currentOr12;
|
|
2688
|
+
var error;
|
|
2689
|
+
return _regeneratorRuntime().wrap(function _callee35$(_context35) {
|
|
2690
|
+
while (1) switch (_context35.prev = _context35.next) {
|
|
2691
|
+
case 0:
|
|
2692
|
+
error = createCheckoutError(CheckoutErrorType.PaymentFailed, data.error || '支付同步失败');
|
|
2693
|
+
_context35.next = 3;
|
|
2694
|
+
return this.handleError(error instanceof Error ? error : new Error(String(error)), CheckoutErrorType.PaymentFailed);
|
|
2695
|
+
case 3:
|
|
2696
|
+
_context35.next = 5;
|
|
2697
|
+
return this.core.effects.emit(CheckoutHooks.OnPaymentFailed, {
|
|
2698
|
+
orderUuid: data.orderUuid,
|
|
2699
|
+
paymentMethodCode: '',
|
|
2700
|
+
amount: ((_this$store$currentOr12 = this.store.currentOrder) === null || _this$store$currentOr12 === void 0 ? void 0 : _this$store$currentOr12.total_amount) || '0',
|
|
2701
|
+
timestamp: data.timestamp
|
|
2702
|
+
});
|
|
2703
|
+
case 5:
|
|
2704
|
+
case "end":
|
|
2705
|
+
return _context35.stop();
|
|
2706
|
+
}
|
|
2707
|
+
}, _callee35, this);
|
|
2708
|
+
}));
|
|
2709
|
+
function handlePaymentError(_x25) {
|
|
2710
|
+
return _handlePaymentError.apply(this, arguments);
|
|
2711
|
+
}
|
|
2712
|
+
return handlePaymentError;
|
|
2713
|
+
}()
|
|
2714
|
+
/**
|
|
2715
|
+
* 验证结账参数
|
|
2716
|
+
*/
|
|
2717
|
+
)
|
|
2718
|
+
}, {
|
|
2719
|
+
key: "validateCheckoutParams",
|
|
2720
|
+
value: (function () {
|
|
2721
|
+
var _validateCheckoutParams = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee36(params) {
|
|
2722
|
+
return _regeneratorRuntime().wrap(function _callee36$(_context36) {
|
|
2723
|
+
while (1) switch (_context36.prev = _context36.next) {
|
|
2724
|
+
case 0:
|
|
2725
|
+
return _context36.abrupt("return", validateCheckoutData(params));
|
|
2726
|
+
case 1:
|
|
2727
|
+
case "end":
|
|
2728
|
+
return _context36.stop();
|
|
2729
|
+
}
|
|
2730
|
+
}, _callee36);
|
|
2731
|
+
}));
|
|
2732
|
+
function validateCheckoutParams(_x26) {
|
|
2733
|
+
return _validateCheckoutParams.apply(this, arguments);
|
|
2734
|
+
}
|
|
2735
|
+
return validateCheckoutParams;
|
|
2736
|
+
}()
|
|
2737
|
+
/**
|
|
2738
|
+
* 验证本地订单数据
|
|
2739
|
+
*/
|
|
2740
|
+
)
|
|
2741
|
+
}, {
|
|
2742
|
+
key: "validateLocalOrderData",
|
|
2743
|
+
value: (function () {
|
|
2744
|
+
var _validateLocalOrderData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee37(orderData) {
|
|
2745
|
+
var errors;
|
|
2746
|
+
return _regeneratorRuntime().wrap(function _callee37$(_context37) {
|
|
2747
|
+
while (1) switch (_context37.prev = _context37.next) {
|
|
2748
|
+
case 0:
|
|
2749
|
+
errors = []; // 验证基本字段
|
|
2750
|
+
if (!orderData.type) {
|
|
2751
|
+
errors.push('订单类型不能为空');
|
|
2752
|
+
}
|
|
2753
|
+
if (!orderData.platform) {
|
|
2754
|
+
errors.push('平台信息不能为空');
|
|
2755
|
+
}
|
|
2756
|
+
if (!orderData.bookings || orderData.bookings.length === 0) {
|
|
2757
|
+
errors.push('预订信息不能为空');
|
|
2758
|
+
}
|
|
2759
|
+
|
|
2760
|
+
// 验证预订信息
|
|
2761
|
+
if (orderData.bookings) {
|
|
2762
|
+
orderData.bookings.forEach(function (booking, index) {
|
|
2763
|
+
if (!booking.product || !booking.product.product_id) {
|
|
2764
|
+
errors.push("\u9884\u8BA2\u9879 ".concat(index + 1, " \u7F3A\u5C11\u5546\u54C1\u4FE1\u606F"));
|
|
2765
|
+
}
|
|
2766
|
+
if (!booking.start_date) {
|
|
2767
|
+
errors.push("\u9884\u8BA2\u9879 ".concat(index + 1, " \u7F3A\u5C11\u5F00\u59CB\u65E5\u671F"));
|
|
2768
|
+
}
|
|
2769
|
+
if (!booking.start_time) {
|
|
2770
|
+
errors.push("\u9884\u8BA2\u9879 ".concat(index + 1, " \u7F3A\u5C11\u5F00\u59CB\u65F6\u95F4"));
|
|
2771
|
+
}
|
|
2772
|
+
});
|
|
2773
|
+
}
|
|
2774
|
+
return _context37.abrupt("return", {
|
|
2775
|
+
valid: errors.length === 0,
|
|
2776
|
+
errors: errors
|
|
2777
|
+
});
|
|
2778
|
+
case 6:
|
|
2779
|
+
case "end":
|
|
2780
|
+
return _context37.stop();
|
|
2781
|
+
}
|
|
2782
|
+
}, _callee37);
|
|
2783
|
+
}));
|
|
2784
|
+
function validateLocalOrderData(_x27) {
|
|
2785
|
+
return _validateLocalOrderData.apply(this, arguments);
|
|
2786
|
+
}
|
|
2787
|
+
return validateLocalOrderData;
|
|
2788
|
+
}()
|
|
2789
|
+
/**
|
|
2790
|
+
* 生成本地订单ID
|
|
2791
|
+
*/
|
|
2792
|
+
)
|
|
2793
|
+
}, {
|
|
2794
|
+
key: "generateLocalOrderId",
|
|
2795
|
+
value: function generateLocalOrderId() {
|
|
2796
|
+
var timestamp = Date.now();
|
|
2797
|
+
var random = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
|
|
2798
|
+
return "local_order_".concat(timestamp, "_").concat(random);
|
|
2799
|
+
}
|
|
2800
|
+
|
|
2801
|
+
/**
|
|
2802
|
+
* 格式化日期时间为 YYYY-MM-DD hh:mm:ss 格式
|
|
2803
|
+
*
|
|
2804
|
+
* @param date 要格式化的日期对象
|
|
2805
|
+
* @returns 格式化后的日期时间字符串
|
|
2806
|
+
*/
|
|
2807
|
+
}, {
|
|
2808
|
+
key: "formatDateTime",
|
|
2809
|
+
value: function formatDateTime(date) {
|
|
2810
|
+
var year = date.getFullYear();
|
|
2811
|
+
var month = String(date.getMonth() + 1).padStart(2, '0');
|
|
2812
|
+
var day = String(date.getDate()).padStart(2, '0');
|
|
2813
|
+
var hours = String(date.getHours()).padStart(2, '0');
|
|
2814
|
+
var minutes = String(date.getMinutes()).padStart(2, '0');
|
|
2815
|
+
var seconds = String(date.getSeconds()).padStart(2, '0');
|
|
2816
|
+
return "".concat(year, "-").concat(month, "-").concat(day, " ").concat(hours, ":").concat(minutes, ":").concat(seconds);
|
|
2817
|
+
}
|
|
2818
|
+
|
|
2819
|
+
/**
|
|
2820
|
+
* 从购物车小计数据中提取金额信息
|
|
2821
|
+
*/
|
|
2822
|
+
}, {
|
|
2823
|
+
key: "extractAmountFromCartSummary",
|
|
2824
|
+
value: function extractAmountFromCartSummary(cartSummary) {
|
|
2825
|
+
var result = {
|
|
2826
|
+
totalAmount: '0.00',
|
|
2827
|
+
subTotal: '0.00',
|
|
2828
|
+
taxAmount: '0.00',
|
|
2829
|
+
discountAmount: '0.00',
|
|
2830
|
+
shopDiscountAmount: '0.00',
|
|
2831
|
+
roundingAmount: '0.00'
|
|
2832
|
+
};
|
|
2833
|
+
cartSummary.forEach(function (item) {
|
|
2834
|
+
var value = Number(item.value).toFixed(2);
|
|
2835
|
+
switch (item.key) {
|
|
2836
|
+
case 'expect_amount':
|
|
2837
|
+
result.totalAmount = value;
|
|
2838
|
+
break;
|
|
2839
|
+
case 'sub_total':
|
|
2840
|
+
result.subTotal = value;
|
|
2841
|
+
break;
|
|
2842
|
+
case 'tax':
|
|
2843
|
+
result.taxAmount = value;
|
|
2844
|
+
if (item.tax) {
|
|
2845
|
+
result.taxDetails = item.tax;
|
|
2846
|
+
}
|
|
2847
|
+
break;
|
|
2848
|
+
case 'discount':
|
|
2849
|
+
result.discountAmount = value;
|
|
2850
|
+
break;
|
|
2851
|
+
case 'shop_discount':
|
|
2852
|
+
result.shopDiscountAmount = value;
|
|
2853
|
+
break;
|
|
2854
|
+
case 'custom_roundingAmount':
|
|
2855
|
+
result.roundingAmount = value;
|
|
2856
|
+
break;
|
|
2857
|
+
default:
|
|
2858
|
+
// 处理其他可能的键,如定金等
|
|
2859
|
+
if (item.key.includes('deposit')) {
|
|
2860
|
+
result.depositAmount = value;
|
|
2861
|
+
}
|
|
2862
|
+
break;
|
|
2863
|
+
}
|
|
2864
|
+
});
|
|
2865
|
+
console.log('[Checkout] 从购物车小计提取金额信息:', {
|
|
2866
|
+
totalAmount: result.totalAmount,
|
|
2867
|
+
subTotal: result.subTotal,
|
|
2868
|
+
taxAmount: result.taxAmount,
|
|
2869
|
+
discountAmount: result.discountAmount,
|
|
2870
|
+
shopDiscountAmount: result.shopDiscountAmount,
|
|
2871
|
+
roundingAmount: result.roundingAmount
|
|
2872
|
+
});
|
|
2873
|
+
return result;
|
|
2874
|
+
}
|
|
2875
|
+
|
|
2876
|
+
/**
|
|
2877
|
+
* 预加载支付方式(在初始化时调用)
|
|
2878
|
+
*/
|
|
2879
|
+
}, {
|
|
2880
|
+
key: "preloadPaymentMethods",
|
|
2881
|
+
value: (function () {
|
|
2882
|
+
var _preloadPaymentMethods = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee38() {
|
|
2883
|
+
var methods;
|
|
2884
|
+
return _regeneratorRuntime().wrap(function _callee38$(_context38) {
|
|
2885
|
+
while (1) switch (_context38.prev = _context38.next) {
|
|
2886
|
+
case 0:
|
|
2887
|
+
_context38.prev = 0;
|
|
2888
|
+
console.log('[Checkout] 预加载支付方式...');
|
|
2889
|
+
_context38.next = 4;
|
|
2890
|
+
return this.payment.getPayMethodListAsync();
|
|
2891
|
+
case 4:
|
|
2892
|
+
methods = _context38.sent;
|
|
2893
|
+
this.store.paymentMethods = methods;
|
|
2894
|
+
console.log("[Checkout] \u9884\u52A0\u8F7D\u5B8C\u6210\uFF0C\u5171 ".concat(methods.length, " \u79CD\u652F\u4ED8\u65B9\u5F0F"));
|
|
2895
|
+
_context38.next = 13;
|
|
2896
|
+
break;
|
|
2897
|
+
case 9:
|
|
2898
|
+
_context38.prev = 9;
|
|
2899
|
+
_context38.t0 = _context38["catch"](0);
|
|
2900
|
+
console.error('[Checkout] 预加载支付方式失败:', _context38.t0);
|
|
2901
|
+
this.store.paymentMethods = [];
|
|
2902
|
+
case 13:
|
|
2903
|
+
case "end":
|
|
2904
|
+
return _context38.stop();
|
|
2905
|
+
}
|
|
2906
|
+
}, _callee38, this, [[0, 9]]);
|
|
2907
|
+
}));
|
|
2908
|
+
function preloadPaymentMethods() {
|
|
2909
|
+
return _preloadPaymentMethods.apply(this, arguments);
|
|
2910
|
+
}
|
|
2911
|
+
return preloadPaymentMethods;
|
|
2912
|
+
}()
|
|
2913
|
+
/**
|
|
2914
|
+
* 计算总金额
|
|
2915
|
+
*/
|
|
2916
|
+
)
|
|
2917
|
+
}, {
|
|
2918
|
+
key: "calculateTotalAmount",
|
|
2919
|
+
value: function calculateTotalAmount(cartItems) {
|
|
2920
|
+
var total = cartItems.reduce(function (sum, item) {
|
|
2921
|
+
var price = parseFloat(String(item.price) || '0');
|
|
2922
|
+
var quantity = item.quantity || 1;
|
|
2923
|
+
return sum + price * quantity;
|
|
2924
|
+
}, 0);
|
|
2925
|
+
return total.toFixed(2);
|
|
2926
|
+
}
|
|
2927
|
+
|
|
2928
|
+
/**
|
|
2929
|
+
* 计算已支付金额
|
|
2930
|
+
*/
|
|
2931
|
+
}, {
|
|
2932
|
+
key: "calculatePaidAmount",
|
|
2933
|
+
value: function calculatePaidAmount() {
|
|
2934
|
+
if (!this.store.currentOrder) {
|
|
2935
|
+
console.log('[Checkout] calculatePaidAmount: 没有当前订单');
|
|
2936
|
+
return '0.00';
|
|
2937
|
+
}
|
|
2938
|
+
var payments = this.store.currentOrder.payment || [];
|
|
2939
|
+
console.log('[Checkout] calculatePaidAmount: 支付项详情:', {
|
|
2940
|
+
paymentCount: payments.length,
|
|
2941
|
+
payments: payments.map(function (p) {
|
|
2942
|
+
return {
|
|
2943
|
+
uuid: p.uuid,
|
|
2944
|
+
amount: p.amount,
|
|
2945
|
+
code: p.code,
|
|
2946
|
+
status: p.status
|
|
2947
|
+
};
|
|
2948
|
+
})
|
|
2949
|
+
});
|
|
2950
|
+
var paidAmount = payments.filter(function (payment) {
|
|
2951
|
+
return payment.status !== 'voided';
|
|
2952
|
+
}) // 只计算未撤销的支付项
|
|
2953
|
+
.reduce(function (sum, payment) {
|
|
2954
|
+
var amount = parseFloat(payment.amount || '0');
|
|
2955
|
+
console.log("[Checkout] \u8BA1\u7B97\u652F\u4ED8\u9879: ".concat(payment.code, " = ").concat(amount));
|
|
2956
|
+
return sum + amount;
|
|
2957
|
+
}, 0);
|
|
2958
|
+
var result = paidAmount.toFixed(2);
|
|
2959
|
+
console.log('[Checkout] calculatePaidAmount: 计算结果 =', result);
|
|
2960
|
+
return result;
|
|
2961
|
+
}
|
|
2962
|
+
|
|
2963
|
+
/**
|
|
2964
|
+
* 计算剩余未支付金额
|
|
2965
|
+
*/
|
|
2966
|
+
}, {
|
|
2967
|
+
key: "calculateRemainingAmount",
|
|
2968
|
+
value: function calculateRemainingAmount() {
|
|
2969
|
+
if (!this.store.currentOrder) {
|
|
2970
|
+
console.log('[Checkout] calculateRemainingAmount: 没有当前订单');
|
|
2971
|
+
return '0.00';
|
|
2972
|
+
}
|
|
2973
|
+
var totalAmount = parseFloat(this.store.currentOrder.total_amount || '0');
|
|
2974
|
+
var paidAmount = parseFloat(this.calculatePaidAmount());
|
|
2975
|
+
var remainingAmount = totalAmount - paidAmount;
|
|
2976
|
+
var result = Math.max(0, remainingAmount).toFixed(2);
|
|
2977
|
+
console.log('[Checkout] calculateRemainingAmount: 计算详情:', {
|
|
2978
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
2979
|
+
totalAmount: totalAmount.toFixed(2),
|
|
2980
|
+
paidAmount: paidAmount.toFixed(2),
|
|
2981
|
+
calculatedRemaining: remainingAmount.toFixed(2),
|
|
2982
|
+
finalResult: result
|
|
2983
|
+
});
|
|
2984
|
+
return result;
|
|
2985
|
+
}
|
|
2986
|
+
|
|
2987
|
+
/**
|
|
2988
|
+
* 更新 stateAmount 为当前剩余未支付金额
|
|
2989
|
+
*/
|
|
2990
|
+
}, {
|
|
2991
|
+
key: "updateStateAmountToRemaining",
|
|
2992
|
+
value: (function () {
|
|
2993
|
+
var _updateStateAmountToRemaining = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee39() {
|
|
2994
|
+
var _this$store$currentOr13, remainingAmount, currentStateAmount;
|
|
2995
|
+
return _regeneratorRuntime().wrap(function _callee39$(_context39) {
|
|
2996
|
+
while (1) switch (_context39.prev = _context39.next) {
|
|
2997
|
+
case 0:
|
|
2998
|
+
_context39.prev = 0;
|
|
2999
|
+
remainingAmount = this.calculateRemainingAmount();
|
|
3000
|
+
currentStateAmount = this.store.stateAmount;
|
|
3001
|
+
console.log('[Checkout] updateStateAmountToRemaining: 状态检查:', {
|
|
3002
|
+
calculatedRemainingAmount: remainingAmount,
|
|
3003
|
+
currentStateAmount: currentStateAmount,
|
|
3004
|
+
needsUpdate: remainingAmount !== currentStateAmount,
|
|
3005
|
+
orderUuid: (_this$store$currentOr13 = this.store.currentOrder) === null || _this$store$currentOr13 === void 0 ? void 0 : _this$store$currentOr13.uuid
|
|
3006
|
+
});
|
|
3007
|
+
|
|
3008
|
+
// 只有当剩余金额与当前 stateAmount 不同时才更新
|
|
3009
|
+
if (!(remainingAmount !== currentStateAmount)) {
|
|
3010
|
+
_context39.next = 11;
|
|
3011
|
+
break;
|
|
3012
|
+
}
|
|
3013
|
+
this.store.stateAmount = remainingAmount;
|
|
3014
|
+
|
|
3015
|
+
// 发出 stateAmount 变更事件
|
|
3016
|
+
_context39.next = 8;
|
|
3017
|
+
return this.core.effects.emit(CheckoutHooks.OnStateAmountChanged, {
|
|
3018
|
+
oldAmount: currentStateAmount,
|
|
3019
|
+
newAmount: remainingAmount,
|
|
3020
|
+
timestamp: Date.now()
|
|
3021
|
+
});
|
|
3022
|
+
case 8:
|
|
3023
|
+
console.log('[Checkout] stateAmount 已自动更新为剩余金额:', {
|
|
3024
|
+
oldAmount: currentStateAmount,
|
|
3025
|
+
newAmount: remainingAmount
|
|
3026
|
+
});
|
|
3027
|
+
_context39.next = 12;
|
|
3028
|
+
break;
|
|
3029
|
+
case 11:
|
|
3030
|
+
console.log('[Checkout] stateAmount 无需更新,当前值已是最新:', {
|
|
3031
|
+
stateAmount: currentStateAmount,
|
|
3032
|
+
remainingAmount: remainingAmount
|
|
3033
|
+
});
|
|
3034
|
+
case 12:
|
|
3035
|
+
_context39.next = 14;
|
|
3036
|
+
return this.checkOrderPaymentCompletion();
|
|
3037
|
+
case 14:
|
|
3038
|
+
_context39.next = 19;
|
|
3039
|
+
break;
|
|
3040
|
+
case 16:
|
|
3041
|
+
_context39.prev = 16;
|
|
3042
|
+
_context39.t0 = _context39["catch"](0);
|
|
3043
|
+
console.error('[Checkout] 更新 stateAmount 为剩余金额失败:', _context39.t0);
|
|
3044
|
+
case 19:
|
|
3045
|
+
case "end":
|
|
3046
|
+
return _context39.stop();
|
|
3047
|
+
}
|
|
3048
|
+
}, _callee39, this, [[0, 16]]);
|
|
3049
|
+
}));
|
|
3050
|
+
function updateStateAmountToRemaining() {
|
|
3051
|
+
return _updateStateAmountToRemaining.apply(this, arguments);
|
|
3052
|
+
}
|
|
3053
|
+
return updateStateAmountToRemaining;
|
|
3054
|
+
}()
|
|
3055
|
+
/**
|
|
3056
|
+
* 检查订单支付是否完成
|
|
3057
|
+
*
|
|
3058
|
+
* 当剩余待付款金额 <= 0 时,触发订单支付完成事件
|
|
3059
|
+
*/
|
|
3060
|
+
)
|
|
3061
|
+
}, {
|
|
3062
|
+
key: "checkOrderPaymentCompletion",
|
|
3063
|
+
value: (function () {
|
|
3064
|
+
var _checkOrderPaymentCompletion = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee40() {
|
|
3065
|
+
var remainingAmount, remainingValue, _this$store$currentOr14, _this$store$currentOr15, totalAmount, paidAmount, allPaymentsHaveVoucherId;
|
|
3066
|
+
return _regeneratorRuntime().wrap(function _callee40$(_context40) {
|
|
3067
|
+
while (1) switch (_context40.prev = _context40.next) {
|
|
3068
|
+
case 0:
|
|
3069
|
+
_context40.prev = 0;
|
|
3070
|
+
if (this.store.currentOrder) {
|
|
3071
|
+
_context40.next = 3;
|
|
3072
|
+
break;
|
|
3073
|
+
}
|
|
3074
|
+
return _context40.abrupt("return");
|
|
3075
|
+
case 3:
|
|
3076
|
+
remainingAmount = this.calculateRemainingAmount();
|
|
3077
|
+
remainingValue = parseFloat(remainingAmount); // 当剩余金额小于等于0时,认为订单已完成支付
|
|
3078
|
+
if (!(remainingValue <= 0)) {
|
|
3079
|
+
_context40.next = 21;
|
|
3080
|
+
break;
|
|
3081
|
+
}
|
|
3082
|
+
totalAmount = this.store.currentOrder.total_amount;
|
|
3083
|
+
paidAmount = this.calculatePaidAmount();
|
|
3084
|
+
console.log('[Checkout] 检测到订单支付完成:', {
|
|
3085
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
3086
|
+
orderId: this.store.currentOrder.order_id,
|
|
3087
|
+
totalAmount: totalAmount,
|
|
3088
|
+
paidAmount: paidAmount,
|
|
3089
|
+
remainingAmount: remainingAmount,
|
|
3090
|
+
isOrderSynced: this.store.isOrderSynced
|
|
3091
|
+
});
|
|
3092
|
+
|
|
3093
|
+
// 检查是否所有支付项都带有 voucher_id
|
|
3094
|
+
allPaymentsHaveVoucherId = this.store.currentOrder.payment && this.store.currentOrder.payment.length > 0 && this.store.currentOrder.payment.every(function (item) {
|
|
3095
|
+
return item.status !== 'voided' && item.voucher_id;
|
|
3096
|
+
});
|
|
3097
|
+
console.log('[Checkout] 支付项voucher_id检查:', {
|
|
3098
|
+
paymentCount: ((_this$store$currentOr14 = this.store.currentOrder.payment) === null || _this$store$currentOr14 === void 0 ? void 0 : _this$store$currentOr14.length) || 0,
|
|
3099
|
+
allHaveVoucherId: allPaymentsHaveVoucherId,
|
|
3100
|
+
paymentItems: (_this$store$currentOr15 = this.store.currentOrder.payment) === null || _this$store$currentOr15 === void 0 ? void 0 : _this$store$currentOr15.map(function (p) {
|
|
3101
|
+
return {
|
|
3102
|
+
uuid: p.uuid,
|
|
3103
|
+
code: p.code,
|
|
3104
|
+
amount: p.amount,
|
|
3105
|
+
voucher_id: p.voucher_id,
|
|
3106
|
+
status: p.status
|
|
3107
|
+
};
|
|
3108
|
+
})
|
|
3109
|
+
});
|
|
3110
|
+
|
|
3111
|
+
// 如果支付完成但订单未同步,需要判断是否同步
|
|
3112
|
+
if (this.store.isOrderSynced) {
|
|
3113
|
+
_context40.next = 19;
|
|
3114
|
+
break;
|
|
3115
|
+
}
|
|
3116
|
+
if (!allPaymentsHaveVoucherId) {
|
|
3117
|
+
_context40.next = 16;
|
|
3118
|
+
break;
|
|
3119
|
+
}
|
|
3120
|
+
console.log('[Checkout] 所有支付项均为代金券类型,跳过订单同步');
|
|
3121
|
+
_context40.next = 19;
|
|
3122
|
+
break;
|
|
3123
|
+
case 16:
|
|
3124
|
+
console.log('[Checkout] 支付完成但订单未同步,开始同步订单到后端...');
|
|
3125
|
+
_context40.next = 19;
|
|
3126
|
+
return this.syncOrderToBackend();
|
|
3127
|
+
case 19:
|
|
3128
|
+
_context40.next = 21;
|
|
3129
|
+
return this.core.effects.emit(CheckoutHooks.OnOrderPaymentCompleted, {
|
|
3130
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
3131
|
+
orderId: this.store.currentOrder.order_id,
|
|
3132
|
+
totalAmount: totalAmount,
|
|
3133
|
+
paidAmount: paidAmount,
|
|
3134
|
+
remainingAmount: remainingAmount,
|
|
3135
|
+
timestamp: Date.now()
|
|
3136
|
+
});
|
|
3137
|
+
case 21:
|
|
3138
|
+
_context40.next = 26;
|
|
3139
|
+
break;
|
|
3140
|
+
case 23:
|
|
3141
|
+
_context40.prev = 23;
|
|
3142
|
+
_context40.t0 = _context40["catch"](0);
|
|
3143
|
+
console.error('[Checkout] 检查订单支付完成状态失败:', _context40.t0);
|
|
3144
|
+
case 26:
|
|
3145
|
+
case "end":
|
|
3146
|
+
return _context40.stop();
|
|
3147
|
+
}
|
|
3148
|
+
}, _callee40, this, [[0, 23]]);
|
|
3149
|
+
}));
|
|
3150
|
+
function checkOrderPaymentCompletion() {
|
|
3151
|
+
return _checkOrderPaymentCompletion.apply(this, arguments);
|
|
3152
|
+
}
|
|
3153
|
+
return checkOrderPaymentCompletion;
|
|
3154
|
+
}()
|
|
3155
|
+
/**
|
|
3156
|
+
* 判断支付方式是否需要同步订单到后端
|
|
3157
|
+
*
|
|
3158
|
+
* 现金支付(CASHMANUAL)和自定义支付不需要同步,其他支付方式需要同步
|
|
3159
|
+
*
|
|
3160
|
+
* @param paymentCode 支付方式代码
|
|
3161
|
+
* @param paymentType 支付方式类型
|
|
3162
|
+
* @returns 是否需要同步订单
|
|
3163
|
+
*/
|
|
3164
|
+
)
|
|
3165
|
+
}, {
|
|
3166
|
+
key: "shouldSyncOrderForPayment",
|
|
3167
|
+
value: function shouldSyncOrderForPayment(paymentCode, paymentType) {
|
|
3168
|
+
var codeUpper = (paymentCode === null || paymentCode === void 0 ? void 0 : paymentCode.toUpperCase()) || '';
|
|
3169
|
+
var typeUpper = (paymentType === null || paymentType === void 0 ? void 0 : paymentType.toUpperCase()) || '';
|
|
3170
|
+
|
|
3171
|
+
// 现金支付不需要同步 - 支持多种现金支付识别方式
|
|
3172
|
+
var cashIdentifiers = ['CASHMANUAL', 'CASH', 'MANUAL'];
|
|
3173
|
+
if (cashIdentifiers.some(function (id) {
|
|
3174
|
+
return codeUpper.includes(id) || typeUpper.includes(id);
|
|
3175
|
+
})) {
|
|
3176
|
+
return false;
|
|
3177
|
+
}
|
|
3178
|
+
|
|
3179
|
+
// 标准现金支付代码检查
|
|
3180
|
+
if (paymentCode === PaymentMethodType.Cash || paymentType === PaymentMethodType.Cash) {
|
|
3181
|
+
return false;
|
|
3182
|
+
}
|
|
3183
|
+
|
|
3184
|
+
// 自定义支付不需要同步
|
|
3185
|
+
if (codeUpper.includes('CUSTOM') || typeUpper.includes('CUSTOM')) {
|
|
3186
|
+
return false;
|
|
3187
|
+
}
|
|
3188
|
+
|
|
3189
|
+
// 其他支付方式都需要同步
|
|
3190
|
+
return true;
|
|
3191
|
+
}
|
|
3192
|
+
|
|
3193
|
+
/**
|
|
3194
|
+
* 同步订单到后端
|
|
3195
|
+
*
|
|
3196
|
+
* 调用后端 /order/checkout 接口创建真实订单
|
|
3197
|
+
*/
|
|
3198
|
+
/**
|
|
3199
|
+
* 判断订单ID是否为本地生成的虚拟ID
|
|
3200
|
+
*
|
|
3201
|
+
* @param orderId 订单ID
|
|
3202
|
+
* @returns true 表示是虚拟ID,false 表示是真实的后端ID
|
|
3203
|
+
*/
|
|
3204
|
+
}, {
|
|
3205
|
+
key: "isVirtualOrderId",
|
|
3206
|
+
value: function isVirtualOrderId(orderId) {
|
|
3207
|
+
return orderId.startsWith('local_order_');
|
|
3208
|
+
}
|
|
3209
|
+
|
|
3210
|
+
/**
|
|
3211
|
+
* 同步订单到后端并返回真实订单ID
|
|
3212
|
+
*
|
|
3213
|
+
* @param isManual 是否为手动同步,默认为 false
|
|
3214
|
+
* @param customPaymentItems 自定义支付项列表,如果提供则使用此列表而不是从数据库获取
|
|
3215
|
+
* @returns 后端返回的真实订单ID
|
|
3216
|
+
*/
|
|
3217
|
+
}, {
|
|
3218
|
+
key: "syncOrderToBackendWithReturn",
|
|
3219
|
+
value: (function () {
|
|
3220
|
+
var _syncOrderToBackendWithReturn = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee41() {
|
|
3221
|
+
var _this$store$currentCu2, _this$store$currentOr16, _this$store$currentOr17;
|
|
3222
|
+
var isManual,
|
|
3223
|
+
customPaymentItems,
|
|
3224
|
+
syncType,
|
|
3225
|
+
currentOrderId,
|
|
3226
|
+
hasRealOrderId,
|
|
3227
|
+
isUpdateOperation,
|
|
3228
|
+
reason,
|
|
3229
|
+
operation,
|
|
3230
|
+
paymentItems,
|
|
3231
|
+
orderParams,
|
|
3232
|
+
checkoutResponse,
|
|
3233
|
+
realOrderId,
|
|
3234
|
+
_data3,
|
|
3235
|
+
extractedOrderId,
|
|
3236
|
+
updatedOrder,
|
|
3237
|
+
beforeManualUpdate,
|
|
3238
|
+
finalOrderId,
|
|
3239
|
+
finalIsVirtual,
|
|
3240
|
+
_args41 = arguments;
|
|
3241
|
+
return _regeneratorRuntime().wrap(function _callee41$(_context41) {
|
|
3242
|
+
while (1) switch (_context41.prev = _context41.next) {
|
|
3243
|
+
case 0:
|
|
3244
|
+
isManual = _args41.length > 0 && _args41[0] !== undefined ? _args41[0] : false;
|
|
3245
|
+
customPaymentItems = _args41.length > 1 ? _args41[1] : undefined;
|
|
3246
|
+
if (!(!this.store.localOrderData || !this.store.currentOrder)) {
|
|
3247
|
+
_context41.next = 4;
|
|
3248
|
+
break;
|
|
3249
|
+
}
|
|
3250
|
+
throw new Error('缺少必要的订单数据,无法同步到后端');
|
|
3251
|
+
case 4:
|
|
3252
|
+
syncType = isManual ? '手动' : '自动'; // 判断是创建订单还是更新订单
|
|
3253
|
+
currentOrderId = this.store.currentOrder.order_id;
|
|
3254
|
+
hasRealOrderId = currentOrderId && !this.isVirtualOrderId(currentOrderId); // 更准确的判断:优先考虑同步状态
|
|
3255
|
+
// 1. 如果订单已经同步过,无论订单ID是什么,都应该是更新操作(防止ID被意外重置)
|
|
3256
|
+
// 2. 如果订单未同步但有真实订单ID,也认为是更新操作
|
|
3257
|
+
// 3. 其他情况都是创建操作
|
|
3258
|
+
isUpdateOperation = false;
|
|
3259
|
+
reason = '';
|
|
3260
|
+
if (this.store.isOrderSynced) {
|
|
3261
|
+
isUpdateOperation = true;
|
|
3262
|
+
reason = '订单已同步过';
|
|
3263
|
+
} else if (hasRealOrderId) {
|
|
3264
|
+
isUpdateOperation = true;
|
|
3265
|
+
reason = '有真实订单ID';
|
|
3266
|
+
} else {
|
|
3267
|
+
isUpdateOperation = false;
|
|
3268
|
+
reason = '既未同步也无真实ID';
|
|
3269
|
+
}
|
|
3270
|
+
operation = isUpdateOperation ? '更新' : '创建';
|
|
3271
|
+
console.log('[Checkout] 操作类型判断详情:', {
|
|
3272
|
+
currentOrderId: currentOrderId,
|
|
3273
|
+
hasRealOrderId: hasRealOrderId,
|
|
3274
|
+
isOrderSynced: this.store.isOrderSynced,
|
|
3275
|
+
isManual: isManual,
|
|
3276
|
+
reason: reason,
|
|
3277
|
+
finalDecision: operation
|
|
3278
|
+
});
|
|
3279
|
+
console.log("[Checkout] \u5F00\u59CB".concat(syncType).concat(operation, "\u8BA2\u5355\u5230\u540E\u7AEF..."), {
|
|
3280
|
+
currentOrderId: currentOrderId,
|
|
3281
|
+
isVirtualId: this.isVirtualOrderId(currentOrderId || ''),
|
|
3282
|
+
operation: operation,
|
|
3283
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
3284
|
+
isOrderSynced: this.store.isOrderSynced
|
|
3285
|
+
});
|
|
3286
|
+
|
|
3287
|
+
// 获取当前订单的支付项
|
|
3288
|
+
_context41.t0 = customPaymentItems;
|
|
3289
|
+
if (_context41.t0) {
|
|
3290
|
+
_context41.next = 18;
|
|
3291
|
+
break;
|
|
3292
|
+
}
|
|
3293
|
+
_context41.next = 17;
|
|
3294
|
+
return this.payment.getPaymentItemsAsync(this.store.currentOrder.uuid);
|
|
3295
|
+
case 17:
|
|
3296
|
+
_context41.t0 = _context41.sent;
|
|
3297
|
+
case 18:
|
|
3298
|
+
paymentItems = _context41.t0;
|
|
3299
|
+
console.log('[Checkout] 获取到支付项:', {
|
|
3300
|
+
count: paymentItems.length,
|
|
3301
|
+
isCustomFiltered: !!customPaymentItems,
|
|
3302
|
+
methods: paymentItems.map(function (p) {
|
|
3303
|
+
return p.code;
|
|
3304
|
+
}),
|
|
3305
|
+
totalAmount: paymentItems.reduce(function (sum, p) {
|
|
3306
|
+
return sum + parseFloat(p.amount);
|
|
3307
|
+
}, 0).toFixed(2),
|
|
3308
|
+
paymentDetails: paymentItems.map(function (p) {
|
|
3309
|
+
var _p$metadata;
|
|
3310
|
+
return {
|
|
3311
|
+
uuid: p.uuid,
|
|
3312
|
+
code: p.code,
|
|
3313
|
+
amount: p.amount,
|
|
3314
|
+
uniquePaymentNumber: (_p$metadata = p.metadata) === null || _p$metadata === void 0 ? void 0 : _p$metadata.unique_payment_number,
|
|
3315
|
+
voucherId: p.voucher_id
|
|
3316
|
+
};
|
|
3317
|
+
})
|
|
3318
|
+
});
|
|
3319
|
+
|
|
3320
|
+
// 构造订单参数,直接使用 localOrderData 中已处理好的数据
|
|
3321
|
+
orderParams = _objectSpread(_objectSpread({}, this.store.localOrderData), {}, {
|
|
3322
|
+
type: this.store.localOrderData.type,
|
|
3323
|
+
platform: this.store.localOrderData.platform,
|
|
3324
|
+
payments: paymentItems,
|
|
3325
|
+
// 添加支付项
|
|
3326
|
+
customer_id: (_this$store$currentCu2 = this.store.currentCustomer) === null || _this$store$currentCu2 === void 0 ? void 0 : _this$store$currentCu2.customer_id,
|
|
3327
|
+
// 添加客户ID
|
|
3328
|
+
is_price_include_tax: this.otherParams.is_price_include_tax,
|
|
3329
|
+
// core 有
|
|
3330
|
+
tax_title: this.otherParams.tax_title,
|
|
3331
|
+
// core 没有
|
|
3332
|
+
tax_rate: this.otherParams.tax_rate,
|
|
3333
|
+
// core 有
|
|
3334
|
+
tax_country_code: this.otherParams.tax_country_code,
|
|
3335
|
+
// core 没有
|
|
3336
|
+
currency_code: this.otherParams.currency_code,
|
|
3337
|
+
currency_symbol: this.otherParams.currency_symbol,
|
|
3338
|
+
currency_format: this.otherParams.currency_format,
|
|
3339
|
+
is_deposit: ((_this$store$currentOr16 = this.store.currentOrder) === null || _this$store$currentOr16 === void 0 ? void 0 : _this$store$currentOr16.is_deposit) || 0,
|
|
3340
|
+
deposit_amount: ((_this$store$currentOr17 = this.store.currentOrder) === null || _this$store$currentOr17 === void 0 ? void 0 : _this$store$currentOr17.deposit_amount) || '0.00',
|
|
3341
|
+
// surcharge_fee: this.otherParams.surcharge_fee,
|
|
3342
|
+
// surcharges: ,
|
|
3343
|
+
note: this.store.localOrderData.shop_note
|
|
3344
|
+
// deposit_amount:
|
|
3345
|
+
}); // 如果是更新操作,需要在参数中包含真实的订单ID
|
|
3346
|
+
|
|
3347
|
+
if (isUpdateOperation) {
|
|
3348
|
+
// 如果当前订单ID是虚拟ID,但订单已同步过,可能存在数据不一致的问题
|
|
3349
|
+
if (this.isVirtualOrderId(currentOrderId)) {
|
|
3350
|
+
console.error('[Checkout] 数据不一致警告:更新操作但订单ID仍为虚拟ID!', {
|
|
3351
|
+
currentOrderId: currentOrderId,
|
|
3352
|
+
isOrderSynced: this.store.isOrderSynced,
|
|
3353
|
+
reason: reason,
|
|
3354
|
+
orderUuid: this.store.currentOrder.uuid
|
|
3355
|
+
});
|
|
3356
|
+
|
|
3357
|
+
// 🔧 尝试数据修复:先不包含order_id,让后端创建
|
|
3358
|
+
// 这样至少能保证功能正常,后续会正确设置真实订单ID
|
|
3359
|
+
console.log('[Checkout] 尝试数据修复:暂时不包含order_id,让后端处理');
|
|
3360
|
+
console.log('[Checkout] 注意:这次调用将作为创建操作处理,但后续会修复数据一致性');
|
|
3361
|
+
} else {
|
|
3362
|
+
orderParams.order_id = currentOrderId;
|
|
3363
|
+
console.log("[Checkout] \u66F4\u65B0\u8BA2\u5355\u64CD\u4F5C\uFF0C\u5305\u542B\u8BA2\u5355ID: ".concat(currentOrderId));
|
|
3364
|
+
}
|
|
3365
|
+
} else {
|
|
3366
|
+
console.log('[Checkout] 创建新订单操作');
|
|
3367
|
+
}
|
|
3368
|
+
|
|
3369
|
+
// 调用 Order 模块的专用 createOrderByCheckout 方法
|
|
3370
|
+
_context41.next = 24;
|
|
3371
|
+
return this.order.createOrderByCheckout(orderParams);
|
|
3372
|
+
case 24:
|
|
3373
|
+
checkoutResponse = _context41.sent;
|
|
3374
|
+
console.log('[Checkout] 后端返回的响应数据:', {
|
|
3375
|
+
status: checkoutResponse === null || checkoutResponse === void 0 ? void 0 : checkoutResponse.status,
|
|
3376
|
+
code: checkoutResponse === null || checkoutResponse === void 0 ? void 0 : checkoutResponse.code,
|
|
3377
|
+
message: checkoutResponse === null || checkoutResponse === void 0 ? void 0 : checkoutResponse.message,
|
|
3378
|
+
data: checkoutResponse === null || checkoutResponse === void 0 ? void 0 : checkoutResponse.data
|
|
3379
|
+
});
|
|
3380
|
+
if (!isUpdateOperation) {
|
|
3381
|
+
_context41.next = 31;
|
|
3382
|
+
break;
|
|
3383
|
+
}
|
|
3384
|
+
// 更新操作:使用现有的订单ID
|
|
3385
|
+
realOrderId = currentOrderId;
|
|
3386
|
+
console.log("[Checkout] \u8BA2\u5355\u66F4\u65B0\u6210\u529F\uFF0C\u8BA2\u5355ID: ".concat(realOrderId));
|
|
3387
|
+
_context41.next = 52;
|
|
3388
|
+
break;
|
|
3389
|
+
case 31:
|
|
3390
|
+
// 创建操作:从响应中提取新的订单ID
|
|
3391
|
+
extractedOrderId = checkoutResponse === null || checkoutResponse === void 0 || (_data3 = checkoutResponse.data) === null || _data3 === void 0 ? void 0 : _data3.order_id; // 如果data.order_id不存在,尝试直接从根级获取
|
|
3392
|
+
if (!extractedOrderId) {
|
|
3393
|
+
extractedOrderId = checkoutResponse === null || checkoutResponse === void 0 ? void 0 : checkoutResponse.order_id;
|
|
3394
|
+
}
|
|
3395
|
+
|
|
3396
|
+
// 确保转换为字符串类型
|
|
3397
|
+
if (extractedOrderId !== undefined && extractedOrderId !== null) {
|
|
3398
|
+
extractedOrderId = String(extractedOrderId);
|
|
3399
|
+
}
|
|
3400
|
+
if (extractedOrderId) {
|
|
3401
|
+
_context41.next = 36;
|
|
3402
|
+
break;
|
|
3403
|
+
}
|
|
3404
|
+
throw new Error('后端返回的订单信息中未包含订单ID');
|
|
3405
|
+
case 36:
|
|
3406
|
+
realOrderId = extractedOrderId;
|
|
3407
|
+
console.log('[Checkout] 订单创建成功,真实订单ID:', realOrderId);
|
|
3408
|
+
|
|
3409
|
+
// 替换虚拟订单ID为真实订单ID
|
|
3410
|
+
console.log('[Checkout] 准备替换订单ID:', {
|
|
3411
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
3412
|
+
oldOrderId: this.store.currentOrder.order_id,
|
|
3413
|
+
newOrderId: realOrderId
|
|
3414
|
+
});
|
|
3415
|
+
_context41.prev = 39;
|
|
3416
|
+
_context41.next = 42;
|
|
3417
|
+
return this.payment.replaceOrderIdByUuidAsync(this.store.currentOrder.uuid, realOrderId);
|
|
3418
|
+
case 42:
|
|
3419
|
+
updatedOrder = _context41.sent;
|
|
3420
|
+
console.log('[Checkout] Payment模块替换订单ID结果:', {
|
|
3421
|
+
wasSuccessful: !!updatedOrder,
|
|
3422
|
+
returnedOrderId: updatedOrder === null || updatedOrder === void 0 ? void 0 : updatedOrder.order_id,
|
|
3423
|
+
expectedOrderId: realOrderId
|
|
3424
|
+
});
|
|
3425
|
+
if (updatedOrder) {
|
|
3426
|
+
console.log('[Checkout] Payment模块返回的更新后订单:', {
|
|
3427
|
+
uuid: updatedOrder.uuid,
|
|
3428
|
+
orderId: updatedOrder.order_id,
|
|
3429
|
+
totalAmount: updatedOrder.total_amount
|
|
3430
|
+
});
|
|
3431
|
+
this.store.currentOrder = updatedOrder;
|
|
3432
|
+
console.log('[Checkout] 订单ID替换成功,当前订单ID:', this.store.currentOrder.order_id);
|
|
3433
|
+
} else {
|
|
3434
|
+
console.error('[Checkout] Payment模块返回空订单,订单ID替换失败,开始手动替换');
|
|
3435
|
+
|
|
3436
|
+
// 如果替换失败,手动更新订单ID
|
|
3437
|
+
beforeManualUpdate = this.store.currentOrder.order_id;
|
|
3438
|
+
this.store.currentOrder.order_id = realOrderId;
|
|
3439
|
+
console.log('[Checkout] 手动设置订单ID:', {
|
|
3440
|
+
替换前: beforeManualUpdate,
|
|
3441
|
+
替换后: this.store.currentOrder.order_id,
|
|
3442
|
+
目标ID: realOrderId
|
|
3443
|
+
});
|
|
3444
|
+
}
|
|
3445
|
+
_context41.next = 52;
|
|
3446
|
+
break;
|
|
3447
|
+
case 47:
|
|
3448
|
+
_context41.prev = 47;
|
|
3449
|
+
_context41.t1 = _context41["catch"](39);
|
|
3450
|
+
console.error('[Checkout] 调用Payment模块替换订单ID时发生错误:', _context41.t1);
|
|
3451
|
+
|
|
3452
|
+
// 发生错误时也进行手动替换
|
|
3453
|
+
this.store.currentOrder.order_id = realOrderId;
|
|
3454
|
+
console.log('[Checkout] 错误恢复:手动设置订单ID:', realOrderId);
|
|
3455
|
+
case 52:
|
|
3456
|
+
// 标记订单已同步
|
|
3457
|
+
this.store.isOrderSynced = true;
|
|
3458
|
+
|
|
3459
|
+
// 触发订单同步完成事件
|
|
3460
|
+
_context41.next = 55;
|
|
3461
|
+
return this.core.effects.emit(CheckoutHooks.OnOrderSynced, {
|
|
3462
|
+
orderUuid: this.store.currentOrder.uuid,
|
|
3463
|
+
realOrderId: realOrderId,
|
|
3464
|
+
virtualOrderId: this.store.currentOrder.order_id,
|
|
3465
|
+
timestamp: Date.now(),
|
|
3466
|
+
isManual: isManual
|
|
3467
|
+
});
|
|
3468
|
+
case 55:
|
|
3469
|
+
// 验证最终状态
|
|
3470
|
+
finalOrderId = this.store.currentOrder.order_id;
|
|
3471
|
+
finalIsVirtual = this.isVirtualOrderId(finalOrderId || '');
|
|
3472
|
+
console.log("[Checkout] ".concat(syncType).concat(operation, "\u8BA2\u5355\u5230\u540E\u7AEF\u5B8C\u6210"), {
|
|
3473
|
+
返回的订单ID: realOrderId,
|
|
3474
|
+
当前存储的订单ID: finalOrderId,
|
|
3475
|
+
是否还是虚拟ID: finalIsVirtual,
|
|
3476
|
+
是否同步: this.store.isOrderSynced
|
|
3477
|
+
});
|
|
3478
|
+
|
|
3479
|
+
// 如果最终状态不正确,发出警告
|
|
3480
|
+
if (finalIsVirtual && !isUpdateOperation) {
|
|
3481
|
+
console.warn('[Checkout] 警告:订单创建后,当前订单ID仍然是虚拟ID,可能存在问题');
|
|
3482
|
+
}
|
|
3483
|
+
|
|
3484
|
+
// 返回真实订单ID
|
|
3485
|
+
return _context41.abrupt("return", realOrderId);
|
|
3486
|
+
case 60:
|
|
3487
|
+
case "end":
|
|
3488
|
+
return _context41.stop();
|
|
3489
|
+
}
|
|
3490
|
+
}, _callee41, this, [[39, 47]]);
|
|
3491
|
+
}));
|
|
3492
|
+
function syncOrderToBackendWithReturn() {
|
|
3493
|
+
return _syncOrderToBackendWithReturn.apply(this, arguments);
|
|
3494
|
+
}
|
|
3495
|
+
return syncOrderToBackendWithReturn;
|
|
3496
|
+
}())
|
|
3497
|
+
}, {
|
|
3498
|
+
key: "syncOrderToBackend",
|
|
3499
|
+
value: function () {
|
|
3500
|
+
var _syncOrderToBackend = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee42() {
|
|
3501
|
+
return _regeneratorRuntime().wrap(function _callee42$(_context42) {
|
|
3502
|
+
while (1) switch (_context42.prev = _context42.next) {
|
|
3503
|
+
case 0:
|
|
3504
|
+
_context42.prev = 0;
|
|
3505
|
+
_context42.next = 3;
|
|
3506
|
+
return this.syncOrderToBackendWithReturn(false);
|
|
3507
|
+
case 3:
|
|
3508
|
+
_context42.next = 10;
|
|
3509
|
+
break;
|
|
3510
|
+
case 5:
|
|
3511
|
+
_context42.prev = 5;
|
|
3512
|
+
_context42.t0 = _context42["catch"](0);
|
|
3513
|
+
console.error('[Checkout] 同步订单到后端失败:', _context42.t0);
|
|
3514
|
+
_context42.next = 10;
|
|
3515
|
+
return this.handleError(new Error("\u8BA2\u5355\u540C\u6B65\u5931\u8D25: ".concat(_context42.t0 instanceof Error ? _context42.t0.message : String(_context42.t0))), CheckoutErrorType.OrderCreationFailed);
|
|
3516
|
+
case 10:
|
|
3517
|
+
case "end":
|
|
3518
|
+
return _context42.stop();
|
|
3519
|
+
}
|
|
3520
|
+
}, _callee42, this, [[0, 5]]);
|
|
3521
|
+
}));
|
|
3522
|
+
function syncOrderToBackend() {
|
|
3523
|
+
return _syncOrderToBackend.apply(this, arguments);
|
|
3524
|
+
}
|
|
3525
|
+
return syncOrderToBackend;
|
|
3526
|
+
}()
|
|
3527
|
+
/**
|
|
3528
|
+
* 获取状态消息
|
|
3529
|
+
*/
|
|
3530
|
+
}, {
|
|
3531
|
+
key: "getStatusMessage",
|
|
3532
|
+
value: function getStatusMessage() {
|
|
3533
|
+
var _this$store$lastError;
|
|
3534
|
+
switch (this.store.status) {
|
|
3535
|
+
case CheckoutStatus.Initializing:
|
|
3536
|
+
return '正在初始化结账流程...';
|
|
3537
|
+
case CheckoutStatus.Ready:
|
|
3538
|
+
return '准备就绪,可以开始结账';
|
|
3539
|
+
case CheckoutStatus.CreatingOrder:
|
|
3540
|
+
return '正在创建订单...';
|
|
3541
|
+
case CheckoutStatus.OrderCreated:
|
|
3542
|
+
return '订单创建成功,请选择支付方式';
|
|
3543
|
+
case CheckoutStatus.ProcessingPayment:
|
|
3544
|
+
return '正在处理支付...';
|
|
3545
|
+
case CheckoutStatus.PaymentCompleted:
|
|
3546
|
+
return '支付完成';
|
|
3547
|
+
case CheckoutStatus.Completed:
|
|
3548
|
+
return '结账完成';
|
|
3549
|
+
case CheckoutStatus.Cancelled:
|
|
3550
|
+
return '结账已取消';
|
|
3551
|
+
case CheckoutStatus.Error:
|
|
3552
|
+
return ((_this$store$lastError = this.store.lastError) === null || _this$store$lastError === void 0 ? void 0 : _this$store$lastError.message) || '发生未知错误';
|
|
3553
|
+
default:
|
|
3554
|
+
return '';
|
|
3555
|
+
}
|
|
3556
|
+
}
|
|
3557
|
+
}, {
|
|
3558
|
+
key: "setOtherParams",
|
|
3559
|
+
value: function () {
|
|
3560
|
+
var _setOtherParams = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee43(params) {
|
|
3561
|
+
var _ref3,
|
|
3562
|
+
_ref3$cover,
|
|
3563
|
+
cover,
|
|
3564
|
+
_args43 = arguments;
|
|
3565
|
+
return _regeneratorRuntime().wrap(function _callee43$(_context43) {
|
|
3566
|
+
while (1) switch (_context43.prev = _context43.next) {
|
|
3567
|
+
case 0:
|
|
3568
|
+
_ref3 = _args43.length > 1 && _args43[1] !== undefined ? _args43[1] : {}, _ref3$cover = _ref3.cover, cover = _ref3$cover === void 0 ? false : _ref3$cover;
|
|
3569
|
+
if (cover) {
|
|
3570
|
+
this.otherParams = params;
|
|
3571
|
+
} else {
|
|
3572
|
+
this.otherParams = _objectSpread(_objectSpread({}, this.otherParams), params);
|
|
3573
|
+
}
|
|
3574
|
+
case 2:
|
|
3575
|
+
case "end":
|
|
3576
|
+
return _context43.stop();
|
|
3577
|
+
}
|
|
3578
|
+
}, _callee43, this);
|
|
3579
|
+
}));
|
|
3580
|
+
function setOtherParams(_x28) {
|
|
3581
|
+
return _setOtherParams.apply(this, arguments);
|
|
3582
|
+
}
|
|
3583
|
+
return setOtherParams;
|
|
3584
|
+
}()
|
|
3585
|
+
}, {
|
|
3586
|
+
key: "destroy",
|
|
3587
|
+
value: function () {
|
|
3588
|
+
var _destroy = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee44() {
|
|
3589
|
+
var _this$order, _this$order$destroy, _this$payment, _this$payment$destroy;
|
|
3590
|
+
return _regeneratorRuntime().wrap(function _callee44$(_context44) {
|
|
3591
|
+
while (1) switch (_context44.prev = _context44.next) {
|
|
3592
|
+
case 0:
|
|
3593
|
+
// 清理钱包模块的所有缓存数据
|
|
3594
|
+
this.payment.wallet.clearAllCache();
|
|
3595
|
+
|
|
3596
|
+
// 清理事件监听
|
|
3597
|
+
this.core.effects.offByModuleDestroy(this.name);
|
|
3598
|
+
|
|
3599
|
+
// 销毁子模块
|
|
3600
|
+
_context44.next = 4;
|
|
3601
|
+
return (_this$order = this.order) === null || _this$order === void 0 || (_this$order$destroy = _this$order.destroy) === null || _this$order$destroy === void 0 ? void 0 : _this$order$destroy.call(_this$order);
|
|
3602
|
+
case 4:
|
|
3603
|
+
_context44.next = 6;
|
|
3604
|
+
return (_this$payment = this.payment) === null || _this$payment === void 0 || (_this$payment$destroy = _this$payment.destroy) === null || _this$payment$destroy === void 0 ? void 0 : _this$payment$destroy.call(_this$payment);
|
|
3605
|
+
case 6:
|
|
3606
|
+
// 取消注册模块
|
|
3607
|
+
this.core.unregisterModule(this);
|
|
3608
|
+
console.log('[Checkout] 已销毁');
|
|
3609
|
+
case 8:
|
|
3610
|
+
case "end":
|
|
3611
|
+
return _context44.stop();
|
|
3612
|
+
}
|
|
3613
|
+
}, _callee44, this);
|
|
3614
|
+
}));
|
|
3615
|
+
function destroy() {
|
|
3616
|
+
return _destroy.apply(this, arguments);
|
|
3617
|
+
}
|
|
3618
|
+
return destroy;
|
|
3619
|
+
}()
|
|
3620
|
+
}]);
|
|
3621
|
+
return CheckoutImpl;
|
|
3622
|
+
}(BaseModule);
|