first commit
This commit is contained in:
commit
db5762abd4
687 files changed
+171307
No files matched your search
@@ -0,0 +1,104 @@
|
||||
function e(e, t = {}) {
|
||||
let n = {
|
||||
...e,
|
||||
...t,
|
||||
};
|
||||
return {
|
||||
product_id: Number(n.product_id),
|
||||
config_options: n.config_options ?? {},
|
||||
qty: Math.max(1, Number(n.qty ?? 1)),
|
||||
customfield: n.customfield ?? {},
|
||||
self_defined_field: n.self_defined_field ?? {},
|
||||
};
|
||||
}
|
||||
function t(e) {
|
||||
return JSON.parse(JSON.stringify(e));
|
||||
}
|
||||
function n(n) {
|
||||
return n.map((n) => t(e(n)));
|
||||
}
|
||||
function r(e) {
|
||||
return Array.isArray(e)
|
||||
? e.map(r)
|
||||
: e && typeof e == `object`
|
||||
? Object.fromEntries(
|
||||
Object.entries(e)
|
||||
.filter(([, e]) => e !== void 0)
|
||||
.sort(([e], [t]) => e.localeCompare(t))
|
||||
.map(([e, t]) => [e, r(t)]),
|
||||
)
|
||||
: e;
|
||||
}
|
||||
function i(t) {
|
||||
return JSON.stringify(r(e(t)));
|
||||
}
|
||||
function a(e, t) {
|
||||
if (!e) return;
|
||||
let n = e.item.self_defined_field ?? {};
|
||||
if (Object.keys(n).some((e) => !t.includes(e)))
|
||||
throw Error(`商品自定义字段已调整,请返回购物车删除该项后重新配置`);
|
||||
}
|
||||
var o = null;
|
||||
async function s(e) {
|
||||
let t = new TextEncoder().encode(i(e));
|
||||
return Array.from(
|
||||
new Uint8Array(await crypto.subtle.digest(`SHA-256`, t)),
|
||||
(e) => e.toString(16).padStart(2, `0`),
|
||||
).join(``);
|
||||
}
|
||||
async function c(e, t) {
|
||||
let n = [...t];
|
||||
o = {
|
||||
fingerprints: await Promise.all(e.map(s)),
|
||||
indices: n,
|
||||
};
|
||||
}
|
||||
async function l(e) {
|
||||
let t = o;
|
||||
if (!t) return null;
|
||||
o = null;
|
||||
let n = await Promise.all(e.map(s)),
|
||||
r = new Set();
|
||||
return t.indices.flatMap((e) => {
|
||||
let i = t.fingerprints
|
||||
.slice(0, e)
|
||||
.filter((n) => n === t.fingerprints[e]).length,
|
||||
a = n.flatMap((n, r) => (n === t.fingerprints[e] ? [r] : []))[i];
|
||||
return a === void 0 || r.has(a) ? [] : (r.add(a), [a]);
|
||||
});
|
||||
}
|
||||
function u(n, r) {
|
||||
let a = r ? t(r.item) : null,
|
||||
c = !1;
|
||||
return async (l, u) => {
|
||||
if (!r || !a) throw Error(`购物车编辑上下文缺失`);
|
||||
if (c) throw Error(`正在保存,请勿重复操作`);
|
||||
c = !0;
|
||||
let d = t(e(a, l));
|
||||
try {
|
||||
let c = (await n.get(`/cart`)).list?.[r.position];
|
||||
if (!c || i(c) !== i(a))
|
||||
throw Error(`购物车商品已变化,请返回购物车刷新后重新编辑`);
|
||||
if (!u()) throw Error(`配置已改变,请重新确认报价后保存`);
|
||||
let l = await n.put(`/cart/${r.position}`, {
|
||||
...d,
|
||||
expected_item: e(a),
|
||||
}),
|
||||
f = a;
|
||||
a = t({
|
||||
...a,
|
||||
...d,
|
||||
});
|
||||
let p = o;
|
||||
return (
|
||||
p &&
|
||||
p.fingerprints[r.position] === (await s(f)) &&
|
||||
(p.fingerprints[r.position] = await s(a)),
|
||||
l
|
||||
);
|
||||
} finally {
|
||||
c = !1;
|
||||
}
|
||||
};
|
||||
}
|
||||
export { l as a, c as i, t as n, a as o, u as r, n as t };
|
||||
Reference in new issue
Block a user