@pisell/pisellos
Version:
一个可扩展的前端模块化SDK框架,支持插件系统
136 lines (134 loc) • 4.98 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/solution/BuyTickets/index.ts
var BuyTickets_exports = {};
__export(BuyTickets_exports, {
BuyTicketsImpl: () => BuyTicketsImpl
});
module.exports = __toCommonJS(BuyTickets_exports);
var import_modules = require("../../modules/");
var import_BaseModule = require("../../modules/BaseModule");
__reExport(BuyTickets_exports, require("./types"), module.exports);
var BuyTicketsImpl = class extends import_BaseModule.BaseModule {
constructor(name, version) {
super(name, version);
// 提供给 baseModule 用的默认名称 和 默认版本
this.defaultName = "buyTickets";
this.defaultVersion = "1.0.0";
this.isSolution = true;
this.otherParams = {};
}
async initialize(core, options) {
this.core = core;
this.store = options.store || {};
this.otherParams = options.otherParams || {};
console.log("[BuyTickets] 初始化完成");
this.request = core.getPlugin("request");
this.window = core.getPlugin("window");
if (!this.request) {
throw new Error("购物车模块需要 request 插件支持");
}
if (this.otherParams.prodctIds) {
await this.loadProductsByIds(this.otherParams.prodctIds);
}
await this.core.effects.emit(`${this.name}:onInited`, {});
}
// 通过 ids 获取产品,在当前解决方案下,获取到的就是主商品
async loadProductsByIds(ids) {
const productsData = await this.request.post("/product/query", {
ids,
open_quotation: 1,
open_bundle: 1,
with: ["bundleGroup.bundleItem"],
status: "published",
num: 10,
skip: 1
});
const mainProducts = new import_modules.ProductList(`product-kiosk-main-list`);
this.core.registerModule(mainProducts, {
initialState: {
list: productsData.data.list
}
});
this.store.mainProducts = mainProducts;
await this.core.effects.emit(`${this.name}:onMainProductsLoaded`, {});
}
// 通过 ids 获取产品,在当前解决方案下,获取到的就是其他商品
async loadProductsByCategory(categoryId) {
}
async destroy() {
await this.core.effects.emit(`${this.name}:onDestroy`, {});
console.log("[BuyTickets] 已销毁");
}
// 获取当前绑定的所有商品
async getProducts() {
var _a;
const mainData = await this.store.mainProducts.getProducts() || [];
const otherData = await ((_a = this.store.otherProducts) == null ? void 0 : _a.getProducts()) || [];
await this.core.effects.emit(`${this.name}:onGetProducts`, [
...mainData,
...otherData
]);
return [...mainData, ...otherData];
}
// 根据 id 获取商品详情,他会尝试先去主列表里找,找不到再去子列表,还找不到就报错
async getProduct(id) {
var _a, _b;
const mainProduct = await ((_a = this.store.mainProducts) == null ? void 0 : _a.getProduct(id));
const otherProduct = await ((_b = this.store.otherProducts) == null ? void 0 : _b.getProduct(id));
if (mainProduct)
return mainProduct;
if (otherProduct)
return otherProduct;
throw new Error(`Product not found: ${id}`);
}
// 商品列表页提交
async listSubmit(data) {
const res = await this.core.effects.emit(`${this.name}:onListSubmit`, {
...data,
products: this.getProducts()
});
if (res.status === false)
return res;
this.window.localStorage.setItem(
"buyTickets:listSubmit",
JSON.stringify({ ...data, products: this.getProducts() })
);
console.log("listSubmit 应该走逻辑层的 API 发请求了");
}
// 购物车提交
async cartSubmit(data) {
await this.core.effects.emit(`${this.name}:onCartSubmit`, {
...data,
products: this.getProducts()
});
}
// 结算提交
async checkoutSubmit(data) {
await this.core.effects.emit(`${this.name}:onCheckoutSubmit`, {
...data,
products: this.getProducts()
});
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
BuyTicketsImpl,
...require("./types")
});